본문 바로가기
Kotlin Spring/Kotlin Spring 강의 내용

10) Kafka 기반 도메인 분리(3) - Saga 패턴이란?

by Bill Lab 2026. 1. 14.
728x90

1. Saga 패턴이란?

       : Saga 패턴은 분산 트랜잭션을 여러 개의 로컬 트랜잭션(Local Transaction) 시퀀스로 나누어 처리하고,

        만약 실패 시 보상(Compensation) 작업을 통해 전체 일관성을 맞추는 패턴.

출처: https://microservices.io/patterns/data/saga.html

2. 사용사례

     1) 결제 중 쿠폰 사용 시 쿠폰 사용가능여부를 확인해서 사용으로 변경 했으나,
         결제 시 잔액부족으로 결제를 할 수 있는 상황이 아니라면?

        쿠폰을 다시 사용가능한 형태로 롤백해야 함.

           (잔액 부족인 상태에서 시스템에서 재시도 해도 잔액부족은 바뀌지 않기때문)

   

     2) 마찮가지로 주문 결제 시 재고차감에 성공하고 결제 시도 시 잔액부족으로 결제를 할 수 없는 상황이라면?       

        → 결제실패 시 차감했던 재고 복구를 하지않을 시 복구되지 않은 재고만큼 판매할 수 없는상황이므로 반드시 재고복구를 해야함

   

     3) 반대로, 결제부터 진행하고 재고차감을 하는 경우라면, 결제는 성공했는데 재고부족으로 상품을 고객에게 판매할 수

         없는상황이라면? 

        → 결제 취소를 위한 process 필요!

 

3. 구현 방식

    1) Choreography (코레오그래피)
        - 이벤트 기반

        - 각 서비스가 이벤트를 발행하고, 다른 서비스가 그 이벤트를 구독하여 다음 트랜잭션 실행
        - 장점: 단순, 중앙 오케스트레이터 불필요  
        - 단점: 서비스 수 많아지면 이벤트 플로우 복잡 → 관리 어려움 

출처: https://www.geeksforgeeks.org/system-design/saga-design-pattern/



    2) Orchestration (오케스트레이션)
        - 중앙 Saga Orchestrator 가 전체 흐름 제어
        - 각 서비스에 명령(Command) 요청, 성공/실패 이벤트를 수신하며 Saga 진행
        - 장점: 흐름 명확, 관리 용이
        - 단점: 오케스트레이터가 단일 장애 지점(SPOF)이 될 수 있음

출처: https://www.geeksforgeeks.org/system-design/saga-design-pattern/





728x90