본문 바로가기

개발/[스터디] 도메인주도설계

도메인 주도 설계 03. 도메인 복잡성 관리-04. 바운디드 컨텍스트 연동

03. 도메인 복잡성 관리

유비쿼터스 언어의 비일관성

업무 부서에 따라 동일한 언어를 다르게 쓴다. 어떻게 모델링할까?

  • 과거에 시도되었던 방법은 대표적으로 두가지가 있다.
    • 모든 상황을 대응할 수 있는 복잡한 단일 모델
    • 접두사를 붙여 사용하기 (예. 마케팅 리드, 영업 리드)
      • 실제 대화에서는 아무도 접두사를 붙여 부르지 않는다.

해결책: 바운디드 컨텍스트(Bounded Context)

  • 영업이라는 바운디드 컨텍스트와 마케팅이라는 바운디드 컨텍스트를 도출할 수 있다.
  • 하나의 바운디드 컨텍스트의 유비쿼터스 언어는 다른 바운디드 컨텍스트의 범위에는 완전히 관련이 없다. 
    • 유비쿼터스 언어의 용어, 원칙, 비즈니스 규칙은 해당 바운디드 컨텍스트 내에서만 유의미하다.

바운디드 컨텍스트의 범위

큰 유비쿼터스 언어를 관리하기 쉬운 작은 도메인으로 나누는 것은 도움이 되지만, 바운디드 컨텍스트를 작게 만들기 위해 노력하는것은 역효과를 낳을 수도 있다. 더 작게 만들수록 설게를 통합하는 오버헤드가 커진다.

 

하위도메인 vs 바운디드 컨텍스트 

  • 하위 도메인은 발견하는 것이고, 바운디드 컨텍스트는 설계하는것이다.
    • 비즈니스 도메인을 세밀하게 분석하여 하위도메인을 발견한다.
    • 모델의 경계를 뚜렷히 세워,  비즈니스 문제를 더 작고 관리 가능한 문제로 만든다.
  • 소유권 경계
    • 바운디드 컨텍스트는 한 팀에 의해 관리 되어야한다.
      • cf. 두 팀이 하나의 바운디드 컨텍스트를 관리할 수 는 없다.
      • cf. 한 팀이 여러개의 바운디드 컨텍스트를 관리하는 것은 가능하다.

04. 바운디드 컨텍스트 연동

바운디드 컨텍스트 연동방식에는

  • 파트너십
  • 공유커널
  • 순응주의자
  • 충돌방지게층
  • 오픈 호스트서비스
  • 분리형 노선

이 있다.

ch1-4 질문사항

1. 거킨테스트를 실무에서 작성한 케이스는 어떤 것이 있을까? BDD 스타일로 테스트를 작성하면 거킨테스트인가?

2. 바운디드 컨텍스트를 지나치게 나누었던 경험은 어떤게 있을까?

3. 파트너십 개발 예시는 어떤게 있을까? chatGPT는 확장성 없이 개발하는게 ad hoc 방식이라는데.

4. 개발할때 이미 개발된 API를 가공하여 사용할 경우, 충돌 방지 계층에 해당할까?