Architecture - 도메인 모델링의 핵심 구성 요소와 전술적 접근의 중요성


DDD 의 세계에서 명확한 개념 모델링은 소프트웨어 품질을 결정짓는 핵심이다.
이 포스트에서는 엔티티, 애그리거트, 도메인 서비스와 같은 전술적 패턴을 중심으로, 어떻게 명확하고 풍부한 도메인 모델을 구축할 수 있는지 살펴본다.

좋은 모델은 명확한 경계와 언어에서 시작된다.
전술적 모델링은 단지 기술적 분류가 아니라, 비즈니스 개념을 명확히 표현하고 구현과 연결하는 가장 강력한 도구이다.
이 모델링 전략을 통해 우리는 아래를 달성할 수 있다.

  • 팀원 간 공통된 이해 언어 형성
  • 비즈니스 변경에 민감하게 유연하게 대응
  • 소스코드 자체가 비즈니스 설명서처럼 작동

<도메인 모델링에서 전술적 패턴이 필요한 이유>
데이터 자체는 의미를 지니지 않는다.
데이터가 실제 가치를 가지려면, 그것을 어떻게 해석하고 처리할 지 아는 구조와 로직이 필요하다.
이를 가능하게 해주는 것이 바로 전술적 모델링(Tactical Modeling)이다.
전술적 모델링은 소프트웨어 내부의 구현 구조를 어떻게 설계할지에 관한 방법론으로, 도메인 지식을 코드로 명확히 표현하는데 핵심 역할을 한다.

<언어의 명확성과 표현력>
구현보다 먼저 언어를 설계하는 것이 핵심이다.

  • 문제점: 명확하지 않은 명사 중심 모델은 오히려 복잡성을 증가시킴
  • 해결 방향
    • 명사 + 동사 중심의 풍부한 표현
    • 비즈니스 행동을 그대로 드러내는 함수명과 모델 구성
    • 구현보다 도메인 언어(유비쿼터스 언어)에 초점

<전술적 모델링의 실천 전략>

  • 전술적 구성요소 사용
    • 엔티티, 애그리거트, 도메인 서비스 등을 적절히 배치
  • 행위 중심 모델 설계
    • approve(), cancelOrder() 와 같은 도메인 행위 강조
  • 모호한 명사 제거
  • 도메인 언어 사용
    • Data, Info 와 같은 불명확한 이름 지양
  • 작은 구성에서 시작
    • 큰 시스템보다 핵심 도메인(핵심 흐름)부터 작게 모델링

목차


1. 엔티티: 고유성을 가진 객체

4. 엔티티와 밸류 를 참고하세요.


2. 값 객체(밸류 타입, 밸류 오브젝트, Value Object)

4. 엔티티와 밸류 를 참고하세요.


3. 애그리거트: 일관성을 보장하는 경계

4.2. 애그리거트 (Aggregate) 를 참고하세요.


4. 도메인 서비스: 객체에 속하지 않는 비즈니스 로직

DDD - 도메인 서비스 를 참고하세요.


4. 함수형 동작: 명확한 입출력 기반 로직

1.1.2.1. 함수형 동작: 예측 가능한 도메인 로직을 위한 순수 함수 설계 을 참고하세요.


정리하며..

  • 엔티티는 고유하게 식별되며, 개별 상태 및 생명주기를 갖는 사물을 개념적인 전체로 모델링할 때 사용
  • 밸류 타입은 하나 이상의 데이터 속성/프로퍼티를 조합해 캡슐화하고 부수 효과가 없는 동작을 제공함
    • 밸류 타입은 불변임
    • 밸류 타입은 고유하게 식별되지 않으며, 밸류 타입의 타입 및 모든 속성/프로퍼티의 조합에 의해서만 식별 가능함
  • 애그리거트는 하나 이상의 엔티티 또는 밸류 타입으로 구성되는 전체 개념을 모델링함
    • 부모 엔티티는 트랜잭션 일관성의 경계를 나타냄
  • 도메인 서비스는 자체 상태를 저장하지 않으며, 엔티티 또는 밸류 타입에 포함되기 어려운 비즈니스 연산을 모델링할 때 사용함
  • 함수형 동작은 순수 함수에 비즈니스 규칙을 포함하지만, 순수 함수형 프로그래밍 언어를 사용할 필요는 없음
    • 자바와 같은 현대의 객체 지향 언어를 사용해 순수 함수를 구현할 수 있음

참고 사이트 & 함께 보면 좋은 사이트

본 포스트는 반 버논, 토마스 야스쿨라 저자의 전략적 모놀리스와 마이크로서비스를 기반으로 스터디하며 정리한 내용들입니다.






© 2020.08. by assu10

Powered by assu10