마이크로서비스 아키텍처(MSA) 경계 구분하기

13 September 2017 · 2 minutes read

마이크로서비스간 도메인 모델의 경계 구분하기

도메인 지식에 따른 의미있는 분할이 목표가 되어야 한다. 그리고 의존성이 높은 명확한 응집력이 있다면 이는 단일 마이크로서비스로 구성할 필요가 있다는 것을 나타낸다. 응집력은 마이크로서비스를 쪼갤지, 그룹화 할지를 구분할 수 있는 방법 중 하나이다. 도메인 지식이 쌓일때 마다 반복적으로 마이크로서비스의 크기를 조정해야 한다. 이는 단 한번에 이루어질 수 없다.

도메인 엔티티가 있는 도메인 모델은 명확한 바운디드 컨텍스트 내, 혹은 마이크로서비스 내에 적용된다. 바운디드 컨텍스트는 도메인 모델의 적용 가능성의 경계를 결정하고 무엇이 응집되고 독립적으로 개발될 수 있을지 보여준다. 마이크로서비스를 구성하기 위해서는 이러한 것들이 목표가 되므로, 결국 바운디드 컨텍스트의 명확한 정의가 반드시 필요함을 나타낸다.

그럼 바운디드 컨텍스트는 어떻게 정의해야 할까? 바로 컨텍스트 매핑 패턴을 사용하는 것이다. 컨텍스트 맵은 도메인간 경계(바운디드 컨텍스트)를 명확히 정의하는 방법으로, 바운디드 컨텍스트에는 도메인의 자율성과 도메인 엔티티와 같은 세부 사항, 그리고 다른 바운디드 컨텍스트간 통합 계약 관계를 정의하기 때문에 마이크로서비스의 정의와 비슷하다.

도메인 모델의 경계 구분 그림 1. User 엔티티가 컨텍스트에 따라 서로 다른 속성을 가지는 것을 볼 수 있다.

마이크로서비스간 통신

모놀리틱 애플리케이션을 마이크로서비스 기반으로 전환하는 것의 가장 큰 도전 과제challenge는 통신 메커니즘의 변화이다. 단순히 한 프로세스 내의 메소드 호출을 서비스의 RPC 호출로 변경하는 것은 분산 환경에서 너무 많은 통신을 하게되어 효율적이지 않다. 여러가지 방법 중 하나는 마이크로서비스를 가능한한 격리하는 것이다. 그런 후 내부 객체간 통신을 세밀한fine-grained 통신에서 더 대단위coarser-grained의 비동기 통신으로 바꾸는 것이다. 호출을 그룹화하고 내부의 다중 호출을 집계aggregate 해서 클라이언트에게 반환한다.

참고자료

Updated 26 December 2019