← 질문 목록
#2깊이 0
분산 트랜잭션에서 Saga 패턴이 필요한 이유는?
서비스마다 DB가 분리되면 하나의 트랜잭션으로 묶을 수 없기 때문이다. 롤백을 DB에 맡길 수 없으니 애플리케이션이 직접 되돌려야 한다. Saga는 긴 트랜잭션을 로컬 트랜잭션의 연쇄로 바꾸고, 뒤가 실패하면 앞을 되돌린다.
- 1. 주문에서 결제로: 주문 생성하고 커밋. 여기서 이미 확정이다
- 2. 결제에서 배송으로: 결제 성공하고 커밋
- 3. 배송에서 결제로: 배송 생성 실패
- 4. 결제에서 주문으로: 결제 취소. 앞 단계를 되돌리는 보상이다
각 단계는 자기 DB에서 즉시 커밋한다. 잠금을 들고 기다리지 않으니 가용성이 높다.
2PC는 같은 문제를 조정자로 푼다. 모든 참여자가 커밋 준비를 마칠 때까지 자원을 잠그므로 가용성이 떨어진다. 조정자가 죽으면 참여자가 잠긴 채로 남는 위험도 있다.
주의
대가는 격리성 포기다. 중간 상태가 외부에 보인다. 결제는 됐는데 배송 생성이 실패한 순간이 잠깐 존재한다.
그래서 보상은 반드시 성공해야 하고 그 자체로 멱등해야 한다. 실무에서 갈리는 지점은 오케스트레이션이냐 코레오그래피냐다. 중앙 조정자를 둘지 이벤트로 흘릴지는 단계 수와 디버깅 난이도로 판단한다.
추천 꼬리질문
관련 질문
- 메시지 큐를 두면 무엇을 얻고 무엇을 잃는가?아키텍처 · 분산시스템Saga 패턴은 주로 메시지 큐를 이용한 비동기 이벤트 기반으로 구현되어 서비스 간의 느슨한 결합과 신뢰성 있는 상태 전이를 관리한다.
- 재시도가 있는 시스템에서 멱등성이 필요한 이유는?아키텍처 · 분산시스템Saga 패턴은 분산 트랜잭션의 원자성을 보장하기 위해 보상 트랜잭션을 사용하며, 이 과정에서 재시도 시 중복 처리를 막기 위한 멱등성이 필수적이다.
- 트랜잭션 격리 수준을 결정하는 기준은 무엇인가?데이터베이스단일 DB 트랜잭션 격리 수준을 넘어 분산 환경에서의 트랜잭션 일관성 유지 방법을 다룹니다.
- DB 락은 분산 환경에서 무엇이 한계인가?데이터베이스분산 환경에서 단일 DB 수준 보장(락·트랜잭션)이 깨진다는 같은 밑바탕을 다룬다
- 분산 시스템에서 CAP 중 무엇을 포기하게 되는가?아키텍처 · 분산시스템Saga 패턴은 강한 일관성 대신 결과적 일관성을 선택하여 CAP 이론의 가용성과 분할 내성을 우선시하는 전략이다.