[DDD START] 9장 도메인 모델과 바운디드 컨텍스트

David Lee·2023년 12월 20일
0

DDD Start

목록 보기
9/12
post-thumbnail

이 포스트는 📔 도메인 주도 개발 시작하기 책을 읽고 공부한 내용을 정리한 포스트입니다.

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

9.1 도메인 모델과 경계

도메인을 완벽하게 표현하는 하나의 단일 도메인 모델을 만들 수 있을까? 정답은 아니다 이다. 하나의 도메인은 다시 여러 하위 도메인으로 구분되기 때문에 한 개의 모델로 여러 하위 도메인을 모두 표현하려고 시도하면 오히려 모든 하위 도메인에 맞지 않는 모델이 만들어진다.

올바른 도메인 모댈의 개발을 위해서는 하위 도메인마다 모델을 생성해야 한다. 하위 도메인의 모델은 서로의 역할이 섞이기 시작하면 의미가 약해지고 의존이 서로 얽히기 때문에 각 모델은 명시적으로 구분되는 경계를 가져서 하위 도메인 별로 다르게 발전하는 요구사항을 모델에 반영할 수 있도록 한다.

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

9.2 바운디드 컨텍스트

바운디드 컨텍스트는 모델의 경계를 결정하며 한 개의 바운디드 컨텍스트는 논리적으로 한 개의 모델을 갖는다. 바운디드 컨텍스트의 구분 기준은 '용어'로 사용하는 도메인 용어를 기준으로 컨텍스트를 분리할 수 있다. 그렇다면 바운디드 컨텍스트는 그저 경계를 결정하기 위한 논리적인 개념일까? 아니다. 바운디드 컨텍스트는 실제 사용자에게 기능을 제공하는 물리적 시스템으로 도메인 모델은 이 경계 안에서 도메인을 구현한다.

이상적인 바운디드 컨텍스트는 하나의 하위 도메인과 일대일 관계를 갖지만 개발 과정 내에서 이유로 하나 이상의 하위 도메인을 하나의 바운디드 컨텍스트에서 개발하는 경우도 존재한다.

바운디드 컨텍스트는 도메인 모델을 구분하는 경계가 되므로, 구현하는 하위 도메인에 알맞는 모델을 포함한다.

9.3 바운디드 컨텍스트 구현

그럼 바운디드 컨텍스트를 구현할 때 어떤 것들을 포함해야 할까? 바운디드 컨텍스트는 도메인 기능을 사용자에게 제공하는 데 필요한 표현 영역, 응용 서비스, 인프라스트럭처 영역을 모두 포함한다.

여기서 주의해야 할 점은 모든 바운디드 컨텍스트를 반드시 도메인 주도로 개발할 필요는 없다는 것이다. DAO와 데이터 중심의 밸류 객체를 기반으로한 바운디드 컨텍스트를 활용해도 되며, 위 둘을 모두 혼합한 바운디드 컨텍스트도 사용할 수 있다.

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

개발을 진행하면서 두 바운디드 컨텍스트 간 통합이 발생하는 경우가 있다.

직접적인 호출(API)을 활용해서 기능을 구현함으로써 바운디드 컨텍스트 간 통합이 발생하는 경우도 존재하지만, 메시지 큐 등을 활용한 간접적인 호출 방식으로도 기능 구현안에 필요한 내용을 컨텍스트간 전달함으로써 통합할 수 있다.

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

바운디드 컨텍스트간의 관계는 어떤식으로 형성될까? 가장 흔한 관계는 API 제공 및 호출 방식이다. REST API로 API를 제공하면 사용하는 API를 사용하는 바운디드 컨텍스트는 제공하는 바운디드 컨텍스트에 대해 의존하게 된다.

이 때 제공하는 바운디드 컨텍스트를 상류 컴포넌트, 제공받는 바운디드 컨텍스트를 하류 컴포넌트라고 하는데 상류 컴포넌트는 일종의 서비스 공급자 역할을 하며 하류 컴포넌트는 고객 역할을 한다.

상류 컴포넌트의 서비스는 상류 바운디드 컨텍스트 도메인 모델을 따르는데, 하류 컴포넌트는 위 모델의 영향을 받지 않도록 보호해주는 완충 지대(안티 코럽션)가 필요하다.

두 바운디드 컨텍스트가 같은 모델을 공유하는 경우 이 모델을 공유 커널이라고 부르는데, 공유 커널은 모델의 중복을 줄여준다는 장점을 갖고 있지만 개발 과정에서 두 모델 모두 고려하여 공유 커널을 개발해야한다는 단점이 있다.

독립 방식은 바운디드 컨텍스트를 통합하지 않고 독립적으로 모델을 발전시키는 방식으로 통합 과정을 수동으로 진행하는 방식이다. 수동 방식도 나쁜 방식은 아니지만 규모가 커진다면 수동에는 한계가 존재하므로 외부 통합 시스템을 활용하여 수동 통합 방식을 대신할 수 있다.

9.6 컨텍스트 맵

각각 바운디드 컨텍스트에만 몰두하게 된다면 전체를 고려하지 못하게 되는 경우가 발생한다. 이때 전체를 볼 수 있는 미니맵 역할을 해주는 것이 바로 컨텍스트 맵이다.

컨텍스트 맵은 시스템의 전체 구조를 보여줌으로써 하위 도메인과 일치하지 않는 바운디드 컨텍스트를 찾아 도메인에 맞게 조절하고 어떤 바운디드 컨텍스트에 집중할지 파악할 수 있게 하는데 도움을 준다.

profile
쌓아가기

0개의 댓글

관련 채용 정보