Saga
- 분산 시스템에서 데이터 정합성을 보장하기 위해 사용하는 분산 트랜잭션 처리 방식
- 각 작업을 개별 트랜잭션으로 나누고 실패시에 보상 트랜잭션을 수행하여 정합성을 맞추는 방식
- 보상 트랜잭션 로직은 멱등해야하며 재시도 가능해야 한다
- Timeout Error, DB 지연 등의 이유로 동일한 요청이 여러번 처리되어도 예상한 동작을 수행해야 한다
- 보상 트랜잭션 로직은 멱등해야하며 재시도 가능해야 한다
- TCC 와 달리 Saga 는 리소스 예약 없이 즉시 상태 변경을 수행해야 한다
- 재고차감 예약이 아닌 즉시 차감
- 최종적 일관성(Eventual Consistency) 을 보장
- 재고차감이 성공될 수 있지만 해당 시점에 포인트 차감이 아직 수행 중일 수 있음 → 그러나 시간이 지나면서 정상적으로 데이터가 정상흐름대로 맞춰짐
- Choreography 방식과 Orchestration 방식이 존재한다
- Orchestration : 하나의 Coordinator 가 각각의 참여 서비스들을 순차적으로 호출하며 전체 트랜잭션의 흐름을 제어하는 방식
Orchestration 방식
주문 + 결제 요청시 재고 차감, 포인트 차감 처리 / OrderService 가 Coordinator 역할을 수행

- 장점
- 구현 난이도와 유지보수 난이도가 비교적 낮음 → 전체적인 흐름 파악이 쉬움
- 단점
- 시간이 지날수록 Coordinator 가 복잡해질 수 있다
- 서비스 간 결합도가 증가한다
현재 구조의 문제점
- 롤백 도중에 에러가 발생한 경우 → 명확한 디버깅이 어려움
- 롤백 도중에 발생하는 에러의 경우 데이터를 기록
Choreography
- Coordinator 없이 각 서비스가 이벤트를 발행, 구독하며 이를 통해 전체 트랜잭션의 흐름을 제어하는 방식

장점
- Event 기반 동작이므로 서비스 간 결합도가 낮다
단점
- 구현 난이도 상승
- 흐름 파악이 어려움 → 한눈에 흐름을 파악하기 어렵다
테스트 코드
'학습일지 > MSA 분산 트랜잭션' 카테고리의 다른 글
| [분산트랜잭션 맛보기] - TCC (0) | 2025.10.18 |
|---|---|
| [분산트랜잭션 맛보기] - 2PC (0) | 2025.10.18 |