Saga 패턴은 마이크로서비스 환경에서 분산 트랜잭션을 여러 개의 로컬 트랜잭션으로 분해하여 처리하는 패턴이다. 각 단계 실패 시 보상 트랜잭션(Compensating Transaction)으로 롤백한다.
| 구분 | 코레오그래피(Choreography) | 오케스트레이션(Orchestration) |
|---|---|---|
| 제어 방식 | 서비스들이 이벤트를 발행·구독하며 자율적으로 협력 | 중앙 Saga Orchestrator가 각 서비스에 명령 지시 |
| 결합도 | 느슨한 결합(이벤트 브로커 경유) | Orchestrator와 서비스 간 직접 호출 |
| 복잡도 | 서비스 증가 시 이벤트 흐름 추적 어려움 | Orchestrator가 복잡성을 중앙 집중화 → 관리 용이 |
| 적합 규모 | 단순한 2~4 서비스 협력 | 복잡한 비즈니스 워크플로(주문→결제→배송→재고) |
| 도구 | Kafka, RabbitMQ 이벤트 기반 | Conductor, Temporal, Axon Framework |
Outbox 패턴은 DB 트랜잭션과 메시지 발행을 원자적으로 처리하여 “DB 저장 성공 but 메시지 유실” 문제를 해결한다.
동작 방식:
CQRS(Command Query Responsibility Segregation)는 쓰기 모델(Command)과 읽기 모델(Query)을 분리하는 패턴이다. 이벤트 소싱과 결합하면 Command 측에서 이벤트를 저장하고, Query 측에서 이벤트를 소비하여 읽기 최적화 뷰를 생성한다.
| 구분 | Command (쓰기) 측 | Query (읽기) 측 |
|---|---|---|
| 역할 | 비즈니스 규칙 적용, 상태 변경 | 빠른 읽기, 복잡한 집계 쿼리 |
| 저장소 | 이벤트 스토어 (Append-Only) | 읽기 최적화 DB (Redis, Elasticsearch, RDBMS 뷰) |
| 일관성 | 강한 일관성 (로컬 트랜잭션) | 결과적 일관성 (이벤트 전파 후 동기화) |
| 확장성 | 쓰기 처리량 독립 확장 | 읽기 처리량 독립 확장 (캐싱·복제) |
Saga 패턴은 마이크로서비스 분산 트랜잭션을 보상 트랜잭션으로 관리하며, Transactional Outbox는 DB와 메시지 발행의 원자성을 보장한다. CQRS+이벤트 소싱은 쓰기·읽기 최적화와 완전한 감사 추적을 동시에 실현한다. 결과적 일관성은 멱등성·DLQ·이벤트 재생 전략으로 안전하게 관리할 수 있다.
요양원 선택 전 반드시 확인해야 할 체크리스트를 공개합니다. 공식 평가 자료 조회법, 방문 시 확인…
공공기관 채용 비리의 실태와 피해 지원자의 대응법을 정리했습니다. 채용 비리 신고 방법, 공익신고자 보호제도, 취준생…
주식 손실을 세금 절약에 활용하는 합법적 방법을 공개합니다. 해외주식 손익통산, ISA 계좌 활용, 연금계좌 절세까지…
배달이 예상 시간보다 크게 늦으면 취소·환불을 요청할 수 있습니다. 배달앱별 지연 취소 방법과 잘못 배달됐을…
통신비 절약의 핵심은 요금제 최적화입니다. 내 데이터 사용량 확인법, 알뜰폰 전환 비교, 위약금 없이 요금제…