ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 9장 - 도메인 모델과 바운디드 컨텍스트
    📕 book/도메인 주도 개발 시작하기 2023. 1. 13. 22:09

    📌 도메인 모델과 경계


    한 도메인은 여러 하위 도메인으로 구분된다.

    따라서, 한 개의 모델로 여러 하위 도메인을 모두 표현하려고 하면 오히려 모든 하위 도메인에 맞지 않는 모델을 만들게 된다.

     

    하위 도메인마다 사용하는 용어가 다르기 때문에 올바른 도메인 모델을 개발하려면 하위 도메인마다 모델을 만들어야 한다.

     

    모델은 특정한 컨텍스트(문맥) 하에서 완전한 의미를 갖는다.

    • 컨텍스트마다 의미가 서로 다를 수 있다.

    이렇게 구분되는 경계를 갖는 컨텍스트를 바운디드 컨텍스트(Bounded Context)라고 한다.

     

    📌 바운디드 컨텍스트(Bounded Context)


    바운디드 컨텍스트는 모델의 경계를 결정하고 한 개의 바운디드 컨텍스트는 논리적으로 한 개의 모델을 갖는다.

    • 용어를 기준으로 구분
    • 서로 다른 용어를 사용 → 이 용어를 기준으로 컨텍스트를 분리

     

    하위 도메인과 바운디드 컨텍스트의 이상적인 관계 : 일대일 관계

    • 하지만 그렇지 않을 때가 많다.

     

    여러 하위 도메인을 하나의 바운디드 컨텍스트에서 개발할 때 주의할 점

    • 하위 도메인의 모델이 섞이지 않도록 해야 한다.

    ⇒ 한 개의 바운디드 컨텍스트가 여러 하위 도메인을 포함하더라도 하위 도메인마다 구분되는 패키지를 갖도록 구현해야 한다.

     

    바운디드 컨텍스트는 구현하는 하위 도메인에 알맞는 모델을 포함한다.

     

    📌 바운디드 컨텍스트 구현


    바운디드 컨텍스트는 도메인 모델뿐만 아니라 표현 영역, 응용 서비스, 인프라스트럭처 영역을 모두 포함한다.

    • 각 바운디드 컨텍스트는 도메인에 알맞은 아키텍처 사용
    • 각 바운디드 컨텍스트는 서로 다른 구현 기술을 사용할 수 있다.

     

    📌 바운디드 컨텍스트 간 통합


    두 바운디드 컨텍스트 간 통합이 필요할 때가 존재할 수 있다.

     

    REST API를 호출하는 것은 두 바운디드 컨텍스트를 직접 통합하는 방법이다.

    • 간접적으로 통합하는 방법도 있다.

     

    대표적인 간접 통합 방식 - 메시지 큐 사용

    • 비동기로 메시지를 처리

     

    MSA와 바운디드 컨텍스트

    💡 마이크로 서비스는 개별 서비스를 독립된 프로세스로 실행하고
        각 서비스가 REST API 나 메시징을 통해 통신하는 구조를 갖는다.

    이런 마이크로서비스 특징은 바운디드 컨텍스트와 잘 어울린다.

     

    각 바운디드 컨텍스트는 모델의 경계를 형성하는데 바운디드 컨텍스트를 마이크로서비스로 구현하면 자연스럽게 컨텍스트별로 모델이 분리된다.

    ⇒ 바운디드 컨텍스트마다 프로젝트를 만들게 된다.

    ⇒ 독립적으로 배포, 모니터링하며 확장된다.

     

    📌 바운디드 컨텍스트간 관계


    바운디드 컨텍스트는 어떤 식으로든 연결된다.

    따라서 다양항 방식으로 관계를 맺는다.

     

    대표적인 방법 - REST API

    • API를 사용하는 바운디드 컨텍스트는 API를 제공하는 바운디드 컨텍스트에 의존하게 된다.
    • 상류 컴포넌트(일종의 서비스 공급자 역할), 하류 컴포넌트(서비스를 사용하는 고객 역할)의 상호 협력이 필수적이다.

    상류 컴포넌트는 하류 컴포넌트가 사용할 수 있는 통신 프로토콜을 정의하고 공개한다.

     

    두 바운디드 컨텍스트가 같은 모델을 공유하는 경우

    • 모델을 공유함으로 써 중복 설계를 막을 수 있다.
    • 공유하는 모델을 공유 커널이라고 한다.
    • 장점 : 중복을 줄여준다.
    • 단점 : 공유를 하고 있기 때문에 임의로 모델을 변경하면 안되며 두 팀이 밀접한 관계를 유지해야 한다.

     

    독립 방식

    • 서로 통합하지 않는 방식

    두 바운디드 컨텍스트 간에 통합하지 않으므로 서로 독립적으로 모델을 발전

    독립 방식에서는 두 바운디드 컨텍스트 간의 통합은 수동으로 이루어진다.

     

    📌 컨텍스트 맵


    개별 바운디드 컨텍스트에 매몰되면 전체를 보지 못할 때가 있다.

    ⇒ 이런 상황을 방지하려면 전체 비즈니스를 조망할 지도가 필요

    컨텍스트 맵

     

    💡 컨텍스트 맵 : 바운디드 컨텍스트 간의 관계를 표시한 것
    • 한눈에 각 바운디드 컨텍스트의 경계가 명확하게 드러나고 서로 어떤 관계를 맺고 있는지 알 수 있다.
    • 시스템의 전체 구조를 보여준다.
    • 도메인에 맞게 바운디드 컨텍스트를 조절하고 어떤 바운디드 컨텍스트에 집중할지 파악하는데 도움이 된다.

     

    참고자료

    http://www.yes24.com/Product/Goods/108431347

    '📕 book > 도메인 주도 개발 시작하기' 카테고리의 다른 글

    11장 - CQRS  (0) 2023.01.16
    10장 - 이벤트  (1) 2023.01.16
    8장 - 애그리거트 트랜잭션 관리  (0) 2023.01.12
    7장 - 도메인 서비스  (0) 2023.01.12
    6장 - 응용 서비스와 표현 영역  (0) 2023.01.05

    댓글

Designed by Tistory.