Home 도메인 주도 설계 첫걸음 - 10장 휴리스틱 설계
Post
Cancel

도메인 주도 설계 첫걸음 - 10장 휴리스틱 설계

범위

  • [Part 3] 도메인 주도 설계 적용 실무 - 10장: 휴리스틱 설계

개념 정리

책에서 기억하고 싶은 내용

휴리스틱

  • 완벽한 것을 보장하지는 않지만 당면한 목적에 충분할 만큼 경험에 기반한 규칙
  • 휴리스틱을 사용하는 것은 수많은 단서에 내재된 노이즈를 무시하면서도 가장 중요한 단서에서 느껴지는 ‘압도하는 힘’에 집중하여 효과적으로 문제를 해경하는 접근법이다.

바운디드 컨텍스트

  • 작은 바운디드 컨텍스트로 만들혀고 기능을 원하는 크기에 최적화해서 모델링하는 것보다는 그 반대로 하는 것이 훨씬 더 효과적이다.
  • 모델의 어떤 기능이 포함하는 크기 그대로 바운디드 컨텍스트를 다루는 것이다.
  • 일반 하위 도메인과 지원 하위 도메인은 모두 정형와되어 있고 변동성이 훨씬 적으므로 이 같은 휴리스틱은 주로 핵심 하위 도메인을 포함하는 바운디드 컨텍스트에 적용된다.

비즈니스 로직 구현 패턴

  • 비지니스 로직의 적절한 구현 패턴을 선택하기 위한 효과적인 휴리스틱은 다음과 같은 질문을 해보는 것이다.
    1. 하위 도메인이 금전 또는 통화의 트랜잭션을 추적하거나, 일관된 감사 호그를 제공하거나, 또는 바즈니스에서 하위 도메인의 동작에 대한 심층적인 분석을 요청하였는가? 그렇다면 이벤트 소싱 도메인 모델을 적용한다. 그렇지 않다면
    2. 하위 도메인의 비즈느스 로직이 복잡한가? 그렇다면 도메인 모델을 구현한다. 그렇지 않다면
    3. 하위 도메인이 복잡한 자료구조를 포함하는가? 그렇다면 액티브 레코드 패턴을 사용한다. 그렇지 않다면
    4. 그것도 아니라면 트랜잭션 스크립트를 구현한다.

    그림 10-3

  • 복잡한 비즈니스 로직과 간단한 비즈니스 로직의 차이점을 정의하는 데도 또 다른 휴리스틱을 사용할 수 있다.
    • 일반적으로 복잡한 비즈니스 로직은 복잡한 비즈니스 규칙, 불변성, 알고리즘을 포함한다.
    • 간단한 접근 방법은 주로 입력을 검증하는 것이다.

아키텍처 패턴

  • 아키텍처 패턴이 의도한 비즈니스 로직 구현 패턴을 알면 쉽게 아키텍처 패턴을 선정할 수 있다.
    • 이벤트 소싱 도메인 모델은 CQRS가 필요하다. 그렇지 않으면 시스템은 데이터 질의 옵션이 극심하게 제한되어 자신의 ID만으로 단일 인스턴스를 가져와야 한다.
    • 도메인 모델은 포트와 어댑터 아키텍처가 필요하다. 계층형 아키텍처에서는 영속성에 대한 고려 없이 애그리게이트와 밸류 오브젝트를 만들기가 어렵다.
    • 액티브 레코드 패턴은 애플리케이션(서비스) 계층을 추가한 계층형 아키텍처와 잘 어울린다. 이는 액티브 레코드를 제어하는 로직을 위한 것이다.
    • 트랜잭션 스크립트 패턴은 세 개의 계층만으로 이어진 최소한의 계층현 아키텍처를 적용하여 구현할 수 있다.
  • 휴리스틱의 유일한 예외는 CQRS 패턴이다. CQRS는 이벤트 소싱 도메인 모델에 도움이 될 뿐만 아니라 하위 도메인이 여러 영속 모델에 있는 데이터를 표현할 필요가 있는 경우에도 도움이 된다.

그림 10-4

테스트 전략

  • 비즈니스 구현 패턴과 아키텍처 패턴의 모든 지식은 코드베이스의 테스트 전략을 선택할 때 휴리스틱으로써 활용할 수 있다.

그림 10-5

그림 10-6

피라미드형 테스트

  • 애그리게이트와 밸류 오브젝트 도메인 모델 패턴을 잘 지원한다.
  • 두 도메인 모델 패턴은 모두 사실살 비즈니스 로직을 테스트하는 완벽한 단위다.

다이아몬드형 테스트

  • 액티브 레코드 패턴이 사용되면 시스템의 비즈니스 로직은 서비스 계층과 비즈니스 로직 계층에 흩어진다.
  • 그러므로, 두 계층의 연동에 중점을 둔다면 다이아몬드형 테스트가 더 효과적인 선택이다.

역전된 피라미드형 테스트

  • 트랜젝션 스트립트 패턴을 구현한 코드베이스에 가장 잘 어울린다.
  • 비즈니스 로직이 간단하고 계층의 수가 적으므로 이 테스트 전략이 시스템의 엔드-구-엔드 흐름을 건증하는 데 더 효과적이다.

전술적 설계 의사결정 트리

그림 10-7

  • 하위 도메인의 유형을 식별하고 의사결정 트리를 참조하는 것은 필수적인 설계 의사결정을 위한 시작점이다.
  • 즉, 고정된 규칙이 하진 휴리스틱을 반복하는 것이 중요하다.
  • 휴리스틱이 모든 경우에 100% 정확하게 들어 맞게 하려는 것이 아님에 유의하자.
  • 특정 상황에 까라 효과적인 접근 방법은 달라진다.
  • 그러므로 그램 10-7에 표현한 중요한 의사결정 방식을 대체하는 것이 아닌 가이드 규칙으로만 사용하자.
  • 당면한 문제에 더 잘 맞는 다른 휴리스틱을 찾는다면 다이드 원칙을 개선하거나 모두 함꼐 자신만의 의사 결정 트리를 만들도록 한다.

결론

  • 기술적인 의사결정을 내리는 데 비즈니스 도메인 지식과 그 하위 도메인을 적용하는 방법
This post is licensed under CC BY 4.0 by the author.

도메인 주도 설계 첫걸음 - 09장 커뮤니케이션 패턴

도메인 주도 설계 첫걸음 - 11장 진화하는 설계 의사결정