코딩못하는사람

9.도메인 모델과 바운디드 컨텍스트 본문

DDD/도메인 주도 개발 시작하기

9.도메인 모델과 바운디드 컨텍스트

공부절대안함 2022. 10. 27. 00:59

1.도메인 모델과 경계

도메인을 완벽하게 표현하는 단일 모델을 만드려는 실수 -> 오히려 모든 하위 도메인에 맞지 않는 모델을 만들게 된다.

회원 도메인은 회원이 될수있고 주문자가 될수있고 보내는사람이 될수있는 예시.

섞이기 시작하면 모델의 의미가 약해지기 때문에 요구사항 반영이 어려워진다.

명시적으로 구분되는 경계를 가져서 섞이지 않도록 해야 한다.

모델은 특정 컨텍스트하에서 완전한 의미를 갖는다.구분되는 경계를 갖는 컨텍스트를 DDD에서는 바운디드 컨텍스트라고 부른다.

 

2. 바운디드 컨텍스트

바운디드 컨텍스트는 모델의 경계를 결정, 한개의 바운디드 컨텍스트는 한개의 모델을 갖음. 용어를 기준으로 구분.

BD는 실제로 기능을 제공하는 물리 시스템, 도메인 모델은 바운디드 컨텍스트 안에서 도메인 구현.

하나의 하위 도메인에서 두가지 바운디드 컨텍스트를 다루기도 하고, 하나의 바운디드 컨텍스트에서 두가지 도메인을 다루기도 한다.(팀구조에 따라)

 

규모가 작은기업은 한개팀에 하나의 바운디드 컨텍스트에서 서비스를 제작할떄가 있음.

하나의 바운디드 컨텍스트 주의할점-> 하위 도메인이 섞이지 않게 함.전체 하위 도메인을 위한 단일 모델을 만들고 싶은 유혹. 이렇게 되면 개별 하위 도메인을 제대로 반영하지 못하게 됨.+기능 확장의 어려움
한개의 바운디드 컨텍스트가 여러 하위도메인을 포함해도 구분되는 패키지.(물리 바운디드 컨텍스트 하나여도 패키지로 구분하자)

BC마다 다른 모델의 모습을 갖게됨. 연관관계도 다르고, 필드도 다르고

 

 

 

3.바운디드 컨텍스트의 구현

도메인 모델만이 아니라 필요한 표현 응용 인프라 영역 모두 포함한다.

모든 BD를 DDD로 개발할 필요는 없다.복잡한 도메인 로직을 갖지 않는것은 그냥 CRUD.(서비스 -DAO구조)

(각 바운디드 컨텍스트에 알맞은 아키텍처를 사용하자는뜻)

CQRS같이 한 바운디드 컨텍스트에서 섞어쓸수도 있는데 , 상태변경은 DDD, 조회기능은 서비스-DAO로 구현

다른 기술스택을 가져갈 수도 있다.

UI를 꼭 가질 필요도 없고~ RESTAPI로 JSON데이터만 줘도 되고 등등

UI를 처리하는 서버를 앞에두고 바운디드 컨텍스트들과 통신하게 해도 된다.

파사드 역할

 

4. 바운디드 컨텍스트 간 통합

 

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

모델간 변환이 복잡하다면 변환기를 둔다.

간접적인 방식은 메시지 큐를 활용한다.데이터 형식에 대한 협의 등이 필요

바운디드 시스템 기준에 따라 메시지 형태가 달라진다는 코드들. 큐를 제공하는쪽에 따라 달라진다. 제공하는 쪽 도메인에 따른다. ex) Risk?

MSA와 바운디드컨텍스트

개별 서비스를 독립된 프로세스로 실행하고, REST나 메시징으로 통신하는 구조로 가지고감.

MSA와 바운디드 컨텍스트가 잘어울린다.

 

 

5. 바운디드 컨텍스트 간 관계

BC는 어떻게든 연결되기 때문에 다양한 방식으로 관계를 맺는다.

흔한것은 한쪽에서 API를 제공하고 다른쪽에서 API 호출하는 관계.API를 제공하는 곳에 의존하게 됨.

상류와 하류로 구분하는데. 하류는 상류가 제공하는 API를 사용하고, 인터페이스가 바뀌면 영향을 받는다.

공개호스트 서비스라고 한다. ex) 검색

상류컴포넌트의 서비스는 상류 바운디드 컨텍스트의 도메인 모델을 사용한다.

하류 컴포넌트가 도메인 모델에 영향을 주지 않도록 완충 지대를 만들어야 한다.- 클라 sdk?

안티 코럽션 계층이라고 한다.

 

두 바운디드 컨텍스트가 같은 모델을 공유해서 중복 설계를 막기도한다. 공유 커널이라고 부름.

중복을 줄인다는 장점이 있지만, 밀접한 관계를 형성할수없으면 변경에 취약하다.

 

독립 방식은 서로 통합하지 않는 방식. 독립적으로 모델을 발전

통합에서 수동으로 이루어져야해서 한계가 있을 수 있고, 컨텍스트를 통합시켜주는 별도의 시스템이 필요할 수 있다.

 

6.컨텍스트 맵

개별 바운디드 컨텍스트에 매몰되면 전체를 보지 못할 수 있다. 비즈니스를 조망할수 있는 지도가 컨텍스트 맵.

경계가 명확하게 드러나고 어떤 관계를 맺고있는지 볼수있다는 장점 

오픈 호스트 서비스, 안티 코럽션 계층만 표시해도 전체관계 이해에 도움이 된다.

어떤 바운디드 컨텍스트에 집중할지 파악하는데도 도움이 된다. 정해진건 없다.

 

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

2.아키텍처 개요  (0) 2022.09.03
1.도메인 모델 시작하기  (0) 2022.08.29
Comments