오케스트레이터(orchestrator)는 한 줄로 말하면 “여러 마이크로서비스를 순서대로 / 조건대로 움직이게 만드는 지휘자 역할의 컴포넌트”를 말한다.
근데 이 단어가 두 군데에서 쓰여서 헷갈리기 좋다:
인프라 레벨 오케스트레이터
비즈니스/도메인 레벨 오케스트레이터
이번 프로젝트의 MSA에서 필요한 건 보통 2번이라 이걸 위주로 알아보았다.
MSA에서는 기능이 이렇게 쪼개져 있다:
“주문 생성”이라는 유스케이스 하나를 처리하려고 해도:
이렇게 여러 서비스가 순차적으로/조건적으로 협업해야 함.
이때 흐름을 관리하는 방법이 크게 두 가지로 볼 수 있다:
각 서비스가 이벤트를 발행하고, 다른 서비스들이 그 이벤트를 구독해서 자기 할 일을 함.
예:
장점:
단점:
장점:
단점:
대표적인 사용처는:
예시: “주문 + 결제 + 재고 + 배송” 전체를 하나의 논리적 트랜잭션처럼 다루고 싶다.
Orchestrator가 하는 일:
OrderService.createOrder() 호출
성공하면 PaymentService.approvePayment() 호출
OrderService.cancelOrder() 보상 호출성공하면 InventoryService.decreaseStock() 호출
PaymentService.cancelPayment() + OrderService.cancelOrder() 보상 호출성공하면 ShippingService.createShipment() 호출
끝나면 SlackService.notify() 호출
상태는 보통 Orchestrator DB에 이렇게 저장:
이게 보통 말하는 오케스트레이션 기반 Saga 패턴이다.
예: “휴면 전환 프로세스”, “배송 마감 시한 계산 후 담당자에게 DM, 이후 상태 업데이트” 같은
몇 시간~며칠 걸릴 수 있는 흐름도 오케스트레이터로 관리할 수 있음.
이럴 때는 직접 코딩하기보단 아래 같은 워크플로우/오케스트레이션 엔진을 쓰기도 함:
예: 주문 하나 처리할 때
이렇게 섞여 있으면, 실패 지점이 많고 보상 논리도 복잡해짐.
이때 오케스트레이터가
를 한 곳에서 추적해주면 운영이 훨씬 편해진다.
예를 들어 이번 프로젝트에서 하고 있는 스타일로 보면:
order-servicehub-serviceshipping-serviceslack-serviceai-service (최종 발송 시한 계산)orchestrator-service (새로 하나 둔다고 가정)sequenceDiagram
autonumber
actor Owner as "사장님(주문자)"
participant UI as "주문 UI"
participant Orc as "Orchestrator Service"
participant Order as "Order Service"
participant Hub as "Hub Service"
participant AI as "AI Service"
participant Slack as "Slack Service"
Owner->>UI: 주문 생성 요청
UI->>Orc: POST /orchestrations/orders {orderRequest}
Orc->>Order: POST /orders
Order-->>Orc: 주문 정보 + orderId
Orc->>Hub: GET /hubs/{hubId}
Hub-->>Orc: 허브 운영시간/정보
Orc->>AI: POST /ai/deadline {orderId, hubInfo}
AI-->>Orc: finalDeadline, slackFormattedText
Orc->>Slack: POST /v1/slack/post-deadline {receiverSlackId, slackFormattedText}
Slack-->>Orc: OK
Orc-->>UI: 전체 처리 결과(주문 + 최종 발송 시한 + Slack 발송 여부)
여기서 Orchestrator 역할:
단일 API로 복잡한 여러 서비스 호출을 감싸기
중간에 실패하면:
Order.cancel(orderId)전체 프로세스의 로그/상태를 한 곳에서 관리
orchestrator-service 라는 별도 마이크로서비스
이 안에:
OrchestrationInstance 엔티티 (각 프로세스 인스턴스)기술 스택 예:
오케스트레이션이 복잡해지고 “상태 머신 + 타이머 + 시각화”까지 필요하면:
장점:
도입 고려 기준을 요약하면:
반대로:
정리하면,
오케스트레이터는 여러 마이크로서비스의 호출 순서, 조건, 실패 시 보상까지 “시나리오 단위”로 관리하는 중앙 지휘자고,
MSA에서 Saga, 장기 프로세스, 외부 연동처럼 복잡한 비즈니스 흐름을 다룰 때 유용하게 쓸 수 있다.