도메인 주도 설계 첫걸음 - 10장 휴리스틱 설계
범위
- [Part 3] 도메인 주도 설계 적용 실무 - 10장: 휴리스틱 설계
개념 정리
책에서 기억하고 싶은 내용
휴리스틱
- 완벽한 것을 보장하지는 않지만 당면한 목적에 충분할 만큼 경험에 기반한 규칙
- 휴리스틱을 사용하는 것은 수많은 단서에 내재된 노이즈를 무시하면서도 가장 중요한 단서에서 느껴지는 ‘압도하는 힘’에 집중하여 효과적으로 문제를 해경하는 접근법이다.
바운디드 컨텍스트
- 작은 바운디드 컨텍스트로 만들혀고 기능을 원하는 크기에 최적화해서 모델링하는 것보다는 그 반대로 하는 것이 훨씬 더 효과적이다.
- 모델의 어떤 기능이 포함하는 크기 그대로 바운디드 컨텍스트를 다루는 것이다.
- 일반 하위 도메인과 지원 하위 도메인은 모두 정형와되어 있고 변동성이 훨씬 적으므로 이 같은 휴리스틱은 주로 핵심 하위 도메인을 포함하는 바운디드 컨텍스트에 적용된다.
비즈니스 로직 구현 패턴
- 비지니스 로직의 적절한 구현 패턴을 선택하기 위한 효과적인 휴리스틱은 다음과 같은 질문을 해보는 것이다.
- 하위 도메인이 금전 또는 통화의 트랜잭션을 추적하거나, 일관된 감사 호그를 제공하거나, 또는 바즈니스에서 하위 도메인의 동작에 대한 심층적인 분석을 요청하였는가? 그렇다면 이벤트 소싱 도메인 모델을 적용한다. 그렇지 않다면
- 하위 도메인의 비즈느스 로직이 복잡한가? 그렇다면 도메인 모델을 구현한다. 그렇지 않다면
- 하위 도메인이 복잡한 자료구조를 포함하는가? 그렇다면 액티브 레코드 패턴을 사용한다. 그렇지 않다면
- 그것도 아니라면 트랜잭션 스크립트를 구현한다.
- 복잡한 비즈니스 로직과 간단한 비즈니스 로직의 차이점을 정의하는 데도 또 다른 휴리스틱을 사용할 수 있다.
- 일반적으로 복잡한 비즈니스 로직은 복잡한 비즈니스 규칙, 불변성, 알고리즘을 포함한다.
- 간단한 접근 방법은 주로 입력을 검증하는 것이다.
아키텍처 패턴
- 아키텍처 패턴이 의도한 비즈니스 로직 구현 패턴을 알면 쉽게 아키텍처 패턴을 선정할 수 있다.
- 이벤트 소싱 도메인 모델은 CQRS가 필요하다. 그렇지 않으면 시스템은 데이터 질의 옵션이 극심하게 제한되어 자신의 ID만으로 단일 인스턴스를 가져와야 한다.
- 도메인 모델은 포트와 어댑터 아키텍처가 필요하다. 계층형 아키텍처에서는 영속성에 대한 고려 없이 애그리게이트와 밸류 오브젝트를 만들기가 어렵다.
- 액티브 레코드 패턴은 애플리케이션(서비스) 계층을 추가한 계층형 아키텍처와 잘 어울린다. 이는 액티브 레코드를 제어하는 로직을 위한 것이다.
- 트랜잭션 스크립트 패턴은 세 개의 계층만으로 이어진 최소한의 계층현 아키텍처를 적용하여 구현할 수 있다.
- 휴리스틱의 유일한 예외는 CQRS 패턴이다. CQRS는 이벤트 소싱 도메인 모델에 도움이 될 뿐만 아니라 하위 도메인이 여러 영속 모델에 있는 데이터를 표현할 필요가 있는 경우에도 도움이 된다.
테스트 전략
- 비즈니스 구현 패턴과 아키텍처 패턴의 모든 지식은 코드베이스의 테스트 전략을 선택할 때 휴리스틱으로써 활용할 수 있다.
피라미드형 테스트
- 애그리게이트와 밸류 오브젝트 도메인 모델 패턴을 잘 지원한다.
- 두 도메인 모델 패턴은 모두 사실살 비즈니스 로직을 테스트하는 완벽한 단위다.
다이아몬드형 테스트
- 액티브 레코드 패턴이 사용되면 시스템의 비즈니스 로직은 서비스 계층과 비즈니스 로직 계층에 흩어진다.
- 그러므로, 두 계층의 연동에 중점을 둔다면 다이아몬드형 테스트가 더 효과적인 선택이다.
역전된 피라미드형 테스트
- 트랜젝션 스트립트 패턴을 구현한 코드베이스에 가장 잘 어울린다.
- 비즈니스 로직이 간단하고 계층의 수가 적으므로 이 테스트 전략이 시스템의 엔드-구-엔드 흐름을 건증하는 데 더 효과적이다.
전술적 설계 의사결정 트리
- 하위 도메인의 유형을 식별하고 의사결정 트리를 참조하는 것은 필수적인 설계 의사결정을 위한 시작점이다.
- 즉, 고정된 규칙이 하진 휴리스틱을 반복하는 것이 중요하다.
- 휴리스틱이 모든 경우에 100% 정확하게 들어 맞게 하려는 것이 아님에 유의하자.
- 특정 상황에 까라 효과적인 접근 방법은 달라진다.
- 그러므로 그램 10-7에 표현한 중요한 의사결정 방식을 대체하는 것이 아닌 가이드 규칙으로만 사용하자.
- 당면한 문제에 더 잘 맞는 다른 휴리스틱을 찾는다면 다이드 원칙을 개선하거나 모두 함꼐 자신만의 의사 결정 트리를 만들도록 한다.
결론
- 기술적인 의사결정을 내리는 데 비즈니스 도메인 지식과 그 하위 도메인을 적용하는 방법
This post is licensed under CC BY 4.0 by the author.