I. 개요
마이크로서비스 아키텍처에서 여러 서비스에 걸친 분산 트랜잭션을 어떻게 조율할 것인가는 핵심 설계 과제이다. ACID가 보장되지 않는 분산 환경에서 Eventually Consistent 방식의 Saga 패턴이 주로 사용되며, 이 Saga를 구현하는 방식으로 오케스트레이션(Orchestration)과 코레오그래피(Choreography) 두 가지 접근이 존재한다.
II. 오케스트레이션 vs 코레오그래피 비교
| 구분 | 오케스트레이션 | 코레오그래피 |
|---|---|---|
| 제어 방식 | 중앙 조정자(Orchestrator)가 각 서비스에 명령 전달 | 각 서비스가 이벤트를 구독·발행하며 자율 반응 |
| 결합도 | 오케스트레이터에 종속 (중앙 집중적) | 느슨한 결합 (이벤트 브로커 경유) |
| 가시성 | 전체 흐름 파악 용이 | 전체 흐름 추적 어려움 (분산 추적 필요) |
| 단일 장애점 | 오케스트레이터 장애 시 전체 영향 | 브로커 이중화로 단일 장애점 감소 |
| 구현 도구 | Apache Airflow, Temporal, AWS Step Functions | Kafka, RabbitMQ, AWS EventBridge |
III. Saga 패턴과의 연계
Saga 패턴은 분산 트랜잭션을 로컬 트랜잭션 시퀀스로 분해하고, 실패 시 보상 트랜잭션(Compensating Transaction)으로 롤백을 구현한다. 오케스트레이션 Saga는 조정자가 보상 트랜잭션을 직접 호출하고, 코레오그래피 Saga는 각 서비스가 실패 이벤트를 발행해 다음 서비스가 보상을 수행한다.
IV. 선택 기준 및 결론
- 오케스트레이션 적합: 복잡한 비즈니스 프로세스, 가시성·감사 로그 요구, 팀 역량이 중앙 집중 관리에 익숙한 경우
- 코레오그래피 적합: 서비스 간 느슨한 결합이 최우선, 이벤트 중심 아키텍처, 서비스 수가 많고 독립 확장이 중요한 경우
핵심 키워드: Orchestration, Choreography, Saga Pattern, Compensating Transaction, Event-Driven Architecture, Eventual Consistency, Distributed Transaction
오케스트레이션과 코레오그래피를 고르는 기준
마이크로서비스에서 여러 서비스가 협력하는 업무 흐름을 조율하는 방식은 두 가지입니다. 오케스트레이션은 중앙 조정자가 순서를 지시하고, 코레오그래피는 각 서비스가 이벤트를 발행·구독하며 스스로 반응합니다.
오케스트레이션은 전체 흐름이 한곳에 보여 이해와 디버깅이 쉽지만 조정자가 결합 지점이 됩니다. 코레오그래피는 서비스 간 결합이 느슨하고 확장이 쉽지만 전체 흐름을 파악하기 어렵고 순환 의존이 숨어들 수 있습니다.
- 사가(Saga) 패턴: 분산 트랜잭션 대신 로컬 트랜잭션과 보상 트랜잭션으로 일관성을 맞추며, 두 방식 모두로 구현할 수 있습니다.
- 오케스트레이션 도구: Temporal, AWS Step Functions, Camunda 등 워크플로 엔진.
- 코레오그래피 기반: Kafka 같은 메시지 브로커와 이벤트 스키마 관리.
- 선택 기준: 단계가 많고 복잡한 업무 흐름은 오케스트레이션, 단순하고 독립적인 반응은 코레오그래피.
- 혼합: 도메인 내부는 오케스트레이션, 도메인 사이는 이벤트로 연결하는 구성이 흔합니다.
정리 포인트
두 방식을 중앙 제어 대 분산 반응으로 비교하고 사가 패턴과 선택 기준으로 마무리하세요.
두 방식을 중앙 제어 대 분산 반응으로 비교하고 사가 패턴과 선택 기준으로 마무리하세요.
※ 이 글은 학습·참고용 정리입니다. 제품 사양과 표준 개정 사항은 공식 문서에서 최신 내용을 확인하세요.