학습일지/MSA 분산 트랜잭션

[분산트랜잭션 맛보기] - Saga

Merge Log 2025. 10. 19. 19:34

Saga

  • 분산 시스템에서 데이터 정합성을 보장하기 위해 사용하는 분산 트랜잭션 처리 방식
  • 각 작업을 개별 트랜잭션으로 나누고 실패시에 보상 트랜잭션을 수행하여 정합성을 맞추는 방식
    • 보상 트랜잭션 로직은 멱등해야하며 재시도 가능해야 한다
      • Timeout Error, DB 지연 등의 이유로 동일한 요청이 여러번 처리되어도 예상한 동작을 수행해야 한다
  • TCC 와 달리 Saga 는 리소스 예약 없이 즉시 상태 변경을 수행해야 한다
    • 재고차감 예약이 아닌 즉시 차감
    • 최종적 일관성(Eventual Consistency) 을 보장
      • 재고차감이 성공될 수 있지만 해당 시점에 포인트 차감이 아직 수행 중일 수 있음 → 그러나 시간이 지나면서 정상적으로 데이터가 정상흐름대로 맞춰짐
  • Choreography 방식과 Orchestration 방식이 존재한다
    • Orchestration : 하나의 Coordinator 가 각각의 참여 서비스들을 순차적으로 호출하며 전체 트랜잭션의 흐름을 제어하는 방식


Orchestration 방식

주문 + 결제 요청시 재고 차감, 포인트 차감 처리 / OrderService 가 Coordinator 역할을 수행

  • 장점
    • 구현 난이도와 유지보수 난이도가 비교적 낮음 → 전체적인 흐름 파악이 쉬움
  • 단점
    • 시간이 지날수록 Coordinator 가 복잡해질 수 있다
    • 서비스 간 결합도가 증가한다

현재 구조의 문제점

  • 롤백 도중에 에러가 발생한 경우 → 명확한 디버깅이 어려움
    • 롤백 도중에 발생하는 에러의 경우 데이터를 기록


Choreography

  • Coordinator 없이 각 서비스가 이벤트를 발행, 구독하며 이를 통해 전체 트랜잭션의 흐름을 제어하는 방식

장점

  • Event 기반 동작이므로 서비스 간 결합도가 낮다

단점

  • 구현 난이도 상승
  • 흐름 파악이 어려움 → 한눈에 흐름을 파악하기 어렵다

테스트 코드

'학습일지 > MSA 분산 트랜잭션' 카테고리의 다른 글

[분산트랜잭션 맛보기] - TCC  (0) 2025.10.18
[분산트랜잭션 맛보기] - 2PC  (0) 2025.10.18