핵심 인사이트 (3줄 요약)
- 탈중앙화된 제어: 중앙 오케스트레이터 없이 각 마이크로서비스가 이벤트를 발행하고 구독하며 자율적으로 트랜잭션을 연쇄 진행하는 방식이다.
- 느슨한 결합: 서비스 간 직접적인 호출이 없어 독립성이 매우 높고, 새로운 단계를 추가하기 쉬운 유연한 구조를 가진다.
- 관측성 확보 필수: 전체 비즈니스 흐름을 한눈에 파악하기 어렵기 때문에, 분산 추적(Tracing)과 모니터링 시스템 구축이 반드시 병행되어야 한다.
Ⅰ. 개요 (Context & Background)
사가 패턴의 두 구현 방식 중 하나인 코레오그래피(Choreography)는 말 그대로 각 무용수가 정해진 안무 없이 상대의 움직임을 보고 반응하듯 시스템이 동작한다. 서비스 간의 결합도를 극한으로 낮추고자 하는 클라우드 네이티브 설계에서 가장 선호되는 비동기 트랜잭션 관리 기법이다.
Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)
이 방식은 이벤트 브로커(Kafka, RabbitMQ 등)를 중심으로 메시지 기반 통신을 수행한다.
[ Order Service ] --(OrderCreated)--> [ Message Broker ]
^ |
| v
[ Customer Service ] <--(Success/Fail)------|
| v
+---(CreditReserved)-------------> [ Message Broker ]
|
v
[ Inventory Service ] <---------------------+
<Bilingual ASCII Diagram: Choreography Saga Flow>
- Event Pub/Sub: 서비스 A가 일을 마치고 이벤트를 쏘면, 이를 기다리던 서비스 B가 반응.
- Decentralized: "누가 다음 일을 해야 해"라고 지시하는 사람이 아무도 없음.
- Implicit Flow: 비즈니스 흐름이 명시적인 코드가 아닌 서비스 간의 '이벤트 구독 관계'로 정의됨.
Ⅲ. 융합 비교 및 다각도 분석 (Comparison & Synergy)
| 비교 항목 | 코레오그래피 사가 (Choreography) | 오케스트레이션 사가 (Orchestration) |
|---|---|---|
| 중앙 집중 | 없음 (완전 분산) | 있음 (Saga Orchestrator 존재) |
| 추가/수정 | 새 구독자만 추가하면 됨 (유연) | 중앙 컨트롤러 코드를 수정해야 함 |
| 순환 참조 | 설계 미흡 시 무한 루프 위험 | 중앙에서 제어하므로 루프 방지 용이 |
| 디버깅 | 이벤트를 일일이 따라가야 함 (복잡) | 중앙 로그에서 흐름 확인 가능 (용이) |
Ⅳ. 실무 적용 및 기술사적 판단 (Strategy & Decision)
- 기술사적 판단: 코레오그래피 사가는 서비스가 2~4개 정도로 적고 업무 흐름이 단순할 때 최적이다. 만약 서비스가 수십 개로 늘어나면 흐름이 엉켜 '스파게티 이벤트'가 될 위험이 크다.
- 실무 전략: 분산 추적 도구(Jaeger, Zipkin)와 전사 이벤트 사전(Event Schema Registry)을 도입하여, 보이지 않는 비즈니스 흐름을 가시화(Observability)해야 한다.
Ⅴ. 기대효과 및 결론 (Future & Standard)
코레오그래피 사가는 진정한 의미의 마이크로서비스 독립성을 달성하게 해준다. 이벤트 기반 아키텍처(EDA)와 결합하여 고도의 확장성과 장애 내성을 갖춘 시스템을 구축할 수 있으며, 클라우드 아키텍트라면 복잡도와 유연성 사이의 균형을 맞추기 위해 반드시 숙달해야 할 핵심 기술이다.
📌 관련 개념 맵 (Knowledge Graph)
- 상위 개념: 사가 패턴 (Saga Pattern), 이벤트 주도 아키텍처 (EDA)
- 하위 개념: Pub/Sub, 비동기 메시징, 보상 트랜잭션
- 연관 개념: 오케스트레이션 사가, 마이크로서비스(MSA), 분산 추적(Jaeger)
👶 어린이를 위한 3줄 비유 설명
- 춤추기: 선생님 없이 친구들이 옆 친구의 춤을 보고 다음 춤을 따라 하는 것과 같아요.
- 자율 행동: 앞 친구가 손을 들면 나도 손을 들고, 내가 손을 들면 뒷 친구가 발을 차는 식이에요.
- 결론: 누가 시키지 않아도 친구들이 서로 신호를 주고받으며 멋진 춤을 완성하는 거예요!