1) 바운디드 컨텍스트란?
- 바운디드 컨텍스트는 모델의 경계를 결정하며
한 개의 바운디드 컨텍스트는 논리적으로 한 개의 모델을 갖는다.
바운디드 컨텍스트는 용어를 기준으로 구분한다.
카탈로그 컨텍스트와 재고 컨텍스트는 서로 다른 용어를 사용하므로
이 용어를 기준으로 컨텍스트를 분리할 수 있다.
- 또한, 바운디드 컨텍스트는 실제로 사용자에게 기능을 제공하는 물리적 시스템으로
도메인 모델은 이 바운디드 컨텍스트 안에서 도메인을 구현한다.
- 이상적으로 하위 도메인과 바운디드 컨텍스트가 일대일 관계를 가지면 좋겠지만
현실은 그렇지 않을 때가 많다.
바운디드 컨텍스트는 기업의 팀 조직 구조에 따라 결정되기도 한다.
- 예를 들어, 주문 하위 도메인이라도 주문을 처리하는 팀과
복잡한 결제 금액 계산 로직을 구현하는 팀이 따로 있다고 해보자.
이 경우 주문 하위 도메인에 주문 바운디드 컨텍스트와
결제 금액 계산 바운디드 컨텍스트가 존재하게 된다.
- 용어를 명확하게 구분하지 못해 두 하위 도메인을
하나의 바운디드 컨텍스트에서 구현하기도 하는데,
예를 들어 카탈로그와 재고 관리가 아직 명확하게 구분되지 않은 경우
두 하위 도메인을 하나의 바운디드 컨텍스트에서 구현하기도 한다.
- 규모가 작은 기업은 전체 시스템을 한 개 팀에서 구현할 때도 있다.
예를 들어, 소규모 쇼핑몰은 한 개의 웹 애플리케이션으로
온라인 쇼핑을 서비스하며 하나의 시스템에서 회원, 카탈로그, 재고, 구매, 결제와 관련된
모든 기능을 제공한다.
즉, 여러 하위 도메인을 한 개의 바운디드 컨텍스트에서 구현한다.
- 여러 하위 도메인을 하나의 바운디드 컨텍스트에서 개발할 때 주의할 점은
하위 도메인의 모델이 섞이지 않도록 하는 것이다.
한 프로젝트에 각 하위 도메인의 모델이 위치하면
아무래도 전체 하위 도메인을 위한 단일 모델을 만들고 싶은 유혹에 빠지기 쉽다.
- 이런 유혹에 걸려들면 결과적으로 도메인 모델이 개별 하위 도메인을 제대로 반영하지 못해서
하위 도메인별로 기능을 확장하기 어렵게 되고
이는 서비스 경쟁력을 떨어뜨리는 원인이 된다.
- 비록 한 개의 바운디드 컨텍스트가 여러 하위 도메인을 포함하더라도
하위 도메인마다 구분되는 패키지를 갖도록 구현해야 하며,
이렇게 함으로써 하위 도메인을 위한 모델이 서로 뒤섞이지 않고
하위 도메인마다 바운디드 컨텍스트를 갖는 효과를 낼 수 있다.
- 바운디드 컨텍스트는 도메인 모델을 구분하는 경계가 되기 때문에
바운디드 컨텍스트는 구현하는 하위 도메인에 알맞은 모델을 포함한다.
같은 사용자라 하더라도 주문 바운디드 컨텍스트와 회원 바운디드 컨텍스트가 갖는
모델이 달라진다.
- 같은 상품이라도 카탈로그 바운디드 컨텍스트의 Product와
재고 바운디드 컨텍스트의 Product는 각 컨텍스트에 맞는 모델을 갖는다.
- 따라서 회원의 Member는 애그리거트 루트이지만, 주문의 Orderer는 밸류가 되고,
카탈로그의 Product는 상품이 속할 Category와 연관을 갖지만,
재고의 Product는 카탈로그의 Category와 연관을 맺지 않는다.
'도메인 주도 개발 시작하기' 카테고리의 다른 글
[도메인 주도 개발 시작하기] 애그리거트의 영속성 전파 (0) | 2025.01.14 |
---|---|
[도메인 주도 개발 시작하기] 애그리거트 로딩 전략 (0) | 2025.01.14 |
[도메인 주도 개발 시작하기] 애그리거트 (0) | 2025.01.07 |
[도메인 주도 개발 시작하기] 엔티티와 밸류 (0) | 2025.01.07 |
[도메인 주도 개발 시작하기] 도메인 모델 패턴 (0) | 2025.01.07 |