도메인 모델과 바운디드 컨텍스트
바운디드 컨텍스트
- 등장 배경: 한개의 모델로 여러 하위 도메인을 모두 표현하려고 시도하면 오히려 모든 하위 도메인에 맞지 않는 모델을 만들게 된다.
- 모델은 특정한 컨텍스트(문맥) 하에서 완전한 의미를 갖는다. 같은 제품이라도 카탈로그 컨텍스트와 재고 컨텍스트에서 의미가 서로 다르다. 이렇게 구분되는 경계를 갖는 컨텍스트를 DDD에서는 바운디드 컨텍스트라고 부른다.
- 바운디드 컨텍스트는 모델의 경계를 결정하며 한 개의 바운디드 컨텍스트는 논리적으로 한 개의 모델을 갖는다.
- 여러 하위 도메인을 하나의 바운디드 컨텍스트에서 개발할 때 주의할 점은 하위 도메인의 모델이 섞이지 않도록 하는 것이다.
- 물리적인 바운디드 컨텍스트가 하나일 경우 내부적으로 패키지를 활용해서 논리적으로 바운디드 컨텍스트를 만들 수 있다.
- 바운디드 컨텍스트는 도메인 기능을 사용자에게 제공하는 데 필요한 표현 영역, 응용 서비스, 인프라스트럭처 영역을 모두 포함 한다.
- 바운디드 컨텍스트는 도메인 기능을 제공하는 데 필요한 모든 요소를 포함한다.
- 각 바운디드 컨텍스트는 서로 다른 구현 기술을 사용할 수 있다.
바운디드 컨텍스트들의 통합 방식
직접 통합 방식
두 바운디드 컨텍스트가 직접적으로 통신하는 방식이다. 예를 들어, 한 바운디드 컨텍스트가 다른 바운디드 컨텍스트의 메서드를 호출하거나, 두 바운디드 컨텍스트가 공유 데이터에 접근하는 경우 직접 통합 방식을 사용할 수 있다.
-
장점
- 통합이 쉽다. 두 바운디드 컨텍스트가 직접적으로 통신하므로, 통합을 위해 별도의 작업이 필요하지 않다.
- 효율적이다. 두 바운디드 컨텍스트가 직접적으로 통신하므로, 데이터 전송에 소요되는 시간이 단축된다.
-
단점
- 바운디드 컨텍스트의 결합도가 높아진다. 두 바운디드 컨텍스트가 직접적으로 통신하기 때문에 한 바운디드 컨텍스트의 변경이 다른 바운디드 컨텍스트에 영향을 미칠 수 있다.
- 확장성이 떨어진다. 두 바운디드 컨텍스트가 직접적으로 통신하므로, 새로운 바운디드 컨텍스트를 추가하기 어렵다.
간접 통합 방식
간접적인 통합 방식은 두 바운디드 컨텍스트가 중간자(mediator)를 통해 통신하는 방식이다. 중간자는 두 바운디드 컨텍스트 간의 통신을 중재하는 역할을 한다.
-
장점
- 바운디드 컨텍스트의 결합도가 낮아진다. 중간자가 두 바운디드 컨텍스트 간의 직접적인 통신을 중재하므로, 한 바운디드 컨텍스트의 변경이 다른 바운디드 컨텍스트에 영향을 미치지 않는다.
- 확장성이 좋다. 새로운 바운디드 컨텍스트를 추가하기 쉽다.
-
단점
- 통합이 어렵다. 중간자를 구현하고 두 바운디드 컨텍스트를 중간자와 통합하기 위해서는 별도의 작업이 필요하다.
- 효율성이 떨어진다. 중간자를 통해 데이터를 전송하므로, 데이터 전송에 소요되는 시간이 증가한다.