SAGA 패턴

agnusdei·2025년 4월 29일
0

Database

목록 보기
8/30

SAGA의 의미 및 어원

  • SAGA"Saga" (서사, 대서사시)라는 일반 명사에서 유래된 용어입니다.

  • 컴퓨터 과학에서 처음 등장한 것은 1987년, Hector Garcia-Molina와 Kenneth Salem이 발표한 논문 "Sagas"에서입니다.

  • 논문에서 SAGA는 긴 트랜잭션을 여러 개의 작은 독립적인 트랜잭션(Local Transactions)으로 나누고, 각 트랜잭션 실패 시에는 보상(Compensation) 트랜잭션을 수행하는 방식으로 제안되었습니다.

  • 1. 개요

SAGA 패턴분산 시스템에서 원자성을 보장하기 위한 트랜잭션 관리 방식입니다. 전통적인 2PC(투 페이즈 커밋)은 동기적이며 중앙 집중적인 방식인데 반해, SAGA는 트랜잭션을 작은 여러 개의 로컬 트랜잭션(local transaction)으로 분할하고, 실패 시 보상 트랜잭션(compensating transaction)을 통해 시스템 정합성을 유지합니다.


2. 동작 원리

SAGA는 여러 서비스 간의 트랜잭션을 순차적으로 실행합니다.
트랜잭션 중 하나라도 실패하면, 이전 단계까지 완료된 트랜잭션을 보상 작업으로 취소합니다.

예시

  • T1: 항공권 예약
  • T2: 호텔 예약
  • T3: 렌터카 예약

정상 흐름

T1 → T2 → T3
모든 단계 성공 → 최종 커밋

실패 흐름 (T2 실패 시)

T1 (성공)
T2 (실패)C1 실행 (T1 취소)


3. 구성 요소

구성 요소설명
로컬 트랜잭션각 서비스의 독립 트랜잭션
보상 트랜잭션이전 로컬 트랜잭션을 취소하는 역방향 동작
Orchestrator (선택)흐름 제어자 (Orchestration 방식에서 등장)
Event Bus이벤트 기반 처리 시 사용

4. 유형

1) Choreography 기반 SAGA

  • 각 서비스가 다음 서비스를 호출하거나 이벤트를 발생시켜 흐름을 이어감
  • 서비스 간 직접 통신 (분산된 제어)

장점: 구조 단순, 서비스 간 결합 낮음
단점: 흐름 추적이 어려움, 복잡한 시나리오 비효율

2) Orchestration 기반 SAGA

  • 중앙 Orchestrator가 각 트랜잭션을 순차적으로 호출하고 실패 시 보상 트랜잭션 호출

장점: 전체 트랜잭션 흐름을 명확히 관리 가능
단점: Orchestrator에 로직 집중 → 단일 장애점 가능


5. 특징

항목설명
비동기 트랜잭션서비스 간 트랜잭션이 병렬 또는 순차적 비동기로 동작
최종 정합성(Eventual Consistency)즉시 일관성 대신, 시간이 지난 후 일관성 확보
보상 기반 설계undo가 아닌 compensating action 사용
서비스 독립성 보장각 서비스는 독립적으로 실패하거나 복구 가능

6. 장점과 단점

장점

  • 분산 환경(MSA, 클라우드 등)에서 확장성과 유연성 확보
  • 락 없이 트랜잭션 처리 가능 → 성능 우수
  • 장애 복구 용이 (보상 기반)

단점

  • 보상 트랜잭션을 직접 설계해야 함 (업무적 Undo 불가능한 경우 있음)
  • 오류 처리 및 롤백 로직 복잡
  • 실시간 정합성이 필요한 시스템에는 부적합

7. 적용 사례

시스템설명
쇼핑몰주문 생성 → 결제 → 재고 차감 → 배송 예약. 결제 실패 시: 주문 취소 + 재고 복원
여행 예약항공 예약 → 호텔 예약 → 렌터카 예약. 호텔 예약 실패 시: 항공 예약 취소
핀테크 결제포인트 차감 → 제휴사 결제 → 리워드 적립. 실패 시 포인트 환급

8. 결론

SAGA 패턴은 동기적 트랜잭션 관리가 어려운 분산 환경(MSA, 클라우드)에서 최종 일관성을 확보하기 위한 실용적인 대안입니다. 비즈니스 로직 중심의 보상 트랜잭션 설계 역량비동기 메시징 처리 능력이 핵심이며, 특히 확장성과 독립성을 중시하는 현대 서비스 아키텍처에 적합합니다.


0개의 댓글