Code

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 1. 도메인 모델 시작하기

noahkim_ 2025. 6. 16. 21:41

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다.

 

1. 도메인이란?

소프트웨어로 해결하고자 하는 문제의 영역

  • 여러 하위 도메인으로 구성될 수 있음
  • 외부 서비스로 대체될 수 있음 (ex. 배송 - 택배사 시스템)

 

예) 온라인 서점

더보기
  • 주문: 정산, 배송, 결제, 회원, 혜택(->할인,쿠폰), 카탈로그(-> 리뷰)
  • 조회

 

2. 도메인 전문가와 개발자 간 지식 공유

도메인 별 전문가들은 각 도메인 시스템에게 원하는 요구사항이 있음

개발자는 이런 요구사항을 분석하고 설계하여 개발함

  • 요구사항을 올바르게 이해하는것이 첫번째 단계 (가장 중요)
  • ➡️ 직접 전문가와 개발자가 대화하는것이 가장 효과적

 

예시) 온라인 쇼핑몰

더보기

주문

  1. 상품 선택
  2. 배송지 입력
  3. 결제 (결제 수단 선택)
  4. option) 주문 후, 배송지 주소 변경 (단, 배송 상태: '배송 전'일 경우)

 

3. 도메인 모델

  • 특정 도메인을 개념적으로 표현한 모델
항목 내용
목적
- 도메인을 동일한 방식으로 이해하기 위함
- 도메인의 지식을 공유하기 위함
고려 사항 구현 모델이 개념 모델을 최대한 따르도록 설계 하기
표현 방법 (UML)
- 클래스 다이어그램: 시스템의 단위를 클래스 단위로 표현
- 상태 다이어그램: 하나의 객체가 가지는 상태 변화를 시각적으로 표현

 

4. 도메인 모델 패턴

Layered Architecture

  • 일반적인 애플리케이션 아키텍처
계층 (Layer) 설명 역할 및 특징
Presentation
인터페이스 계층 (UI, API 등)
사용자 요청 처리
Application 유스케이스 실행
도메인 계층 조합 및 활용함
Domain 핵심 비즈니스 로직 담당 도메인 개념 기반
Infrastructure 외부 시스템 연동 (데이터베이스, 메시지 브로커, 외부 API 등)
기술적 세부사항이 명시됨

 

5. 도메인 모델 도출

개념 모델 도출

  • 현실 세계의 구조를 모델링
활동 설명 산출물
1. 요구사항 분석 도메인 이해 (기획서/유스케이스/스토리/이해관계자와의 인터뷰) 도메인 이해도, 문제 정의
2. 핵심 구성요소 도출 Entity, Value Object, Role 식별 초기 도메인 구성요소 목록
3. 도메인 규칙 정리 업무 규칙 및 제약조건 정리 도메인 규칙 목록
4. 도메인 기능 식별 사용자/시스템 행동에 따른 기능 도출 유스케이스 기반 기능 목록
5. 도메인 모델 초안 작성 클래스 간 관계, 속성, 역할 관계 매핑 도메인 클래스 다이어그램 (초안)

 

구현 모델 도출

  • 시스템에 구현하도록 모델 도출
활동 설명 산출물
1. 도메인 메서드 정의 기능 목록을 기반으로 도메인 클래스에 메서드 추가 엔티티 및 VO의 메서드 정의
2. 연관 관계 구체화 연관 관계 방향, 집합성, 불변성 정의 명세된 관계 (UML 등)
3. 트랜잭션 범위 설계 업무 단위별 원자성 보장 범위 설계 서비스 단위 정의
4. 구현 가능 모델 확정 시스템 구현을 위한 최종 도메인 구조 설계 구현 도메인 모델, ERD 기초

 

6. 엔티티와 밸류

항목 엔티티 (Entity) 밸류 타입 (Value Object)
정의 고유한 식별자를 가진 도메인 객체 개념적으로 하나의 값을 표현하는 객체
식별성 ✅ – ID로 식별  – 값 자체로 동일성 판단
ID 생성 방식 - UUID, Nano ID
- 현재 시간 + 기타 값 조합
- DB 시퀀스
불변성 여부 (상태 변경 메서드 열려있음)   (한 번 생성된 후 상태 변경하지 않음)
캡슐화 필드 보호를 위해 캡슐화 필요 필드 내부 값도 최대한 캡슐화
설계 시 주의사항 상태 변경 메서드 명시적 정의 (set 메서드 사용 지양) - 값의 의미 단위로 분리
- 불변 객체로 설계
용도 개별 존재로 추적해야 하는 경우 의미 있는 속성 묶음을 하나의 값으로 표현할 때
예시 주문(Order), 사용자(User), 상품(Product) 주소(Address), 이름(Name), 금액(Money)

 

7. 도메인 용어와 유비쿼터스 언어

유비쿼터스 언어

  • 전문가, 관계자, 개발자가 도메인과 관련된 공통의 언어를 쓰는 것 (문서, 도메인 모델, 코드 등)
  • 도메인 용어를 사용하여 가독성을 높이기 (분석 및 이해하는 과정을 줄일 수 있음)