Saga 공통 전제
각 서비스는 자기 DB에 로컬 트랜잭션을 먼저 반영합니다.
전체를 한 번에 커밋하지 못하므로, 중간 실패가 나면 보상 트랜잭션으로 이미 바뀐 상태를 되돌립니다.
Choreography
이벤트가 다음 단계를 스스로 깨웁니다
중앙 조정자는 없고, 각 서비스가 이전 이벤트를 구독한 뒤 자기 작업을 저장하고 다음 이벤트를 발행합니다.
주문 저장
이벤트
결제 승인
이벤트
재고 차감
실패 시에도 이벤트 연쇄로 보상
예: 재고 차감 실패가 나면 결제 취소 이벤트가 뒤따르며 이미 저장된 상태를 되감습니다.
운영 의미
서비스 결합은 낮지만, 전체 진행 상황과 실패 원인을 한눈에 추적하기는 더 어렵습니다.
Orchestration
중앙 오케스트레이터가 순서와 보상을 지휘합니다
개별 서비스는 명령을 수행하는 역할에 집중하고, 다음 단계 선택과 실패 복구 순서는 한곳에서 결정됩니다.
오케스트레이터가 현재 상태를 보고 다음 서비스에 명령
실패 시 보상 순서도 중앙에서 결정
예: 재고 차감 실패를 감지하면 오케스트레이터가 결제 취소, 주문 취소를 차례대로 지시합니다.
운영 의미
흐름 가시성과 제어는 좋아지지만, 오케스트레이터가 병목이자 장애 지점이 될 수 있습니다.
Choreography
Orchestration
흐름 제어
이전 이벤트를 본 서비스가 다음 상태 변경을 이어 갑니다.
중앙 조정자가 다음 단계와 재시도 순서를 정합니다.
실패 처리
보상도 이벤트로 퍼지므로, 어떤 상태가 되돌아가는지 추적이 더 분산됩니다.
보상 명령이 한곳에서 내려가므로, 되돌림 순서를 통제하기 쉽습니다.
언제 유리한가
서비스 자율성과 낮은 결합이 더 중요할 때 적합합니다.
업무 흐름 가시성과 운영 통제가 더 중요할 때 적합합니다.
핵심: 둘 다 로컬 트랜잭션 + 보상이라는 Saga 원칙은 같고,
차이는 누가 전체 상태 변화를 이어 붙이느냐에 있습니다.