SW/마이크로서비스

마이크로서비스 : 전략적 설계 : 컨텍스트 매핑 : 정의, 개요, 개념

얇은생각 2020. 5. 12. 19:30
반응형

컨텍스트 매핑

여러 개의 Bounded Context들은 비즈니스의 문제 해결을 위해 상호 간에 연동이 필요하게 되됩니다. 이런 경우 두 Bounded Context 사이에 선을 그려서 두 Bounded Context가 관계를 갖고 있다는 것을 표시합니다. 서로 다른 Bounded Context를 담당하는 팀에서는 각각의 유비쿼터스 언어를 정의해서 사용하게 됩니다.

이 선은 두 Bounded Context가 갖고 있는 각각의 유비쿼터스 언어 사이의 통역, 번역을 의미한다고 할 수 있습니다. Bounded Context 사이의 관계를 찾아 매핑할 때 두 Bounded Context 사이의 선이 어떤 종류의 관계인지를 찾는 것이 매우 중요합니다. 두 영역 간의 경계와 그 사이의 관계를 잘 정의합니다.

시간에 따라 적절한 조정을 통해 각 영역의 변화를 지원할 수 있기 때문입니다. 각 Bounded Context들 간의 관계를 찾아 정의한 Context map입니다. Bounded Context들 간의 관계를 나타내는 Context 매핑의 다양한 유형에 대해 이해하고 있어야 됩니다.

 

마이크로서비스 : 전략적 설계 : 컨텍스트 매핑 : 정의, 개요, 개념

 

Context를 잘 그려내기 위해 알아야 될 Context 매핑의 다양한 유형에 대해 알아보도록 하겠습니다. Context 매핑은 파트너십, 공유커널, 고객 공급자, 준수자, 충돌방지계층, 공개 호스트 서비스, 공표된 언어, 매핑을 하지 않는 것까지 총 8가지의 유형이 있습니다.

 

 

공유 커널

마이크로서비스 : 전략적 설계 : 컨텍스트 매핑 : 정의, 개요, 개념

 

두 Bounded Context의 교차 지점으로 표시한 공유커널은 두 개의 팀 또는 그 이상 사이에서 작지만 공통적인 모델을 공유하는 관계를 나타냅니다. 각 팀은 공유하는 모델 요소에 대해 서로 합의해서 만들어야 되며, 공유하는 모델의 코드, 빌드를 관리하고 테스트하는 것은 어느 한 팀에서 맡아 수행하게 됩니다.

따라서 공유하는 부분은 어느 한 팀에 의해 협의없이 번경되지 않아야 된다는 규칙이 반드시 지켜져야 됩니다. 공유커널은 작은 노력과 비용으로 Context의 동기화를 수행할 수 있습니다. 하지만, 서로 다른 구현 기술을 사용하는 경우 사용할 수 없다는 제한사항이 있습니다.

 

 

고객 공급자 유형

고객 공급자 유형에서는 공급자가 고객이 원하는 기능을 제공해주는 관계로 공급자는 상류, 고객은 하류로 표현을 합니다. 이 고객 공급자 유형은 공유커널 유형 적용이 기술적으로 불가능하거나 두 Context가 완전히 분리된 모델을 갖고 있어야 되는 경우에 사용합니다.

 

 

준수자 유형

준수자 유형은 앞에 설명한 고객 공급자 유형과 매우 유사합니다. 하지만, 상류의 팀이 하류의 요구에 지원할 동기가 없는, 상류 쪽의 팀이 하류 쪽의 요구를 지원하지 않거나 못하는 경우에 사용하게 됩니다.

이런 상황에서는 하류팀이 자기들의 특정 요구사항에 맞춰 상류 모델의 유비쿼터스 언어를 계속 변환시키는 것이 쉽지 않기 때문에 현재의 상류팀 모델을 그대로 따르게 됩니다.

예를 들면 아마존과 제휴하는 판매자 중 하나가 아마존 시스템과 자기 시스템을 연동하려고 할 때 아마존 기존 모델을 준수하는 것처럼 보통은 확실하게 자리 잡은 매우 거대하거나 복잡한 모델과의 통합이 필요할 때 주로 사용됩니다.

 

 

충돌 방지 계층

충돌방지계층은 가장 방어적인 매핑 관계입니다. 하류 팀의 모델과 상류 팀의 유비쿼터스 언어 모델 사이에 일종의 번역을 위한 계층을 만드는 것을 말합니다.

이 계층은 상류 모델로부터 하류 모델의 독립성을 훼손하지 않습니다. 그리고, 둘 사이를 번역하는 계층을 만들어서 하류 모델은 상류 모델의 영향을 전혀 받지 않게 할 수 있도록 만드는 방식입니다. 즉, 다른 시스템과 상호작용에 필요한 통신 메커니즘을 구현합니다. 상류 모델의 변경 없이 하위 모델과의 통합을 위한 데이터를 중간에서 양방향으로 변환해주는 영역을 구현하는 것이라고 할 수 있습니다.

이 충돌방지계층을 구현하는 방식으로는 Facade, Adaptor, Translator를 조합해서 구성하게 됩니다. 마이크로서비스 아키텍처를 적용하는 새로운 시스템을 레거시 시스템과의 통합을 위해 많이 사용되는 매핑 유형입니다.

 

 

공개호스트 서비스

기존의 레거시 시스템의 모델이 잘 설계되었다고 하더라도 상당 부분 현재 프로젝트에서 필요에 적합하지 않은 경우가 있습니다. 그러나 레거시 시스템과의 통합이 큰 가치를 얻을 수 있습니다. 또 어떤 경우에는 반드시 연동이 되어야 하는 경우가 종종 있게 됩니다.

그렇다고 레거시 시스템을 전면 재설계해서 교체해버리는 것은 어렵기도 하고 또 불가능한 것들이 대부분입니다. 그래서 이 방법은 레거시 시스템을 단계적으로 마이크로서비스로 전환하는 과정에서 가장 많이 사용되는 방법입니다.

공개 호스트 서비스는 다수의 외부 시스템과 통합이 필요한 경우 외부의 접근과 관련된 프로토콜을 공개해서 이 시스템과 통합하려고 하는 모든 시스템이 이 프로토콜을 사용할 수 있게 하는 방법입니다.

 

 

발행된 언어

발행된 언어는 이를 사용하는 Bounded Context의 규모와 상관없이 모두 사용과 번역을 가능하게 하는 문서화된 정보교환언어를 제공하는 방법입니다. 이 언어는 XML 스키마, JSON 스키마 형식으로 정의할 수 있습니다. 이 발행된 언어는 주로 공개 호스트 서비스와 결합되어 사용되고 있습니다.

반응형