사가 패턴은 분산 트랜잭션 문제를 해결하기 위한 설계 패턴이다.
하나의 트랜잭션으로 묶을 수 없는 여러 서비스의 작업을
여러 개의 로컬 트랜잭션으로 나누고,
중간에 실패하면 보상 트랜잭션(Compensation) 으로 일관성을 맞춘다.
MSA 환경에서는 DB 트랜잭션을 서비스 간에 공유할 수 없음
결제, 주문, 배송처럼 부분 성공이 허용되지 않는 도메인 존재
“모두 성공” 또는 “실패 시 되돌리기”가 필요
오케스트레이션(Orchestration)
코레오그래피(Choreography)
-> 하나의 중앙 서비스(사가 오케스트레이터)가
전체 비즈니스 흐름을 순서대로 제어하는 방식
장점
전체 흐름이 한눈에 보임
디버깅 및 장애 추적이 쉬움
보상 트랜잭션 설계가 명확
결제, 주문 같은 정합성 중요한 도메인에 적합
단점
중앙 오케스트레이터에 책임 집중
서비스 간 결합도 증가
오케스트레이터가 커질 수 있음
-> 중앙 제어자 없이
각 서비스가 이벤트를 발행·구독하며 자율적으로 동작하는 방식
장점
서비스 간 결합도 낮음
확장성 뛰어남
새로운 서비스 추가가 쉬움
단점
전체 흐름 파악이 어려움
디버깅과 장애 추적이 복잡
이벤트 중복, 유실 처리 필요
보상 트랜잭션 설계 난이도 높음
사가 패턴은 분산 환경에서 트랜잭션 일관성을 유지하기 위한 패턴
오케스트레이션은 중앙 제어 방식, 코레오그래피는 이벤트 자율 방식