분산 트랜잭션의 핵심 전략
마이크로서비스 아키텍처(MSA)를 적용하면 서비스마다 별도의 DB를 가지게 됩니다.
그때 가장 큰 문제가 바로 트랜잭션(데이터 일관성)이에요.
기존 모놀리식처럼 하나의 DB에서 “BEGIN → COMMIT”으로 끝낼 수가 없죠.
MSA에서는 아래와 같은 문제가 생깁니다.
- 주문 서비스에서 주문 데이터 저장
- 결제 서비스에서 결제 승인
- 재고 서비스에서 재고 감소
이 3개가 한 번에 성공해야 하는데
중간에 하나라도 실패하면 어떻게 해야 할까?
이걸 해결하는 대표적 패턴이 바로 SAGA 패턴입니다.
🧩 SAGA 패턴이란?
여러 개의 로컬 트랜잭션을 순차적으로 실행하고,
중간에 실패 시 이전 단계들을 보상(Compensation) 트랜잭션으로 되돌리는 패턴.
한 줄로 표현하면:
“분산 환경에서 2PC(2-Phase Commit)를 대체하는 실용적인 대안.”
즉, 분산 트랜잭션을 “되돌림(보상)” 방식으로 처리하는 구조예요.
⚙ SAGA의 두 가지 구현 방식
1) 코레오그래피(Choreography)
“이벤트 기반, 서비스들이 자율적으로 협업하는 방식”
각 서비스가 이벤트를 발행하고,
다른 서비스가 그 이벤트를 구독해서 자기 일을 진행함.
흐름 예시
OrderService → "주문 생성됨" 이벤트 발행
↓
PaymentService → "결제 성공" 이벤트 발행
↓
InventoryService → "재고 차감 완료" 이벤트 발행
장점
- 서비스 간 결합도가 낮음
- 구현이 단순함
- 이벤트 기반으로 확장성이 좋음
단점
- 전체 트랜잭션 흐름을 파악하기 어려움
- 복잡한 비즈니스에서는 이벤트 폭발(Event Storming) 가능
2) 오케스트레이션(Orchestration)
“중앙에서 SAGA Coordinator가 흐름을 지휘하는 방식”
하나의 중앙 서비스(Coordinator)가
각 서비스를 순차적으로 호출하고 성공/실패를 관리함.
흐름 예시
[Saga Coordinator]
→ OrderService 호출
→ PaymentService 호출
→ InventoryService 호출
장점
- 흐름을 한 곳에서 관리하므로 가시성이 좋음
- 복잡한 프로세스에 유리함
단점
- Coordinator 중심 구조가 부담될 수 있음
- 중앙 집중형 구조 → Coordinator 의존성 증가
🔙 SAGA의 핵심: 보상 트랜잭션(Compensation)
MSA에서는 “롤백”이 아니라 보상 작업을 수행합니다.
예시로 보면 더 쉽죠.
💳 주문 시스템 예시
1) 정상 흐름
- 주문 생성
- 결제 승인
- 재고 차감
- 주문 확인 완료
2) 중간 단계에서 실패가 발생하면?
예를 들어 재고 감소에서 실패했다면:
- 재고 차감 실패 → 결제 취소 → 주문 취소
이렇게 역순으로 보상 트랜잭션을 실행합니다.
근데 여기서 중요한 건:
보상 트랜잭션은 “정확한 반대 작업”이 아니라
비즈니스적으로 인정할 수 있는 상쇄 작업입니다.
🧪 SAGA 작동 예시 (텍스트 시나리오)
[Start]
OrderService: 주문 생성 성공
PaymentService: 결제 승인 성공
InventoryService: 재고 부족 → 실패 발생
→ Compensation 시작
PaymentService: 결제 취소
OrderService: 주문 취소
[End: 전체 실패 처리]
이렇게 해서 일관성을 맞추는 것이 SAGA의 핵심이에요.
🧠 SAGA를 사용할 때의 주의사항
1) 보상 트랜잭션이 반드시 존재해야 한다
“되돌릴 수 없는 작업”이 있으면 SAGA 적용이 어려움
예: 물리적 배송 출발, 외부 시스템 irreversible 처리 등
2) eventually consistent(최종적 일관성)를 이해해야 함
MSA에서는 즉시 일관성이 아니라
시간차를 두고 데이터가 맞춰지는 모델이에요.
3) 이벤트 중복 처리 대비 필요
네트워크 특성상 같은 이벤트가 여러 번 발생할 수 있음 → idempotency 필요
4) 장애 상황에 강한 구조 필요
이벤트 소실, 중복, 지연에 대한 전략이 필요합니다.
💡 SAGA가 필요한 상황
✔ 마이크로서비스로 분리됐고, 여러 서비스가 하나의 비즈니스 트랜잭션을 구성할 때
✔ 결제·주문·재고처럼 강한 일관성이 필요한 비즈니스
✔ 외부 API 호출이 끼어 있는 트랜잭션
✔ 동기식 2PC가 불가능하거나 성능 문제가 있을 때
특히 전자상거래, 금융, 물류에서 거의 필수입니다.
📌 SAGA 패턴과 MSA 아키텍처 연결하면?
MSA를 도입했다고 끝나는 게 아니라,
서비스 간 데이터 일관성 전략이 반드시 필요해요.
SAGA는 그중에서도 가장 널리 쓰이고 실용적인 해법입니다.
- Orchestration ↔ BPM(업무 프로세스)
- Choreography ↔ Event Driven Architecture
- 보상 트랜잭션 ↔ 기업 운영 규칙
이렇게 비즈니스 흐름까지 연결해서 설계하면
정말 안정적인 분산 트랜잭션 구조가 만들어집니다.
✨ 마무리
SAGA 패턴은 분산 시스템에서 발생하는 “트랜잭션 일관성 문제”를
현실적으로 해결하기 위한 강력한 방법입니다.
“롤백이 아니라 보상으로 해결한다.”
이 한 문장이 SAGA 패턴의 모든 핵심을 담고 있어요.
MSA를 도입한다면 반드시 SAGA를 이해하고 있어야 하고,
SAGA 없이는 분산 환경에서 안정적인 트랜잭션을 보장하기 어렵습니다.
'IT > 아키텍처' 카테고리의 다른 글
| BFF(Backend For Frontend) (0) | 2025.11.24 |
|---|---|
| 모놀리스부터 마이크로서비스, 그리고 SAGA까지– 실무 감각으로 정리하는 서비스 아키텍처 가이드 (0) | 2025.11.24 |
| 모듈형 모놀리스(Modular Monolith) (0) | 2025.11.24 |
| 마이크로서비스 아키텍처 (1) | 2025.11.24 |
| 서비스 기반 아키텍처(SBA) (0) | 2025.11.24 |