[5] EDA
·
MSA/MSA 아키텍처
이벤트 기반 아키텍처(EDA) 이해하기현대적인 분산 시스템, 특히 마이크로서비스 아키텍처(MSA)를 구축할 때 서비스 간의 효과적인 통신 방식은 시스템 전체의 성능과 확장성, 유지보수성에 큰 영향을 미친다. 전통적인 요청/응답(Request/Response) 모델은 구현이 직관적이지만, 서비스 간의 강한 결합(Tight Coupling)과 동기적 차단(Blocking) 문제를 야기할 수 있다. 이러한 문제들을 해결하고 보다 유연하고 탄력적인 시스템을 구축하기 위한 아키텍처 스타일이 바로 **이벤트 기반 아키텍처(EDA, Event-Driven Architecture)**이다.EDA란 무엇인가?**이벤트 기반 아키텍처(EDA)**는 시스템 내에서 발생하는 의미 있는 **사건(Event)**을 중심으로 구성..
[4] SAGA 패턴
·
MSA/MSA 아키텍처
1. SAGA 패턴: 분산 트랜잭션 관리 기법 마이크로서비스 아키텍처(MSA)는 서비스별 독립적인 데이터베이스 사용을 권장한다(Database-per-Service). 이는 서비스 자율성과 기술 다양성을 높이지만, 여러 서비스에 걸쳐 비즈니스 로직을 처리해야 할 때 데이터 일관성을 유지하기 어렵게 만든다. 예를 들어, 전자상거래 시스템에서 주문 생성(order-service), 결제 처리(payment-service), 재고 감소(inventory-service), 배송 시작(shipping-service)은 각각 다른 서비스와 데이터베이스에서 처리될 수 있다. 이 모든 과정이 하나의 원자적인 트랜잭션처럼 동작해야 하지만, 전통적인 2단계 커밋(2PC) 방식은 MSA 환경의 동기적 차단과 병목 문제로..
[3] CQRS
·
MSA/MSA 아키텍처
1. CQRS란 무엇인가? 마이크로서비스 아키텍처(MSA)와 같이 복잡한 시스템을 설계할 때 데이터 관리 전략은 매우 중요하다. 특히, k8s 처럼 서비스별로 데이터베이스를 분리하는 'Database-per-Service' 패턴을 따를 경우, 데이터 변경 작업과 조회 작업의 요구사항이 달라 충돌하는 경우가 많다. 이러한 문제를 해결하기 위한 패턴 중 하나가 CQRS (Command Query Responsibility Segregation)이다. CQRS는 시스템에서 데이터의 상태를 변경하는 책임(Command)과 데이터를 조회하는 책임(Query)을 명확하게 분리하는 디자인 패턴이다. 전통적인 CRUD 모델에서는 단일 모델과 데이터 저장소를 사용하여 데이터의 생성, 읽기, 수정, 삭제를 모두 처리하지..
[2] gRPC
·
MSA/MSA 아키텍처
1. gRPC: 마이크로서비스 간 효율적인 통신 방법마이크로서비스 아키텍처(MSA)에서는 서비스 간의 원활하고 효율적인 통신이 매우 중요하다. 전통적인 REST API(HTTP/JSON) 방식 외에도, gRPC는 특히 성능과 명확한 계약 정의가 중요할 때 강력한 대안이 될 수 있다. 이 글에서는 heojunhyoung/k8s-msa 프로젝트의 예시를 통해 gRPC가 어떻게 구현되고 동작하는지 알아볼 것이다.2. gRPC란 무엇인가?gRPC(gRPC Remote Procedure Calls)는 Google에서 개발한 고성능 오픈소스 RPC(Remote Procedure Call) 프레임워크이다. RPC는 마치 로컬 함수를 호출하는 것처럼 네트워크상의 다른 서버에 있는 함수(프로시저)를 호출할 수 있게 해주..
[1] OpenFeign
·
MSA/MSA 아키텍처
1. OpenFeign: 마이크로서비스 간 REST API 호출을 간결하게 마이크로서비스 아키텍처(MSA)에서는 각 서비스가 독립적으로 기능을 수행하며, 필요한 경우 다른 서비스와 통신하여 데이터를 주고받아야 한다. 이때 서비스 간 통신 방식 중 하나로 REST API 호출이 널리 사용된다. Spring Cloud 환경에서 이러한 REST API 호출을 더욱 간편하고 선언적으로 구현할 수 있도록 도와주는 도구가 바로 OpenFeign이다.2. OpenFeign이란 무엇인가? OpenFeign은 Netflix에서 개발한 선언적(Declarative) REST 클라이언트인 Feign을 Spring Cloud 생태계에 통합한 라이브러리이다. 개발자는 호출하려는 원격 서비스의 API 엔드포인트를 Java 인터페..
[11] MSA: Service Discovery vs. API Gateway
·
MSA/MSA 기본
1. 들어가기앞서 Service Discovery와 API Gateway의 동작 순서 및 역할은 두 개념이 서로 연관되어 있어 혼동을 유발할 수 있다. 결론적으로, Service Discovery가 기반 시스템으로 먼저 구축되고, API Gateway는 그 정보를 활용하여 동작한다. 둘의 관계와 동작 원리는 다음과 같다.2. 동작 순서와 원리 🏛️전체적인 흐름은 '새로 지은 회사 사옥'에 비유할 수 있다.[준비 단계] 각 부서(마이크로서비스) 입주 및 내선번호 등록 (Service Discovery의 Service Registration)회사 사옥(MSA 시스템)이 구축되면, '인사팀', '회계팀', '개발팀' 같은 여러 부서(각각의 마이크로서비스)가 입주를 시작한다.각 부서는 입주와 동시에 자신의 위..
[10] MSA: API Gateway
·
MSA/MSA 기본
1. MSA의 관문: API 게이트웨이와 서비스 통신 마이크로서비스 아키텍처(MSA)에서는 시스템이 수많은 독립적인 서비스로 분리된다. 이때 클라이언트(웹, 모바일 앱 등)가 각 서비스의 주소를 모두 알고 직접 통신해야 한다면, 인증, 로깅, 라우팅 등 공통적인 기능들이 중복 구현되고 보안에 매우 취약한 구조가 된다. API 게이트웨이(API Gateway)는 이러한 문제들을 해결하기 위해 모든 클라이언트의 요청을 받아 처리하는 단일 진입점(Single Point of Entry) 역할을 수행하는 서버다. 2. API 게이트웨이2.1. 개요 API 게이트웨이는 시스템의 외부에 위치하여, 마치 '회사의 안내 데스크'와 같은 역할을 한다. 외부 방문객은 특정 부서나 직원을 직접 찾아가는 대신, 안내 데스크..
[9] MSA: Service Discovery
·
MSA/MSA 기본
1. MSA의 필수 요소: 서비스 디스커버리 (Service Discovery) 마이크로서비스 아키텍처(MSA)에서는 수많은 서비스가 독립적으로 동작하며 서로 통신한다. 이때 "서비스 A가 서비스 B를 어떻게 찾아서 호출할 수 있는가?"라는 근본적인 문제가 발생한다. 서비스 디스커버리(Service Discovery)는 바로 이 문제를 해결하기 위한 핵심 패턴이다. 2. Service Discovery2.1. 문제의 발단: 동적인 서비스 위치클라우드 환경에서 서비스 인스턴스는 가상 머신(VM)이나 컨테이너 위에서 실행된다. 이들의 네트워크 주소(IP, Port)는 고정되어 있지 않고, 오토 스케일링이나 장애 복구 등의 이유로 동적으로 변하는 것이 일반적이다.동일 머신, 다른 포트: 하나의 머신에서 여러..