1. 이벤트 드리븐 아키텍처 (EDA)의 이해
- 1-1) EDA의 정의
- 시스템 내에서 발생하는 이벤트(상태의 변화나 특정 행동)를 감지하고, 이를 비동기적으로 전파하여 동작하는 소프트웨어 설계 방식.
- 서비스 간에 직접적인 호출(REST API 등) 대신 메시지를 주고받음으로써 시스템 간의 결합도를 획기적으로 낮춤
- 1-2) 핵심 구성 요소
- 이벤트(Event): "주문이 완료됨", "회원 가입됨"과 같이 시스템에서 일어난 과거 시점의 사실을 담은 메시지
- 이벤트 소스(Producer): 이벤트를 생성하여 메시지 브로커(이벤트 버스)에 던지는 주체
- 이벤트 핸들러(Consumer): 브로커를 구독하고 있다가 메시지가 도착하면 이를 수신하여 비즈니스 로직을 수행
- 이벤트 버스(Broker): Kafka, RabbitMQ 등 소스와 핸들러 사이에서 메시지를 중개하고 보관하는 통로
2. 아키텍처의 명암 (장단점)
2-1) 주요 장점
- 느슨한 결합(Loose Coupling): 서비스끼리 서로의 존재를 몰라도 됨. 이로 인해 독립적인 개발과 배포가 용이해짐
- 유연한 확장성: 특정 이벤트를 처리하는 컨슈머만 개별적으로 늘리거나 줄이는 수평 확장이 매우 자유로움
- 응답성 향상: 비동기 처리를 통해 클라이언트에게 즉각적인 응답을 주고, 시간이 걸리는 작업은 백그라운드에서 처리함
2-2) 고려해야 할 단점
- 설계 복잡도: 데이터 일관성(최종 일관성) 유지와 이벤트 추적이 어려워질 수 있음
- 운영 비용: 메시지 브로커라는 추가 인프라를 관리해야 하며, 이벤트 유실이나 재처리에 대한 정교한 복구 메커니즘이 필수적임
3. 실무 예시: 온라인 쇼핑몰 주문 시스템
- 시나리오: 고객이 '주문하기' 버튼을 누름
- 주문 서비스: DB에 주문서를 저장하고
주문 생성됨이벤트를 Kafka에 발행함 - 메시지 브로커: 해당 이벤트를 안전하게 보관하고 각 구독 서비스에 전달함
- 구독 서비스들의 개별 처리:
- 재고 서비스: 이벤트를 받자마자 해당 상품 재고를 차감함
- 배송 서비스: 주소 정보를 확인하여 배송 대기 상태로 전환함
- 결제 서비스: 사용자의 결제 수단을 검증하고 승인 처리를 진행함
- 주문 서비스: DB에 주문서를 저장하고
4. Spring Cloud Stream (SCS) 가이드
4-1) Spring Cloud Stream이란?
- 마이크로서비스에서 메시지 브로커와의 연동을 추상화하여 제공하는 프레임워크
- 비즈니스 로직에만 집중할 수 있도록 복잡한 브로커 연결 코드를 대신 처리해 줌
4-2) 핵심 메커니즘
- 바인더(Binder) 추상화: Kafka용 바인더, RabbitMQ용 바인더만 갈아 끼우면 소스 코드 수정 없이 브로커를 변경할 수 있음
- 선언적 모델: 간단한 애너테이션이나 함수형 프로그래밍 방식을 통해 이벤트를 발행하고 수신함
- 4-3) 설정 및 구현 전략
- 프로듀서: 특정 채널로 메시지를 내보내는 인터페이스 구현
- 컨슈머: 특정 채널을 구독하여 데이터가 들어오면 동작할 핸들러 작성
- 유연성: 외부 설정을 통해 토픽 이름, 파티션 개수 등을 간편하게 관리함
5. 결론: 왜 EDA를 선택하는가?
현대의 MSA 환경에서 서비스 간의 동기 호출은 장애 전파와 성능 저하의 주범이 됨. 이벤트 드리븐 방식은 시스템을 유연하게 만들고 대규모 트래픽을 효율적으로 분산 처리할 수 있는 가장 강력한 무기 중 하나임.
'MSA' 카테고리의 다른 글
| 9 - 분산추적 (0) | 2026.02.23 |
|---|---|
| 8 - Config (0) | 2026.02.23 |
| 7 - 보안 구성 (0) | 2026.02.23 |
| 6 - API 게이트웨이 (0) | 2026.02.23 |
| 5 - 서킷브레이커 (0) | 2026.02.23 |