Backend
-
[Backend] EDABackend 2025. 7. 15. 10:06
MSA나의 애플리케이션을 ‘독립적으로 배포 가능한 서비스 단위’로 분할을 하여, 서로 간의 변경과 조합이 가능하도록 이루는 구조를 갖는 것을 의미하며 현대적 백엔드 개발의 중심적인 아키택쳐로 평가받고 있다.그러나 공학에서 '완벽'은 없듯이문제점설명서비스 간 통신 문제각 서비스는 독립적으로 배포되고 운영되기에 다른 서비스와 통신시 지연이 발생할 수 있다.데이터 일관성 문제각 서비스는 독립적인 데이터를 각각 가지고 있기에 서비스가 서로 다른 데이터를 가져 문제 발생의 여지가 있다.트랜젝션 문제서비스가 독립적으로 동작하기에 각각의 서비스에서 발생하는 트랜젝션을 확인하기 어렵다.이러한 문제들이 있다.이러한 문제들을 일정 부분 해결할 수 있는 것이 EDA,이벤트 기반 아키택쳐이다.E..D..A?기본적으로 이벤트 ..
-
[Backend] OAuth와 JWTBackend 2025. 6. 8. 22:38
인증/인가개발자라면 한 번쯤 인증과 인가를 혼동해본 경험이 있을 것이다.인증(Authentication)은 "너는 누구냐?"에 대한 답이다. 로그인할 때 입력하는 아이디와 패스워드가 정말 그 사람 것인지 확인하는 과정이다. 카페에서 멤버십 카드를 보여주는 것과 같다고 생각하면 된다.인가(Authorization)는 "너는 무엇을 할 수 있냐?"에 대한 답이다. 로그인한 사용자가 특정 기능을 사용하거나 데이터에 접근할 권한이 있는지 판단한다. 회사에서 사원증으로 출입할 수 있는 층이 정해져 있는 것처럼 말이다.이 두 개념을 명확히 구분해야 JWT와 OAuth의 차이점도 이해할 수 있다.JWTJWT?JWT는 JSON Web Token의 줄임말이다. RFC 7519 표준으로 정의된 토큰 형식으로, 당사자 간에..
-
[Backend] MQBackend 2025. 5. 5. 16:23
Message Queue?메시지 큐(Message Queue; MQ)는 메시지를 송신하는 애플리케이션(Producer)과 이를 수신하는 애플리케이션(Consumer) 간의 비동기 통신을 가능하게 하는 시스템이다. 메시지 큐를 사용하면 메시지를 임시 저장하는 큐를 통하여 애플리케이션 간 통신이 이루어지며 이로 인하여 애플리케이션의 확장성과 성능을 향상할 수 있다.주요 특징1. 비동기 통신: Producer와 Consumer는 당연하지만 독립적으로 동작하므로 Producer가 큐에 메세지를 넣으면 Consumer가 이를 필요하고 또한 가능할 때 가져가 처리한다. 따라서 서로 직접 통신하지 않아도 된다.2. 내결함성: 큐에 메세지를 저장함으로서 Consumer가 다운되거나 문제가 생기더라도 메시지가 큐에 저장..
-
[Backend] CloudWatch 이론Backend 2025. 4. 29. 22:51
CloudWatch?AWS에는 아주 다양한 서비스가 있다.그리고 이러한 서비스들을 모니터링해야 할 수 있는데 이를 위하여 AWS에서 지원하는 서비스이다. 각 서비스의 지표를 감시해 알림을 보내고 임계값을 넘거나 한다면 이벤트를 발생시킬 수 있다.지표만약, "EC2 인스턴스의 CPU 점유율을 보고 싶다""RDS 인스턴스의 CPU 점유율을 보고 싶다" 라고 한다면, EC2, RDS 는 논리적으로 구분하기 위한 Namespace 가 되고 CPU 점유율은 지표값(metric)이 된다.위 표와 같이 AWS 리소스를 가지고 있다고 하면 EC2, RDS 는 Namespace 라고 하며 인스턴스 개별로 보거나 인스턴스 유형(type) 으로 묶어서 보거나 또는, 같은 오토스케일링 그룹으로 묶어서 보는 것을 Dimensi..
-
[Backend] FeignBackend 2025. 3. 26. 10:41
Feign!Netflix에서 제공하는 API 클라이언트 라이브러리로 서버 단에서 외부 API 요청을 편리하게 하는 것이 목적인 라이브러리이다.특징선언형 인터페이스와 어노테이션만으로 REST API를 요청할 수 있다복잡한 코드 없이 메서드처럼 간단히 외부 API를 요청할 수 있다@FeignClient를 이용하여 Spring Cloud 환경에서 쉽게 서비스 간 통신이 가능하다Ribbon, Hystrix 등과 통합되 로드 밸런싱,장애 처리 등의 기능과도 동시 사용이 가능한다RestTemplate vs FeignGET http://localhost:8081/users/{id}이러한 URL로 HTTP 요청을 전송하는 코드를 RestTemplate과 Feign를 이용하여 구현했을때 각각 어떤 차이가 있는지 알아보겠..
-
[Backend] Grafana LokiBackend 2025. 3. 6. 17:21
Loki?Grafana Labs에서 개발한 로그 데이터 집계 시스템으로 Prometheus의 메트릭 수집과 유사하게 로그 데이터를 수집/저장하며 Grafana와 통합을 통하여 강력한 시각화와 분석을 제공한다.분산 시스템을 상정하고 설계되어 기본적으로 수평 확장이 가능하며 대규모 로그 데이터를 처리할 수 있다.효율적인 저장방식Loki는 로그 데이터 전체가 아니라 Metadata만 인덱싱하는 방식을 가져간다.이런 식으로 전체 데이터를 인덱싱하는게 아니라 일부분만 인덱싱하는 방식은 다른 솔루션보다 적은 저장 공간이 필요함을 의미한다. 또한,데이터를 라벨링하여 필요한 로그를 빠르게 찾을 수 있도록 정리한다.Loki의 동작Loki는 위해 만들어진 Promtail을 통하여 로그를 가져와 저장한다.Grafana에서 ..
-
[Backend] gRPCBackend 2025. 2. 28. 04:02
g...RPC?gRPC란 Google에서 개발한 오픈소스이며 원격 프로시저 호출(Remote Procedure Calls)를 위한 통신규약,즉 프로토콜이다.더 쉽게 말하자면 A 서버에서 만들어 둔 함수를 B 서버에서 호출하여 사용할 수 있다.Remote Procedure Calls기존에도 소켓(Socket)이라는 훌륭한 통신방식이 존재하였지만 통신 과정을 직접 구현하며 개발자의 부담이 커지고 데이터의 포맷팅을 처리하는 것도 서비스가 고도화되고 대형화될 수록 어려워졌다.이때 RPC라는 기술이 등장하였는데 네트워크로 연결된 서버 상의 프로시저(함수 등)를 원격으로 호출할 수 있는 기술이었다.IDL(Interface Definition Language) 기반으로 다양한 언어로 구동되는 환경에서도 확장이 가능하..
-
[Backend] MySQL에서 한글 검색을...?Backend 2025. 2. 6. 13:35
문제상황여느때와 같이 몇몇의 친구들과 토이 프로젝트를 하고 있던 어느 날 심각한 고민에 빠지게 된다.한글로 저장된 사용자들의 이름을 검색할 수 있어야 하는데 지금까지는 MongoDB,Elaticsearch의 Nori 형태소 분석기를 써서 아주 자연스러운 한글 검색을 구현해냈지만 많아봐야 150여개의 적은 데이터에서 길어봤자 10자를 안넘어가는 한글 검색을 위해 하나의 DB를 추가적으로 운용하자는 것은 오히려 득보다 실이 더 많을 것 같았다.그냥 Like문이나 쓰면 안되나?거두절미하고 사실 이미 간단한 검색은 충분이 구현 가능하다.SELECT * FROM member WHERE name LIKE '%김%';다음과 같은 쿼리문을 작성할 수 있다면 "member 테이블에서 -> name 칼럼의 -> "김"이 ..