반응형
바운디드 컨텍스트
도메인 모델을 표현할 때
- 하위 도메인마다 같은 용어라도 의미가 다르고 같은 대상이라도 지칭하는 용어가 다를 수 있다.
- 한 개의 모델로 모든 하위 도메인을 표현하기 어렵다.
- 하위 도메인마다 모델을 만들어야 한다.
- 각 모델은 명시적으로 구분지어 섞이지 않도록 한다.
[바운디드컨텍스트(BoundedContext)란]
- 모델은 특정한 컨텍스트 아래서 완전한 의미를 갖는데, 이때 구분되는 경계를 갖는 컨텍스트를 바운디드 컨텍스트(Bounded Context)라고 한다.
- 사용자에게 기능을 제공하는 물리적 시스템
- 모델의 경계를 결정, 한개의 바운디드 컨텍스트는 한개의 논리적으로 모델을 갖는다.
- 용어를 기준으로 구분한다.
- 팀 조직의 규모에 따라 하위 도메인별로 각 바운디드 컨텍스트를 가질 수도 있고, 한 바운디드 컨텍스트에 여러 하위 도메인을 가질 수도 있다.
- 물리적으로 한개의 바운디드컨텍스트를 갖는다고 하더래도 하위 도메인마다 구분되는 패키지를 두어 하위 도메인 모델들이 섞이지 않도록 한다.
- 바운디드 컨텍스트는 각자 구현하는 하위 도메인에 맞는 모델을 갖는다.
[바운디드 컨텍스트(BoundedContext) 구현]
- 바운디드 컨텍스트는 도메인 기능을 위한 모든 요소를 포함한다. ex) 표현영역, 응용서비스 영역, 인프라 스트럭처 영역, DB..
- 바운디드 컨텍스트 규모와 특징에 따라 적절한 구현 방식을 선택한다.
- DDD Layer 아키텍처
- 데이터 중심 CRUD 방식의 아키텍처
- CQRS(Command Query Responsibility Segregation)
- 바운디드 컨텍스트별로 서로 다른 구현 기술을 (RDBMS, NoSQL..)
- UI가 없는 컨텍스트/ UI 파사드 서버를 둔 컨텍스트
- ...
바운디드 컨텍스트 간 통합과 관계
카탈로그 시스템에서 사용자에게 카탈로그에 해당하는 상품과, 추천 상품목록을 보여주고 싶다면?
카탈로그 시스템은 추천 시스템으로부터 추천 데이터를 받아 오지만,
받아온 추천 데이터 모델을 그대로 사용하기 보다는 카탈로그 도메인 모델을 사용해서 추천 상품을 표현해야 한다.
[두 바운디드 컨텍스트의 통합 방법]
방법 | 두 바운디드 컨텍스트의 직접 통합 | 두 바운디드 컨텍스트의 간접 통합 |
REST API 를 호출 | 메세지 큐 사용 | |
특징 | ?? |
|
구조 | ![]() ![]() |
![]() ![]() |
|
💡 마이크로서비스와 바운디드 컨텍스트
마이크로서비스란 애플리케이션을 작은 서비스로 나누어 개발하는 아키텍처 스타일로, 개별 서비스를 독립된 프로세스로 실행하고 각 서비스가 REST API나 메시징을 이용해서 통신하는 구조를 갖는다.
바운디드 컨텍스트를 마이크로 서비스로 구현하면 자연스럽게 코드 수준에서 컨텍스트별로 모델이 분리 되기 때문에 두 바운디드 컨텍스트 간 모델이 섞이지 않는다.
[바운디드 컨텍스트간 관계]
- 데이터와 기능을 제공받는 컴포넌트(고객, 하류 컴포넌트)는 제공하는 컴포넌트(서비스 공급자, 상류 컴포넌트)에 의존하게 된다.
- 상류 컴포넌트는 하류 컴포넌트가 사용할 수 있는 통신 프로토코을 정의 하고 이를 공개한다.
- 여러 하류 컴포넌트의 요구사항을 수용하는 API를 만들고 이를 서비스 형태로 공개하기도 하는데 공개 호스트 서비스 라고 한다.
- 상류 컴포넌트는 상류 바운디드 컨텍스트의 도메인 모델을 따르므로 하류컴포넌트는 상퓨 서비스 모델을 자신들의 모델로 변환해주는 처리 기가 필요하다.
- 두 바운디드 컨텍스트가 같은 모델을 공유하기도 하는데, 이때 공유하는 모델을 공유커널(SHARED KERNEL)이라고 한다.
- 공유 커널은 중복을 줄여준다.
- 두 팀이 상호 협력하는 밀접한 관계가 필수
- 독립방식: 두 바운디드 컨텍스트 통합없이 독립적으로 모델을 발전 시키고 수동으로 통합하는 방법
[컨텍스트 맵]
- 컨텍스트 맵은 바운디드 컨텍스트간의 관계를 표시한 것으로 시스템 전체 구조를 볼 수 있다.
- 주요 애그리거트와 함께 표시해 모델관계를 명확히 드러낼 수 있다.
- 하위 도메인과 일치하지 않는 바운디드 컨텍스트 조정과 집중해야할 핵심 도메인 파악하는데 도움이 된다.
Reference
반응형
'객체지향' 카테고리의 다른 글
[DDD, 도메인 주도 개발] 11.CQRS(Command and Query Responsibility Segregation) (0) | 2023.04.24 |
---|---|
[DDD, 도메인 주도 개발] 10.이벤트 (0) | 2023.04.23 |
[DDD, 도메인 주도 개발] 8.애그리거트와 트랜잭션 (0) | 2023.04.16 |
[DDD, 도메인 주도 개발] 6.응용서비스와 표현영역 (0) | 2023.04.09 |
[DDD, 도메인 주도 개발] 5.스프링 데이터 JPA를 이용한 조회 기능 (0) | 2023.04.09 |