176. 코레오그래피 사가 (Choreography Saga)

핵심 인사이트: 중앙에 지휘관이 없어도, 훈련된 특수부대원들은 무전(메시지 큐) 한마디에 자기 할 일을 딱딱 알아서 해낸다. 코레오그래피 사가는 대장(오케스트레이터) 없이, 마이크로서비스들이 각자 "나 주문 완료했어!" 이벤트를 외치면(Pub) 그걸 듣고 싶은 애들이 알아서 듣고(Sub) 연쇄 반응을 일으키는 탈중앙화 패턴이다.

Ⅰ. 코레오그래피 사가 (Choreography Saga)의 개념

마이크로서비스 아키텍처(MSA)의 분산 트랜잭션 관리 기법(Saga Pattern) 중 하나입니다. '코레오그래피(안무)'라는 이름처럼, 댄서들이 중앙의 지시 없이도 정해진 음악에 맞춰 알아서 춤을 추듯, 중앙 통제 서버 없이 각 마이크로서비스가 비동기 메시지(Event)를 주고받으며 자율적으로 트랜잭션 체인을 구성하고 실패 시 보상 트랜잭션을 실행하는 방식입니다.

Ⅱ. 코레오그래피 사가의 동작 구조 (Pub/Sub 방식)

Apache Kafka나 RabbitMQ 같은 메시지 브로커(Event Bus) 를 중앙에 두고, 서비스들은 서로의 IP나 존재를 전혀 알지 못한 채 오직 이벤트만 발행(Publish)하고 구독(Subscribe)합니다.

[ 주문 ➔ 결제 ➔ 배송 성공 시나리오 ]

1. [주문 서비스] DB에 주문 기록 ──▶ Kafka에 『OrderCreated (주문생성됨)』 이벤트 발행
                                        │
2. [결제 서비스] ◀── Kafka에서 『OrderCreated』 구독(리스닝) ➔ DB에 결제 기록 
                 ──▶ Kafka에 『PaymentBilled (결제완료됨)』 이벤트 발행
                                        │
3. [배송 서비스] ◀── Kafka에서 『PaymentBilled』 구독 ➔ DB에 배송 준비 기록 완료!
  • 만약 2번 결제 서비스에서 잔액 부족으로 실패했다면? ➔ 결제 서비스는 Kafka에 『PaymentFailed (결제실패됨)』 이벤트를 발행합니다. ➔ 주문 서비스가 그 에러 이벤트를 주워 듣고, 자신의 DB 상태를 '주문 취소'로 스스로 변경(보상 트랜잭션)합니다.

Ⅲ. 코레오그래피 사가의 장점

장점설명
완벽한 디커플링 (Decoupling)주문 서비스는 결제 서비스가 존재하는지조차 모릅니다. 단지 이벤트를 던질 뿐이므로, 서비스 간의 결합도가 제로(0)에 가까워 극도의 독립적 확장이 가능합니다.
단일 장애점(SPOF) 제거전체 트랜잭션을 쥐고 흔드는 중앙 컨트롤러(오케스트레이터) 서버가 없기 때문에, 중앙 서버가 죽어 전체 결제망이 마비되는 참사를 막을 수 있습니다. (메시지 큐 이중화 필수)

Ⅳ. 치명적 단점과 한계 (도입 시 주의)

  • 추적의 지옥 (Spaghetti Events): 시스템이 복잡해져서 트랜잭션 단계가 4~5개를 넘어가면, 이벤트들이 핑퐁처럼 날아다녀 "도대체 이 결제가 왜 취소된 건지" 전체 흐름의 인과관계를 사람의 머리나 코드로 파악하기가 끔찍하게 어렵습니다.
  • 새로운 서비스(예: 포인트 적립 서비스)가 끼어들면, 누가 어떤 이벤트를 들어야 하는지 코드 구석구석을 다 까봐야 하는 유지보수의 어려움이 발생합니다.

📢 섹션 요약 비유: 시장에서 물건을 살 때, 손님이 "생선 한 마리 샀어!"라고 외치면(이벤트 발행), 생선가게 주인은 물건을 싸고, 뒷골목의 배달원은 그 소리를 듣고 오토바이에 시동을 걸며, 장부 관리인은 장부에 숫자를 적습니다. 중앙에서 확성기를 잡고 지시하는 사람 없이 각자 할 일만 알아서 톱니바퀴처럼 돌아가는 매우 유연하지만 정신없이 시끄러운 탈중앙화 시장판입니다.