SAGA 패턴은 마이크로서비스 환경에서 여러 서비스에 걸친 분산 트랜잭션을 일련의 로컬 트랜잭션과 보상 트랜잭션으로 처리하는 패턴이다.
문제 배경
모놀리식: 하나의 DB → ACID 트랜잭션으로 원자성 보장
마이크로서비스:
주문 서비스 (주문 DB)
결제 서비스 (결제 DB)
재고 서비스 (재고 DB)
→ 여러 서비스에 걸친 2PC는 가용성 저하
→ SAGA로 최종 일관성 달성
두 가지 SAGA 구현 방식
1. Choreography (코레오그래피)
각 서비스가 이벤트를 직접 발행/구독. 중앙 조율자 없음.
주문 생성 → OrderCreated 이벤트
→ 결제 서비스: 결제 처리 → PaymentCompleted
→ 재고 서비스: 재고 차감 → InventoryReserved
→ 배송 서비스: 배송 준비
2. Orchestration (오케스트레이션)
중앙 SAGA Orchestrator가 각 서비스를 순차적으로 호출.
SAGA Orchestrator:
1. 주문 서비스 → 주문 생성
2. 결제 서비스 → 결제
3. 재고 서비스 → 재고 차감
실패 시:
3F. 재고 복구 (보상 트랜잭션)
2F. 결제 취소 (보상 트랜잭션)
1F. 주문 취소 (보상 트랜잭션)
보상 트랜잭션 (Compensating Transaction)
실패 시 이미 완료된 단계를 되돌리는 역방향 작업. ACID 롤백이 아닌 새로운 트랜잭션으로 취소 처리.
장단점
| 항목 | Choreography | Orchestration |
|---|
| 결합도 | 낮음 | 오케스트레이터 의존 |
| 복잡도 | 흐름 파악 어려움 | 중앙 집중, 명확 |
| 디버깅 | 어려움 | 용이 |
관련 개념
- •마이크로서비스 — SAGA가 필요한 환경
- •분산 트랜잭션 — SAGA로 해결하는 문제
- •이벤트 드리븐 — Choreography SAGA의 기반
- •메시지 큐 — SAGA 이벤트 전달 수단