DDDQ 5장 모델 무결성 보존

DDDQ(Domain Driven Design Quickly) - 도메인 주도 설계란 무엇인가? 라는 책의 간단 요약 정리

컨텍스트 기반 다양한 협업 상황에서의 모델 관리

모델 내부의 일관성. 즉 통일성(unification)을 유지해야함

  • 하지만 현실적으로 엔터프라이즈 어플리케이션을 하나의 모델로 통합하는 것은 거의 불가능
  • 고로. 의도적으로 여러 개의 모델로 분할 관리 (각 조직별로)
  • 아래 그림과 같은 패턴으로 모델의 무결성을 유지하도록 노력해야한다.

context map

이미지출처 : https://commons.wikimedia.org/wiki/File:Maintaining_Model_Integrity.png

분할된 컨텍스트

적절한 모델과 적절한 컨텍스트 범위를 정해서 분할 관리한다 일반적으로 하나의 모델은 하나의 팀에 할당하는게 좋다 모델의 범위를 정하고 컨텍스트 간의 경계를 확실하게 설정한 다음 모델의 통합 상태를 유지해야 한다.

분할된 컨텍스트는 발전하는 모델에 담길 논리적인 프레임 - 모듈이 아님

예시

  • 전자상거래 어플리케이션
  • 리포팅 어플리케이션

각각으로 분리된 모델을 만들고 독립적인 어플리케이션으로 구축한다. 둘 사이의 인터페이스만 확실하면 문제되지 않는다.

지속적인 통합

아무리 컨텍스트를 분리한다고 할지라도 통합은 필수적으로 필요하다. 빌드(테스트)자동화 등을 이용해서 연관된 컨텍스트 간 인터페이스에 대해서 상호간 테스트와 통합을 지속 해야한다. 작업 편의를 위해 컨텍스트로 나누지만 결국은 하나의 모델이기 때문이다

컨텍스트 맵

분할된 컨텍스트와 그들 간 관계를 표현한 문서(다이어그램)

공유커널

컨텍스트 간 교집합(공유지점)

재사용성을 위한 중복코드 관리지점

상호 컨텍스트 담당 간 공유와 테스트가 필수적으로 요구됨

고객-공급자(customer-supplier)

한 컨텍스트(고객)가 다른 하나의 컨텍스트(공급자)에 완전히 의존하는 관계

상호 컨텍스트 간 인터페이스는 정교하게 정의해야하고, 강력한 테스트케이스가 존재해야함(안전장치)

순응

고객이 공급자에 완벽하게 순응??

변질 방지 레이어

컨텍스트 간 상호 작용 시 다른 도메인과 언어 간 번역 제공

분할 방식

오픈 호스트 서비스

openapi 방식

증류

핵심개념을 분리하고 그것에 집중

정제와 지속적인 리펙토링을 통해서 핵심도메인을 한층 더 명확하게 한다.

서브도메인(증류부산물) 구현 방법

  • 상용솔루션 : 의존성 이슈 (버그픽스나 업데이트 시)
  • 아웃소싱 : 통합 시 불편함
  • 기존모델 : 손쉬운 해결안
  • 사내개발 : 통합은 편하지만 유지보수 비용 발생

MJ

MJ
Backend 개발자 사람입니다. 어플리케이션의 복잡성을 다루는 DDD에 관심이 많습니다. 어제보다 더 나은 개발자가 되려고 항상 노력합니다.

spring boot 2.4.x 에서 openfeign + hystrix 통합하기

spring-boot 2.4.x spring-cloud 2020.x 의존성 상황에서 feign.hystrix.enabled=true가 안됨`feign.circuitbreaker.enabled=true` 로 바꿔보지만 openfeign과 hystr...… Continue reading

IDDD 14장. 애플리케이션

Published on June 19, 2018