핵심 차이는 다음 단계를 누가 결정하느냐입니다. 같은 주문 흐름도 제어 방식이 바뀌면 운영 난이도와 가시성이 달라집니다.
이벤트를 받은 서비스가 스스로 다음 행동을 고릅니다.
중앙 오케스트레이터가 상태를 보고 다음 호출을 지시합니다.
다음 서비스는 호출을 받는 것이 아니라, 이전 단계의 이벤트를 보고 이어서 움직입니다.
누가 다음 단계인지, 어디서 멈추고 되돌릴지 모두 중앙 로직이 결정합니다.
서비스는 자신이 구독한 이벤트를 보고 스스로 로컬 트랜잭션을 실행한 뒤, 다음 이벤트를 발행합니다.
중앙에서 saga 상태를 읽고 다음 호출, 대기, 종료를 한곳에서 선택합니다.
실패가 나면 관련 서비스들이 보상 이벤트에 반응하며 되돌리므로, 전체 경로를 재구성해야 합니다.
어느 지점에서 실패했는지와 어떤 보상을 먼저 실행할지를 오케스트레이터가 명시적으로 제어합니다.
느슨하게 결합되지만, 진행 상태를 보려면 여러 이벤트 로그를 함께 봐야 합니다.
흐름과 중단 위치를 한곳에서 파악하기 쉬운 대신, 오케스트레이터가 중요한 운영 포인트가 됩니다.
Choreography는 서비스 자율성과 느슨한 결합에 유리하고, Orchestration은 복잡한 보상 규칙과 긴 워크플로우를 중앙에서 추적하기 쉽습니다.