1. Saga 패턴이란?
: Saga 패턴은 분산 트랜잭션을 여러 개의 로컬 트랜잭션(Local Transaction) 시퀀스로 나누어 처리하고,
만약 실패 시 보상(Compensation) 작업을 통해 전체 일관성을 맞추는 패턴.

2. 사용사례
1) 결제 중 쿠폰 사용 시 쿠폰 사용가능여부를 확인해서 사용으로 변경 했으나,
결제 시 잔액부족으로 결제를 할 수 있는 상황이 아니라면?
→ 쿠폰을 다시 사용가능한 형태로 롤백해야 함.
(잔액 부족인 상태에서 시스템에서 재시도 해도 잔액부족은 바뀌지 않기때문)
2) 마찮가지로 주문 결제 시 재고차감에 성공하고 결제 시도 시 잔액부족으로 결제를 할 수 없는 상황이라면?
→ 결제실패 시 차감했던 재고 복구를 하지않을 시 복구되지 않은 재고만큼 판매할 수 없는상황이므로 반드시 재고복구를 해야함
3) 반대로, 결제부터 진행하고 재고차감을 하는 경우라면, 결제는 성공했는데 재고부족으로 상품을 고객에게 판매할 수
없는상황이라면?
→ 결제 취소를 위한 process 필요!
3. 구현 방식
1) Choreography (코레오그래피)
- 이벤트 기반
- 각 서비스가 이벤트를 발행하고, 다른 서비스가 그 이벤트를 구독하여 다음 트랜잭션 실행
- 장점: 단순, 중앙 오케스트레이터 불필요
- 단점: 서비스 수 많아지면 이벤트 플로우 복잡 → 관리 어려움

2) Orchestration (오케스트레이션)
- 중앙 Saga Orchestrator 가 전체 흐름 제어
- 각 서비스에 명령(Command) 요청, 성공/실패 이벤트를 수신하며 Saga 진행
- 장점: 흐름 명확, 관리 용이
- 단점: 오케스트레이터가 단일 장애 지점(SPOF)이 될 수 있음

'Kotlin Spring > Kotlin Spring 강의 내용' 카테고리의 다른 글
| [부록] Docker for Mysql, Redis, Kafka (0) | 2026.01.26 |
|---|---|
| [부록] REST 기반 마이크로 서비스 간 통신 - OpenFeign (0) | 2026.01.20 |
| 10) Kafka 기반 도메인 분리 (4) Transactional Outbox 패턴이란? (0) | 2026.01.13 |
| 10) Kafka 기반 도메인 분리 (2) 결제 시 쿠폰도메인을 완전하게 분리하기 (0) | 2026.01.13 |
| 10) Kafka 기반 도메인 분리 (1) Kafka 란? (0) | 2026.01.13 |