Saga 공통 전제
각 서비스는 자기 DB에 로컬 트랜잭션을 먼저 반영합니다. 전체를 한 번에 커밋하지 못하므로, 중간 실패가 나면 보상 트랜잭션으로 이미 바뀐 상태를 되돌립니다.
Choreography

이벤트가 다음 단계를 스스로 깨웁니다

중앙 조정자는 없고, 각 서비스가 이전 이벤트를 구독한 뒤 자기 작업을 저장하고 다음 이벤트를 발행합니다.

주문 저장
이벤트
결제 승인
이벤트
재고 차감
실패 시에도 이벤트 연쇄로 보상 예: 재고 차감 실패가 나면 결제 취소 이벤트가 뒤따르며 이미 저장된 상태를 되감습니다.
운영 의미 서비스 결합은 낮지만, 전체 진행 상황과 실패 원인을 한눈에 추적하기는 더 어렵습니다.
Orchestration

중앙 오케스트레이터가 순서와 보상을 지휘합니다

개별 서비스는 명령을 수행하는 역할에 집중하고, 다음 단계 선택과 실패 복구 순서는 한곳에서 결정됩니다.

오케스트레이터가 현재 상태를 보고 다음 서비스에 명령
주문 저장
명령
결제 승인
명령
재고 차감
실패 시 보상 순서도 중앙에서 결정 예: 재고 차감 실패를 감지하면 오케스트레이터가 결제 취소, 주문 취소를 차례대로 지시합니다.
운영 의미 흐름 가시성과 제어는 좋아지지만, 오케스트레이터가 병목이자 장애 지점이 될 수 있습니다.
Choreography
Orchestration
흐름 제어
이전 이벤트를 본 서비스가 다음 상태 변경을 이어 갑니다.
중앙 조정자가 다음 단계와 재시도 순서를 정합니다.
실패 처리
보상도 이벤트로 퍼지므로, 어떤 상태가 되돌아가는지 추적이 더 분산됩니다.
보상 명령이 한곳에서 내려가므로, 되돌림 순서를 통제하기 쉽습니다.
언제 유리한가
서비스 자율성과 낮은 결합이 더 중요할 때 적합합니다.
업무 흐름 가시성과 운영 통제가 더 중요할 때 적합합니다.
핵심: 둘 다 로컬 트랜잭션 + 보상이라는 Saga 원칙은 같고, 차이는 누가 전체 상태 변화를 이어 붙이느냐에 있습니다.