아키텍처/MSA
컨텍스트 맵(Context Map) 작성하기
silver_sun
2024. 4. 8. 16:47
컨텍스트 맵?
시스템을 구성하는 컨텍스트 간의 매핑 관계를 표시한 다이어그램.
컨텍스트 맵을 그리는 정형화된 규칙은 따로 없는 것 같다. 팀에서 서로 이해할 수 있게 정의하고 표현하면 될 것으로 보인다. 그러나 각 컨텍스트 사이에 존재하는 개념을 이해하고 있어야 컨텍스트 맵을 그릴 수 있기 때문에, 사용하게 되는 각 개념에 대해 소개한다.
컨텍스트 맵 그리는 방법
컨텍스트 맵에서 사용되는 표기 패턴.
- 공유 커널(Shared Kernel)
- 두 개 이상의 컨텍스트 사이에 공통적인 모델을 공유하는 관계.
- ex) 공통 라이브러리
Tip : 공유 커널에 해당하는 부분에서 변경사항이 발생할 경우, 여러 컨텍스트에 영향을 미치기 때문에 한 팀에서 관리하고 공유하는 것이 좋다.- 소비자-공급자(Customer-Supplier)
- 정보를 공급하는 컨텍스트, 정보를 공급받는 컨텍스트의 관계. 공급자는 upsteam, 소비자는 downstream 으로 표기한다.
- 흐름은 상류 → 하류의 흐름만 가능하고, 상류에서 변경사항이 생긴다면 하류에서는 해당 변화를 따라야한다.
- 소비자가 원하는 기능을 공급자가 제공할 수 있도록 구현해야한다.
- 소비자는 공급자의 변화에 직격타를 맞지 않도록 내부를 보호할 수 있는 완충지대를 만들어야한다. (OHS)
- 순응자(Confirmist)
- 소비자-공급자와 유사하지만, 상류에서 하류의 요구를 지원하지 않거나 못하는 경우 사용한다.
- 이런 상황에서는 하류는 상류에서 제공하는 모델을 그대로 사용한다.
- 충돌 방지 계층(ACL; Anti-Corruption Layer)
- 충돌 방지 계층은 하류에서 상류의 영향을 받을 때 하류 고유 모델을 지키기 위한 번역 계층. 여기선, 상류와 하류의 차이를 번역하고 하류 모델의 독립성을 유지시킨다. 즉, 상류의 변화로 인해 하류의 모델이 영향을 받지 않도록 보호하는 것.
- 보통 레거시 → msa 로 전환하려고 할 때 많이 쓰이는 패턴이라고 한다. (충돌 방지 계층을 두어 msa 로 전환을 준비하고 추후에는 해당 계층을 없애고 상류-하류를 연결하면 된다.)
- 공개 호스트 서비스(OHS; Open Host Service)
- 바운디드 컨테스트에 대한 접근을 제공하는 프로토콜이나 인터페이스를 정의한다.
- 이 프로토콜은 하류의 컨텍스트가 상위 컨텍스트에서 제공하는 기능을 용이하게 사용할 수 있도록 공개돼 있다. 보통 다른 컨텍스트에서 사용할 수 있는 공유된 API 가 여기에 해당한다.
- 발생된 언어(PL; Published Language)
- 하류에서 상류의 기능을 사용할 수 있도록 정의해놓은 문서화된 정보 교환 언어다. XML 이나 JSON 스키마로 표현될 수 있으며, 주로 공개 호스트 서비스(OHS)와 짝을 이뤄사용된다.
- 비동기 이벤트(Async)
- 메시지 브로커를 통한 비동기 통합. 결과적 일관성을 바라본다. 개발 난이도가 상승할 수 있다.