본문 바로가기
마이크로서비스

오케스트레이션(orchestration)과 코레오그래피 (choreography)

by simplify-len 2020. 10. 17.

배경

 저에게 마이크로서비스라는 것은 익숙하지 않은 분야입니다. 그래서 마이크로 아키텍처 구축 이라는 책을 읽으며, MSA에 입문하던 중, 이전에 봤던 용어인데, 익숙하지 않아서 몰랐던 용어 2가지. 오케스트레이션과 코레오그래피에 대해서 이해해보려고 합니다.

 위 2개 용어는 최근 관심가는 프레임워크 eventuate.io/을 이해하던 중에 나와서 이렇게 다시 정리해볼까 합니다.

앞서 말했던 eventuate.io/프레임워크는 약결합을 통해 Saga와 CQRS 를 해결하는 좋은 오픈소스라고 판단되, 학습중에 있습니다. 어느 정도 정되면 포스팅 하겠습니다.

 

위 다이어그램을 활용해 오케스트레이션과 코레오그래피를 설명하겠습니다.

오케스트레이션

오케스트라 지휘자처럼 프로세스를 안내하고 구동하는 하나의 중앙 두뇌에 의존합니다. 

가장 단순한 작업은 고객 서비스가 마치 중심 뇌처럼 행동하는 것, 고객 서비스 스스로 이 프로세스에서 고객의 위치를 추적할 수 있고, 고객 계정이 설정되었는지, 이메일 또는 우편이 발송되었는지 확인할 수 있습니다. 아마도 아래와 같은 흐름도를 가질 것입니다.

오케스트레이션

오케스트레이션 방식에서는 고객 서비스에 지나치게 많은 중앙 관리 권한이 부여되는 단점이 있습니다. 고객 서비스는 웹 중간에서 허브가 되어 로직이 살아나는 중심점이 될 수 있습니다. 저자는 이 방식이 빈약한 CRUD 기반의 서비스에 할 일을 지시하는 소수의 똑똑한 '신'과 같은 서비스를 낳는 것을 목격했다고 합니다.

코레오그래피

코레오그래피는 발레 무용수들이 자신의 역할을 알고 주변의 다른 무용수에 반응하는 것처럼 시스템 각 부분에 작업 내용을 알리고 세부 사항을 수행하게 한다.

코레오그래피 방식에서는 고객 서비스가 비동기 방식으로 '고객이 생성되었다' 라는 이벤트를 발산할 뿐입니다. 적립 포인트 은행, 우편 서비스, 이메일 서비스는 모두 아래 그림과 같이 구독하고 적절히 행동할 뿐입니다. 이 방식이 확실하게 느슨한 결합을 이끌어냅니다. 만약 다른 서비스가 생성과정에 참여하고자 한다면 단지 이벤트를 구독하고 필요할 때 작업을 수행하게 하면 됩니다. 

역시나, 이 방법에도 단점이 존재하는데, 아래 그림에서 구독이라는 쓰여져있는 부분으로 비지니스 프로세스의 명확한 뷰가 암시적으로 반영되는 단점이 존재합니다.

 

그럼 암시적인 비니지스 로직을 보여주는 뷰를 어떻게 해결해야될까요?

이 문제를 처리하기 위해 저자가 선호하는 방식은 비지니스 프로세스 뷰와 명확히 대응하는 모니터링 시스템을 구축하는 것이라고 합니다. 그 시스템은 개별 서비스를 독립적인 개체로 인식하여 서비스를 추적하고, 특이한 예외들을 더 명료한 프로세스 흐름상에 매핑하여 볼 수 있도록 만든다고 합니다.

 

결론

 저자는 코레오그래피 방식의 시스템이 전반적으로 더 느슨히 결합하고 유연하며 변경을 보다 쉽게 수용하는 것이라는 사실을 알게 되었습니다. 시스템 경계를 넘어 프로세스를 모니터링하고 추적하는 부가 작업이 필요하지만, 오케스트레이션 방식에 지나치게 의존하는 구현체는 매우 취약하고 높은 변경 비용을 수반하게 됩니다. 그러므로 각 서비스에 자신의 역할을 영리하게 인식하는 코레오그래피 방식의 시스템을 선호한다고 합니다.

댓글