Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions chap09/송영민.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# DDD 9장

### 9-1. 도메인 모델과 경계
- 한개의 모델로 모든 하위 도메인을 표현할 수는 없다.
- 하위 도메인마다 올바른 도메인 모델을 만들어야 한다.
- 이 모델들은 명확한 경계를 가져야 한다.
- 위와같이 문맥에 따른 경계를 "바운디드 컨텍스트"라고 한다.

### 9-2. 바운디드 컨텍스트
- 한개의 바운디드 컨텍스트는 논리적으로 한개의 모델을 갖는다.
- 경우에 따라(팀 구분 등) 두 하위 도메인을 하나의 바운디드 컨텍스트에서 구현하기도 한다.
- 이럴때 주의할 점은 하위 모델들이 섞이지 않도록 해야한다.
- 이럴 때 각 하위 모델(도메인)들이 각 패키지를 가지게 하면, 각 도메인별로 바운디드 컨텍스트를 가지게 할 수 있다.
- 같은 의미를 나타내는 개체이더라도 각 바운디드 컨텍스트가 갖는 도메인 모델은 다를 수 있다.

### 9-3. 바운디드 컨텍스트 구현
- 바운디드 컨텍스트는 도메인 기능 서빙에 필요한 모든 레이어를 구현한다.
- 각 바운디드 컨텍스트는 다른 아키텍쳐(MVC, Clean Architecture 등)로 설계할 수 있다.
- 구현 기술 역시 컨텍스트별로 다른 기술(WebMVC, Netty, MySQL, Redis)를 쓸 수 있다.
- 무조건 바운디드 컨텍스트가 UI계층을 가질 필요는 없다. (ui 서버를 두거나, json만 응답하거나)

### 9-4. 바운디드 컨텍스트 간 통합
- 여러 바운디드 컨텍스트의 통합이 필요한 경우가 있다. (카탈로그-추천 관계)
- 각 도메인 모델은 다를 것이다. 이때, 카탈로그의 모델을 기반으로 하는 상품 추천 기능을 필요로 할 것이다.
- 그걸 도메인 클래스로 만들고, 실제 경계간 통합 기술(restapi등)은 인프라 영역에 구현한다.
- 위와같이 직접 통합하는 방법보다, 메세징 큐 같은걸로 간접 통합을 할 수도 있다.
- 뭐 카탈로그 생성시 큐로 밀어넣고, 추천 시스템은 그걸 빨아서 추천 데이터를 업데이트 하는 식

### 9-5. 바운디드 컨텍스트 간 관계
- 의존 관계상 상류-하류 관계가 있을텐데, 서로간 잘 합의를 하고 개발을 해야 꼬이지 않는다.
- 상류-하류에서 하류가 여러개일 경우 여러 요구사항을 수용할 수 있는 API를 만들고 공개 호스트 서비스 형태로 구현할 수 있다.
- 상류 팀은 아래 모든 요구를 수용하는 단일 API를 만들어 공개하고, 하류 팀은 이를 이용해 구현한다.
- 하류 팀이 상류 팀 도메인 모델에 영향을 받지 않으려면, 이를 위한 "안티코럽션 계층"이 필요하다.
- 이는 위의 서비스 만들고 -> 인프라 계층에서 구현 하면서 모델 변환 처리를 통해 막을 수 있다.
- 두 바운디드 컨텍스트가 같은 모델을 공유할 경우 공유 커널(그냥 같은 도메인 모델 쓰기)를 쓸수 있지만, 밀접한 관계를 형성하지 못하면 부채가 될 수 있다.
- 독립 방식 관계는... 그냥 서로 통합하지 않겠다는 거다. 뭐 커머스-erp 연동을 시스템적으로 하는게 아니라 직원한테 이거 밀어넣어주세요~ 시키는거다.

### 9-6. 컨텍스트 맵
- 서로 바운디드 컨텍스트간의 관계를 표시한 지도이다.
- OHS(오픈 호스트 서비스)와 ACL(안티코럽션 계층)을 나타내며 연결한다.
- 따로 규칙이 있진 않고, 잘 나타내게 그리면 된다.