Chapter 9 도메인 모델과 바운디드 컨텍스트
9.1 도메인 모델과 경계
∘ 한 개의 모델로 여러 하위 도메인을 모두 표현하려 하면 안 됨
ex. 재고 관리에서의 상품, 주문에서의 상품, 배송에서의 상품에서 상품은 다 다른 의미를 가짐
∘ 하위 도메인마다 사용하는 용어가 다르기 때문에 올바른 도메인 모델을 개발하려면 하위 도메인마다 모델을 만들어야 함
∘ Bounded Context : 모델이 완전한 의미를 갖는 경계가 있는 컨텍스트
9.2 바운디드 컨텍스트
∘ 바운디드 컨텍스트는 모델의 경계를 결정함
∘ 한 개의 바운디드 컨텍스트는 논리적으로 한 개의 모델을 가짐
∘ 바운디드 컨텍스트는 실제로 사용자에게 기능을 제공하는 물리적 시스템
∘ 여러 하위 도메인을 한 개의 바운디드 컨텍스트에서 개발할 때는 하위 도메인을 모델이 섞이지 않도록 주의
∘ 모델이 섞이지 않도록 하위 도메인마다 구분되는 패키지를 갖도록 구현해야 함
9.3 바운디드 컨텍스트 구현
∘ 바운디드 컨텍스트는 표현 영역, 응용 서비스, 도메인, 인프라스트럭처 영역, DB를 모두 포함함
∘ 모든 바운디드 컨텍스트를 반드시 도메인 주도로 개발할 필요는 없음
∘ 한 바운디드 컨텍스트 안에서 다른 구현 방식(ex. 도메인 모델 기반, 서비스-DAO)을 사용할 수 있음
∘ 바운디드 컨텍스트는 UI를 가지고 있지 않을 수도 있음
∘ 각 바운디드 컨텍스트는 UI 서버를 이용해서 간적적으로 브라우저와 통신할 수도 있음
9.4 바운디드 컨텍스트 간 통합
∘ 하위 도메인에 두 개 이상의 팀이 영향을 준다면 바운디드 컨텍스트 간 통합이 발생함
∘ 도메인 서비스를 구현한 클래스는 인프라스트럭처 영역에 위치하고, 외부 시스템과의 연동을 처리하고 외부 시스템의 모델과 도메인 모델 간의 변환을 처리함
∘ 모델 간의 변환 과정이 복잡하면 별도로 변환 역할을 맡는 클래스를 만듦
∘ REST API 호출은 두 바운디드 컨텍스트를 직접 통합하는 방법
∘ 큐 사용 등은 두 바운디드 컨텍스트를 간접적으로 통합하는 방법
∘ 어떤 도메인 관점에서 모델을 사용하느냐에 따라 두 바운디드 컨텍스트의 구현 코드가 달라짐
∘ 큐로 통합할 대 큐를 어떤 시스템이 제공하는지에 따라 데이터 구조가 달라짐
9.5 바운디드 컨텍스트 간 관계
∘ 두 바운디드 컨텍스트 간 관계 중에서 가장 흔한 관계는 한쪽에서 API를 제공하고 다른 한쪽에서 그 API를 호출하는 관계. REST API가 여기에 속함.
∘ 하류 컴포넌트는 상류 컴포넌트가 제공하는 데이터와 기능에 의존
∘ 상류 컴포넌트가 제공하는 REST API의 인터페이스가 바뀌면 하류 컴포넌트에 해당하는 시스템의 코드도 바뀜
∘ 상류 컴포넌트 : 서비스 공급자 역할
∘ 하류 컴포넌트: 상류 컴포넌트가 제공하는 서비스를 사용하는 고객 역할
∘ 상류 컴포넌트는 하류 컴포넌트가 사용할 수 있는 통신 프로토콜을 정의하고 공개함
∘ 공개 호스트 서비스 : 여러 개의 하류 컴포넌트의 요구를 수용할 수 있는, 서비스 형태의 공개된 API
ex. 검색
∘ 상류 컴포넌트의 서비스는 상류 바운디드 컨텍스트의 도메인 모델을 따르기 때문에 하류 컴포넌트를 상류 서비스 모델의 영향으로부터 보호할 수 있는 완충 지대 필요
∘ 안티코럽션 계층 : 두 바운디드 컨텍스트 간의 모델 변환을 해주는 계층
∘ 공유 커널 : 두 바운디드 컨텍스트가 공유하는 모델
- 공유 커널은 밀접한 관계의 두 컨텍스트 사이에서 사용할 때 중복을 줄여준다는 장점을 가짐
∘ 독립 방식 : 두 바운디드 컨텍스트가 서로 통합하지 않는 방식
∘ 두 바운디드 컨텍스트 간의 통합이 수동으로 이루어짐
∘ 대규모일 때 수동으로 통합하기에는 어려움
9.6 컨텍스트 맵
∘ 컨텍스트 맵 : 전체 비즈니스를 조망할 수 있는 지도. 바운디드 컨텍스트 간의 관계를 표시. 시스템의 전체 구조.
∘ 바운디드 컨텍스트 영역에 주요 애그리거트를 함께 표시하면 모델에 대한 관계가 더 명확히 드러남
∘ 바운디드 컨텍스트가 적절한 도메인에 두고, 집중해야 할 컨텍스트를 파악하는 데에 도움을 줌
'Back-End > 도메인 주도 개발 시작하기' 카테고리의 다른 글
[DDD] 도메인 주도 개발 시작하기 Ch11 (0) | 2024.04.29 |
---|---|
[DDD] 도메인 주도 개발 시작하기 Ch10 (0) | 2024.04.29 |
[DDD] 도메인 주도 개발 시작하기 Ch8 (0) | 2024.04.01 |
[DDD] 도메인 주도 개발 시작하기 Ch7 (0) | 2024.04.01 |
[DDD] 도메인 주도 개발 시작하기 Ch6 (0) | 2024.03.25 |