Saga의 핵심
하나의 글로벌 트랜잭션 대신 작은 로컬 커밋을 이어 붙이고, 실패하면 보상으로 되돌립니다.

Saga는 모든 서비스를 한 번에 묶어 잠그지 않습니다. 각 서비스가 자기 데이터만 먼저 확정하고, 중간 실패가 생기면 이미 바뀐 상태를 역순으로 정리해 최종 일관성을 회복합니다.

공통 전제: 두 경로 모두 같은 규칙에서 시작
트랜잭션 각 서비스는 자기 DB에서만 로컬 커밋을 수행합니다.
실패 처리 어느 단계에서든 실패하면 이미 반영된 상태만 보상 트랜잭션으로 되돌립니다.
운영 의미 글로벌 락 대신 최종 일관성을 선택해 서비스 간 결합을 낮춥니다.

정상 진행

앞으로 커밋

각 단계가 성공하면 다음 서비스로 넘기며, 이전 단계는 그대로 확정된 상태로 남습니다.

1
주문 서비스: 주문 생성 주문 상태를 저장하고 로컬 트랜잭션 커밋
2
결제 서비스: 결제 승인 결제 내역을 확정하고 다음 단계로 이벤트 전달
3
재고 서비스: 재고 차감 재고 반영 후 커밋, 이후 배송 처리 가능
4
배송 서비스: 배송 접수 모든 로컬 변경이 이어져 주문이 완료 상태에 도달

중간 실패

역순 보상

실패 이전 단계는 이미 커밋됐기 때문에, 남은 서비스가 아니라 이전 상태를 되돌리는 작업이 필요합니다.

1
주문 생성 → 결제 승인 → 재고 차감 여기까지는 각 서비스에서 이미 로컬 커밋이 끝난 상태
배송 접수 실패 글로벌 롤백은 불가능하므로, 이미 확정된 상태를 보상 단계로 정리해야 합니다.
보상 순서: 최근 변경부터 역순 처리
재고 복구 결제 취소 주문 취소
읽는 포인트: Saga는 "모두 함께 성공"을 보장하는 방식이 아니라, 각 서비스가 자기 상태를 먼저 저장하고 실패 시 보상 흐름으로 전체 상태를 맞추는 분산 일관성 전략입니다.