Cloud Visualizer
← 전체 목록
🔄

Saga

데이터 흐름여러 로컬 트랜잭션을 순서와 보상으로 이어 붙이는 분산 흐름 패턴

아키텍처 다이어그램

점선 애니메이션은 데이터 또는 요청의 흐름 방향을 나타냅니다

왜 필요한가요?

여러 서비스가 각자 데이터를 소유하면 한 번의 요청이 여러 저장소를 건드리게 됩니다. 그런데 전역 락과 전역 트랜잭션으로 이를 한꺼번에 묶으려 하면 분산 시스템 특성과 잘 맞지 않습니다. 그렇다고 중간 실패를 무시하면 상태가 어긋납니다. Saga는 '한 번에 모두 잠그기' 대신 '각 단계를 순서대로 실행하고 실패하면 되돌리기'로 이 문제를 다룹니다.

왜 이런 방식이 등장했나요?

마이크로서비스와 서비스별 데이터 ownership이 확산되면서, 과거처럼 단일 데이터베이스 트랜잭션으로 모든 상태를 묶기 어려워졌습니다. 동시에 비즈니스는 여전히 '전체 주문은 결국 맞아야 한다'는 기대를 버릴 수 없었습니다. 이 압력 속에서 로컬 트랜잭션과 보상 작업을 조합하는 Saga가 현실적인 분산 일관성 패턴으로 자리 잡았습니다.

안에서 어떻게 동작하나요?

흐름은 주문 생성, 재고 예약, 결제 승인처럼 여러 로컬 트랜잭션 단계로 이뤄지고, 각 단계가 성공하면 다음 단계로 진행합니다. 중간에 실패하면 이미 끝난 앞 단계에 대응하는 보상 작업을 실행해 전체 상태를 정리합니다. 핵심은 원자성을 한 번에 보장하는 것이 아니라, 실패를 포함한 전체 흐름을 명시적으로 설계하는 데 있습니다.

무엇과 헷갈리나요?

Saga와 Circuit Breaker는 둘 다 분산 실패와 관련 있지만 초점이 다릅니다. Saga는 여러 단계로 이어진 비즈니스 흐름에서 상태를 어떻게 정리할지 다루고, Circuit Breaker는 실패하는 원격 호출이 전체 시스템을 끌어내리지 않게 차단합니다. 즉 Saga는 흐름 정합성, Circuit Breaker는 호출 보호에 더 가깝습니다.

언제 쓰나요?

주문 처리, 예약, 정산처럼 여러 서비스가 순서대로 참여하고 중간 실패 시 앞 단계를 되돌려야 하는 흐름에서 Saga는 특히 중요합니다. 이때 각 단계의 성공 조건과 보상 기준을 애매하게 두면 운영이 금방 어려워집니다. 따라서 단순 코드 흐름이 아니라, 상태 전이와 실패 경로를 함께 설계하는 시각이 필요합니다.

주문, 재고, 결제가 여러 서비스에 나뉜 전자상거래 흐름한 단계 실패 시 앞선 단계를 되돌려야 하는 업무 처리분산 환경에서 장시간 흐름을 관리해야 하는 시스템서비스별 로컬 트랜잭션을 유지하면서 전체 결과를 맞춰야 하는 구조
관련 문서

더 읽어보기

현재 페이지의 개념 설명을 본 뒤 배경 설명과 참고 문서를 이어서 볼 수 있습니다.

Software Architecture