← 질문 목록
#2깊이 0

분산 트랜잭션에서 Saga 패턴이 필요한 이유는?

아키텍처 · 분산시스템심화트랜잭션

서비스마다 DB가 분리되면 하나의 트랜잭션으로 묶을 수 없기 때문이다. 롤백을 DB에 맡길 수 없으니 애플리케이션이 직접 되돌려야 한다. Saga는 긴 트랜잭션을 로컬 트랜잭션의 연쇄로 바꾸고, 뒤가 실패하면 앞을 되돌린다.

  1. 1. 주문에서 결제로: 주문 생성하고 커밋. 여기서 이미 확정이다
  2. 2. 결제에서 배송으로: 결제 성공하고 커밋
  3. 3. 배송에서 결제로: 배송 생성 실패
  4. 4. 결제에서 주문으로: 결제 취소. 앞 단계를 되돌리는 보상이다

각 단계는 자기 DB에서 즉시 커밋한다. 잠금을 들고 기다리지 않으니 가용성이 높다.

2PC는 같은 문제를 조정자로 푼다. 모든 참여자가 커밋 준비를 마칠 때까지 자원을 잠그므로 가용성이 떨어진다. 조정자가 죽으면 참여자가 잠긴 채로 남는 위험도 있다.

주의

대가는 격리성 포기다. 중간 상태가 외부에 보인다. 결제는 됐는데 배송 생성이 실패한 순간이 잠깐 존재한다.

그래서 보상은 반드시 성공해야 하고 그 자체로 멱등해야 한다. 실무에서 갈리는 지점은 오케스트레이션이냐 코레오그래피냐다. 중앙 조정자를 둘지 이벤트로 흘릴지는 단계 수와 디버깅 난이도로 판단한다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

분산 트랜잭션에서 Saga 패턴이 필요한 이유는?