PART 2 · 강의 3/4
이벤트 기반
아키텍처
Event-Driven Architecture, CQRS, Event Sourcing 패턴으로 확장 가능하고 느슨하게 결합된 시스템을 설계합니다.
01
이벤트 기반 아키텍처란?
Event-Driven Architecture (EDA)의 핵심 개념
"시스템의 상태 변화를 이벤트로 표현하고, 이벤트에 반응하여 동작하는 아키텍처"
느슨한 결합, 확장성, 실시간 처리를 가능하게 하는 핵심 패턴
이벤트 흐름 시각화
Producer
이벤트 발행
Event Broker
이벤트 중개
Consumer
이벤트 처리
📌 EDA의 핵심 특징
- 비동기 통신 — Producer와 Consumer가 독립적으로 동작
- 느슨한 결합 — 서비스 간 직접 의존성 제거
- 확장성 — Consumer를 독립적으로 스케일링 가능
- 실시간 처리 — 이벤트 발생 즉시 반응 가능
02
CQRS 패턴
Command Query Responsibility Segregation
💡 CQRS란?
읽기(Query)와 쓰기(Command)를 분리하여 각각 최적화된 모델로 처리하는 패턴입니다. 복잡한 도메인에서 읽기/쓰기 요구사항이 다를 때 효과적입니다.
✏️
Command Side (쓰기)
Command 수신 (CreateOrder, UpdateUser...)
비즈니스 로직 검증
Write Model에 저장
도메인 이벤트 발행
🔍
Query Side (읽기)
이벤트 구독 (Event Handler)
Read Model 갱신 (비정규화)
Query 처리 (최적화된 조회)
결과 반환 (빠른 응답)
성능 최적화
읽기/쓰기 각각에 최적화된 데이터 모델과 저장소 사용
독립적 확장
읽기 부하가 높으면 Query Side만 스케일 아웃
보안 분리
쓰기와 읽기에 다른 보안 정책 적용 가능
03
Event Sourcing
이벤트를 통한 상태 관리
⚠️ Event Sourcing이란?
현재 상태를 직접 저장하는 대신, 상태를 변경한 모든 이벤트를 순서대로 저장합니다. 현재 상태는 이벤트들을 재생(replay)하여 계산합니다.
주문 처리 이벤트 타임라인
T1: 10:00:00
OrderCreated
{ orderId: "ORD-001", items: [...], total: 50000 }
T2: 10:05:00
PaymentReceived
{ orderId: "ORD-001", amount: 50000, method: "card" }
T3: 10:30:00
OrderShipped
{ orderId: "ORD-001", carrier: "FastShip", tracking: "TRK123" }
T4: 11:00:00
ItemReturned
{ orderId: "ORD-001", itemId: "ITEM-002", reason: "defect" }
T5: 11:30:00
RefundProcessed
{ orderId: "ORD-001", amount: 15000 }
📌 Event Sourcing 장점
- 완전한 감사 추적 — 모든 변경 이력이 이벤트로 보존됨
- 시간 여행 — 특정 시점의 상태를 재구성할 수 있음
- 디버깅 용이 — 문제 발생 시 이벤트 재생으로 원인 파악
- 이벤트 재처리 — 버그 수정 후 이벤트 재생으로 데이터 복구
04
인터랙티브 데모
이벤트 발행과 구독 체험하기
이벤트 시뮬레이터
[시스템] 이벤트 시뮬레이터가 준비되었습니다. 버튼을 클릭하여 이벤트를 발행해보세요.
💡 실제 활용 사례
이커머스 플랫폼에서 주문 이벤트가 발행되면, 재고 서비스는 재고를 감소시키고, 알림 서비스는 고객에게 이메일을 보내고, 분석 서비스는 주문 통계를 업데이트합니다. 각 서비스는 독립적으로 동작합니다.
05
패턴 비교 및 적용
언제 어떤 패턴을 사용할까?
| 특성 | 기본 EDA | CQRS | Event Sourcing |
|---|---|---|---|
| 복잡도 | 낮음 | 중간 | 높음 |
| 주요 목적 | 서비스 분리 | 읽기/쓰기 최적화 | 이벤트 이력 보존 |
| 적합한 경우 | 마이크로서비스 통신 | 읽기 부하 >> 쓰기 부하 | 감사 추적 필수 |
| 데이터 일관성 | 최종 일관성 | 최종 일관성 | 강한 일관성 가능 |
⚠️ 주의사항
이벤트 기반 아키텍처는 강력하지만 복잡성을 증가시킵니다. 단순한 CRUD 애플리케이션에는 오버엔지니어링이 될 수 있습니다. 비즈니스 요구사항과 팀의 역량을 고려하여 적절한 수준의 패턴을 선택하세요.
SUMMARY
핵심 요약
- EDA는 이벤트를 통해 느슨하게 결합된 비동기 시스템을 구축하는 패턴
- CQRS는 읽기와 쓰기를 분리하여 각각 최적화하는 패턴
- Event Sourcing은 상태 대신 이벤트를 저장하여 완전한 이력을 보존
- 세 패턴은 함께 사용될 때 시너지가 높음
- 복잡성과 이점을 고려하여 적절한 수준의 패턴을 선택해야 함