SAGA는 "Saga" (서사, 대서사시)라는 일반 명사에서 유래된 용어입니다.
컴퓨터 과학에서 처음 등장한 것은 1987년, Hector Garcia-Molina와 Kenneth Salem이 발표한 논문 "Sagas"에서입니다.
논문에서 SAGA는 긴 트랜잭션을 여러 개의 작은 독립적인 트랜잭션(Local Transactions)으로 나누고, 각 트랜잭션 실패 시에는 보상(Compensation) 트랜잭션을 수행하는 방식으로 제안되었습니다.
SAGA 패턴은 분산 시스템에서 원자성을 보장하기 위한 트랜잭션 관리 방식입니다. 전통적인 2PC(투 페이즈 커밋)은 동기적이며 중앙 집중적인 방식인데 반해, SAGA는 트랜잭션을 작은 여러 개의 로컬 트랜잭션(local transaction)으로 분할하고, 실패 시 보상 트랜잭션(compensating transaction)을 통해 시스템 정합성을 유지합니다.
SAGA는 여러 서비스 간의 트랜잭션을 순차적으로 실행합니다.
트랜잭션 중 하나라도 실패하면, 이전 단계까지 완료된 트랜잭션을 보상 작업으로 취소합니다.
T1 → T2 → T3
모든 단계 성공 → 최종 커밋
T1 (성공)
T2 (실패)
→ C1 실행 (T1 취소)
구성 요소 | 설명 |
---|---|
로컬 트랜잭션 | 각 서비스의 독립 트랜잭션 |
보상 트랜잭션 | 이전 로컬 트랜잭션을 취소하는 역방향 동작 |
Orchestrator (선택) | 흐름 제어자 (Orchestration 방식에서 등장) |
Event Bus | 이벤트 기반 처리 시 사용 |
장점: 구조 단순, 서비스 간 결합 낮음
단점: 흐름 추적이 어려움, 복잡한 시나리오 비효율
장점: 전체 트랜잭션 흐름을 명확히 관리 가능
단점: Orchestrator에 로직 집중 → 단일 장애점 가능
항목 | 설명 |
---|---|
비동기 트랜잭션 | 서비스 간 트랜잭션이 병렬 또는 순차적 비동기로 동작 |
최종 정합성(Eventual Consistency) | 즉시 일관성 대신, 시간이 지난 후 일관성 확보 |
보상 기반 설계 | undo가 아닌 compensating action 사용 |
서비스 독립성 보장 | 각 서비스는 독립적으로 실패하거나 복구 가능 |
시스템 | 설명 |
---|---|
쇼핑몰 | 주문 생성 → 결제 → 재고 차감 → 배송 예약. 결제 실패 시: 주문 취소 + 재고 복원 |
여행 예약 | 항공 예약 → 호텔 예약 → 렌터카 예약. 호텔 예약 실패 시: 항공 예약 취소 |
핀테크 결제 | 포인트 차감 → 제휴사 결제 → 리워드 적립. 실패 시 포인트 환급 |
SAGA 패턴은 동기적 트랜잭션 관리가 어려운 분산 환경(MSA, 클라우드)에서 최종 일관성을 확보하기 위한 실용적인 대안입니다. 비즈니스 로직 중심의 보상 트랜잭션 설계 역량과 비동기 메시징 처리 능력이 핵심이며, 특히 확장성과 독립성을 중시하는 현대 서비스 아키텍처에 적합합니다.