Saga 오케스트레이션 vs 코레오그래피
Saga 오케스트레이션과 코레오그래피는 취향 차이처럼 보이기 쉽지만, 실제 운영에서는 서비스 자율성과 전체 흐름 가시성 사이의 선택에 가깝습니다.
코레오그래피는 초반에 단순해 보인다
각 서비스가 도메인 이벤트를 구독하고 다음 이벤트를 발행하는 구조는 처음에는 우아해 보입니다. 중앙 조정자가 없기 때문입니다.
특히 다음과 같을 때 잘 맞습니다.
- 워크플로가 짧을 때
- 서비스 경계가 이미 뚜렷할 때
- 실패 경로가 단순하고 재처리가 쉬울 때
코레오그래피의 숨은 비용
흐름이 길어질수록 로직은 점점 보이지 않게 됩니다. 그 순간부터 다음 질문이 비싸집니다.
- 현재 어느 단계가 전체 상태를 쥐고 있는가
- 프로세스가 어디에서 얼마나 오래 멈췄는가
- 다음 보상 작업은 무엇이어야 하는가
- 고객지원이나 운영팀이 한 거래를 끝까지 어떻게 추적할 것인가
코드상으로는 분산돼 있어도 운영에서는 더 헷갈릴 수 있습니다.
오케스트레이션은 의도적으로 제어를 추가한다
오케스트레이터는 워크플로 상태를 명시적으로 가지고 다음 명령을 결정합니다. 그래서 다음이 좋아집니다.
- 추적성
- 타임아웃 처리
- 재시도 정책 일관성
- 장기 실행 플로우에 대한 운영 도구화
대신 워크플로 정의와 중앙 제어에 대한 결합은 높아집니다.
실전 선택 기준
전체 워크플로가 없어도 도메인 이벤트 자체가 의미 있다면 코레오그래피가 좋습니다. 반대로 비즈니스 프로세스 자체가 제품 핵심 단위이고, 그것이 보여야 하고 복구 가능해야 하며 감사 가능해야 한다면 오케스트레이션이 더 낫습니다.
패턴 이름보다 더 중요한 것
어떤 Saga 패턴도 약한 계약을 구해주지는 못합니다. 결국 필요한 것은 같습니다.
- idempotent 핸들러
- 명시적 재시도 경계
- 안정적인 이벤트 스키마
- 비즈니스 트랜잭션 id 기준의 관측성
정답은 멋진 패턴 이름이 아니라, 새벽 장애 때 팀이 흐름이 어디서 사라졌는지 추측하지 않고 찾을 수 있는 구조입니다.
Continue Reading
다음으로 읽기 좋은 글
백엔드 학습 경로: 입문부터 고급까지
API 기초, 안정성 패턴, 분산 아키텍처까지 백엔드 지식을 체계적으로 쌓을 수 있는 실전 로드맵입니다.
⚙️ Backend백엔드 멱등성과 재시도 설계 원칙
중복 요청, 네트워크 재시도, 비동기 처리 환경에서 멱등성을 어떻게 설계해야 안전한 백엔드 동작을 보장할 수 있는지 정리합니다.
💬 LanguagePython Service Layer 패턴 실전 적용
Python 애플리케이션에서 transport, 비즈니스 규칙, persistence 책임을 분리하는 실전 구조를 정리합니다.
🖥️ Frontend마이크로 프론트엔드 — Module Federation 실전 적용
마이크로 프론트엔드를 기술 데모가 아니라 팀 경계와 배포 독립성의 관점에서 정리합니다. Module Federation 구조, shared 의존성, 런타임 로딩, 상태 공유, 운영 함정과 적용 기준까지 실무적으로 설명합니다.
다음 탐색