술(述)/비교

오케스트레이션 vs 코레오그래피

쪼랩전사 2022. 1. 20. 19:57
728x90

서비스 제어 방식

마이크로서비스는 하나의 거대한 서비스가 아니라 여러 개의 서비스를 두고, 이를 통해 사용자에게 필요한 기능을 제공하는 아키텍처이다.

서비스가 여러 개로 쪼개어졌으니, 사용자에게 기능을 제공하기 위해서는 서비스들이 서로 협력하여야 한다.
보통 두 가지 방법이 제시되며, 이는 아래와 같다.

  • Orchestration
  • Choreography

Orchestration

중재자 서비스를 두고 여러 서비스를 조율하는 방법이다.

중재자 서비스는 사용자에게 기능을 제공하기 위해 어떤 서비스를 어떤 순서로 호출할지 알고 있어야 한다.
서비스 간의 커플링은 증가하지만, 개발자 관점에서 기능 자체를 이해하기 쉽다.

Choreography

중재자 서비스 없이 서로가 알아서 소통하는 방법이다.

보통 서비스들은 이벤트 브로커를 통해 소통한다.
서비스들은 자신에게 필요한 이벤트를 구독하고 있으며, 어떤 동작을 수행하면 그에 대한 결과를 이벤트로 발행한다.

서비스 간의 커플링 자체는 줄어들지만, 자신에게 필요한 이벤트를 구독해야 하므로 어떤 서비스에서 어떤 이벤트를 발행하는지 알아야 한다는 단점이 있다. 또한 이벤트에 따라 어떤 서비스가 수행하는지 알려주는 별도의 문서가 없다면 개발자 관점에서 이해하기가 힘들다.

단점이 더 많아 보일 수 있으나, 커플링이 줄어든다는 장점을 포기하기는 힘들다.

정리

마이크로서비스에서는 보통 두 가지 방식을 혼합하여 사용한다.

기능의 로직 자체가 복잡하지 않다면 Choreography 방식을 권장하며,
반대로 로직 자체가 복잡하다면 Orchestration 방식을 권장한다.

'술(述) > 비교' 카테고리의 다른 글

natural key vs surrogate key  (0) 2021.11.11
포인트 릴리즈 vs 롤링 릴리즈  (0) 2021.10.17
status vs state  (0) 2021.08.05
명시적 API vs 묵시적 API  (0) 2021.06.19
정적(Statically) vs 동적(Dynamically) 타입 언어  (0) 2021.06.13