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. 함수형 동작: 명확한 입출력 기반 로직
정리하며..
- 엔티티는 고유하게 식별되며, 개별 상태 및 생명주기를 갖는 사물을 개념적인 전체로 모델링할 때 사용
- 밸류 타입은 하나 이상의 데이터 속성/프로퍼티를 조합해 캡슐화하고 부수 효과가 없는 동작을 제공함
- 밸류 타입은 불변임
- 밸류 타입은 고유하게 식별되지 않으며, 밸류 타입의 타입 및 모든 속성/프로퍼티의 조합에 의해서만 식별 가능함
- 애그리거트는 하나 이상의 엔티티 또는 밸류 타입으로 구성되는 전체 개념을 모델링함
- 부모 엔티티는 트랜잭션 일관성의 경계를 나타냄
- 도메인 서비스는 자체 상태를 저장하지 않으며, 엔티티 또는 밸류 타입에 포함되기 어려운 비즈니스 연산을 모델링할 때 사용함
- 함수형 동작은 순수 함수에 비즈니스 규칙을 포함하지만, 순수 함수형 프로그래밍 언어를 사용할 필요는 없음
- 자바와 같은 현대의 객체 지향 언어를 사용해 순수 함수를 구현할 수 있음
참고 사이트 & 함께 보면 좋은 사이트
본 포스트는 반 버논, 토마스 야스쿨라 저자의 전략적 모놀리스와 마이크로서비스를 기반으로 스터디하며 정리한 내용들입니다.