Saga
▶아키텍처 다이어그램
점선 애니메이션은 데이터 또는 요청의 흐름 방향을 나타냅니다
여러 서비스가 각자 데이터를 소유하면 한 번의 요청이 여러 저장소를 건드리게 됩니다. 그런데 전역 락과 전역 트랜잭션으로 이를 한꺼번에 묶으려 하면 분산 시스템 특성과 잘 맞지 않습니다. 그렇다고 중간 실패를 무시하면 상태가 어긋납니다. Saga는 '한 번에 모두 잠그기' 대신 '각 단계를 순서대로 실행하고 실패하면 되돌리기'로 이 문제를 다룹니다.
마이크로서비스와 서비스별 데이터 ownership이 확산되면서, 과거처럼 단일 데이터베이스 트랜잭션으로 모든 상태를 묶기 어려워졌습니다. 동시에 비즈니스는 여전히 '전체 주문은 결국 맞아야 한다'는 기대를 버릴 수 없었습니다. 이 압력 속에서 로컬 트랜잭션과 보상 작업을 조합하는 Saga가 현실적인 분산 일관성 패턴으로 자리 잡았습니다.
흐름은 주문 생성, 재고 예약, 결제 승인처럼 여러 로컬 트랜잭션 단계로 이뤄지고, 각 단계가 성공하면 다음 단계로 진행합니다. 중간에 실패하면 이미 끝난 앞 단계에 대응하는 보상 작업을 실행해 전체 상태를 정리합니다. 핵심은 원자성을 한 번에 보장하는 것이 아니라, 실패를 포함한 전체 흐름을 명시적으로 설계하는 데 있습니다.
Saga와 Circuit Breaker는 둘 다 분산 실패와 관련 있지만 초점이 다릅니다. Saga는 여러 단계로 이어진 비즈니스 흐름에서 상태를 어떻게 정리할지 다루고, Circuit Breaker는 실패하는 원격 호출이 전체 시스템을 끌어내리지 않게 차단합니다. 즉 Saga는 흐름 정합성, Circuit Breaker는 호출 보호에 더 가깝습니다.
주문 처리, 예약, 정산처럼 여러 서비스가 순서대로 참여하고 중간 실패 시 앞 단계를 되돌려야 하는 흐름에서 Saga는 특히 중요합니다. 이때 각 단계의 성공 조건과 보상 기준을 애매하게 두면 운영이 금방 어려워집니다. 따라서 단순 코드 흐름이 아니라, 상태 전이와 실패 경로를 함께 설계하는 시각이 필요합니다.
더 읽어보기
현재 페이지의 개념 설명을 본 뒤 배경 설명과 참고 문서를 이어서 볼 수 있습니다.