Architecture - 도메인 모델링의 핵심 구성 요소와 전술적 접근의 중요성
in DEV on Architecture DDD Entity Valueobject Aggregate Domainservice
DDD 의 세계에서 명확한 개념 모델링은 소프트웨어 품질을 결정짓는 핵심이다.
이 포스트에서는 엔티티, 애그리거트, 도메인 서비스와 같은 전술적 패턴을 중심으로, 어떻게 명확하고 풍부한 도메인 모델을 구축할 수 있는지 살펴본다.
좋은 모델은 명확한 경계와 언어에서 시작된다.
전술적 모델링은 단지 기술적 분류가 아니라, 비즈니스 개념을 명확히 표현하고 구현과 연결하는 가장 강력한 도구이다.
이 모델링 전략을 통해 우리는 아래를 달성할 수 있다.
- 팀원 간 공통된 이해 언어 형성
- 비즈니스 변경에 민감하게 유연하게 대응
- 소스코드 자체가 비즈니스 설명서처럼 작동
<도메인 모델링에서 전술적 패턴이 필요한 이유>
데이터 자체는 의미를 지니지 않는다.
데이터가 실제 가치를 가지려면, 그것을 어떻게 해석하고 처리할지 아는 구조와 로직이 필요하다.
이를 가능하게 해주는 것이 바로 전술적 모델링(Tactical Modeling)이다.
전술적 모델링은 소프트웨어 내부의 구현 구조를 어떻게 설계할지에 관한 방법론으로, 도메인 지식을 코드로 명확히 표현하는데 핵심 역할을 한다.
<언어의 명확성과 표현력>
구현보다 먼저 언어를 설계하는 것이 핵심이다.
- 문제점: 명확하지 않은 명사 중심 모델은 오히려 복잡성을 증가시킴
- 해결 방향
- 명사 + 동사 중심의 풍부한 표현
- 비즈니스 행동을 그대로 드러내는 함수명과 모델 구성
- 구현보다 도메인 언어(유비쿼터스 언어)에 초점
<전술적 모델링의 실천 전략>
- 전술적 구성요소 사용
- 엔티티, 애그리거트, 도메인 서비스 등을 적절히 배치
- 행위 중심 모델 설계
- approve(), cancelOrder() 와 같은 도메인 행위 강조
- 모호한 명사 제거
- 도메인 언어 사용
- Data, Info 와 같은 불명확한 이름 지양
- 작은 구성에서 시작
- 큰 시스템보다 핵심 도메인(핵심 흐름)부터 작게 모델링
- 1. 엔티티: 고유성을 가진 객체
- 2. 값 객체(밸류 타입, 밸류 오브젝트, Value Object)
- 3. 애그리거트: 일관성을 보장하는 경계
- 4. 도메인 서비스: 객체에 속하지 않는 비즈니스 로직
- 4. 함수형 동작: 명확한 입출력 기반 로직
- 정리하며..
- 참고 사이트 & 함께 보면 좋은 사이트
1. 엔티티: 고유성을 가진 객체
4. 엔티티와 밸류 를 참고하세요.
2. 값 객체(밸류 타입, 밸류 오브젝트, Value Object)
4. 엔티티와 밸류 를 참고하세요.
3. 애그리거트: 일관성을 보장하는 경계
4.2. 애그리거트 (Aggregate) 를 참고하세요.
4. 도메인 서비스: 객체에 속하지 않는 비즈니스 로직
DDD - 도메인 서비스 를 참고하세요.
4. 함수형 동작: 명확한 입출력 기반 로직
정리하며..
- 엔티티는 고유하게 식별되며, 개별 상태 및 생명주기를 갖는 사물을 개념적인 전체로 모델링할 때 사용
- 밸류 타입은 하나 이상의 데이터 속성/프로퍼티를 조합해 캡슐화하고 부수 효과가 없는 동작을 제공함
- 밸류 타입은 불변임
- 밸류 타입은 고유하게 식별되지 않으며, 밸류 타입의 타입 및 모든 속성/프로퍼티의 조합에 의해서만 식별 가능함
- 애그리거트는 하나 이상의 엔티티 또는 밸류 타입으로 구성되는 전체 개념을 모델링함
- 부모 엔티티는 트랜잭션 일관성의 경계를 나타냄
- 도메인 서비스는 자체 상태를 저장하지 않으며, 엔티티 또는 밸류 타입에 포함되기 어려운 비즈니스 연산을 모델링할 때 사용함
- 함수형 동작은 순수 함수에 비즈니스 규칙을 포함하지만, 순수 함수형 프로그래밍 언어를 사용할 필요는 없음
- 자바와 같은 현대의 객체 지향 언어를 사용해 순수 함수를 구현할 수 있음
참고 사이트 & 함께 보면 좋은 사이트
본 포스트는 반 버논, 토마스 야스쿨라 저자의 전략적 모놀리스와 마이크로서비스를 기반으로 스터디하며 정리한 내용들입니다.
