최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다.
1. 네 개의 영역
- 표현 영역, 애플리케이션 영역, 도메인 영역, 인프라스트럭처 영역
2. 계층 구조 아키텍처
단방향 의존성
- 상위가 하위 의존 (하위는 상위 의존 안함)
- ➡️ 도메인, 비즈니스 영역이 인프라스트럭처에 의존함
문제점
- ❌ 테스트 어려움
- ❌ 기능 확장 어려움
3. DIP (Dependency Inversion Principle)
- 저수준 모듈이 고수준 모듈에 의존하도록 바꿈
- 컴파일 시점에 해당 고수준 모듈 타입(인터페이스)에 의존함
DIP와 아키텍처
- 애플리케이션 영역과 도메인 영역에 영향을 최소화하면서 구현체를 변경하거나 추가할 수 있음
항목 | 도메인 서비스 | 애플리케이션 서비스 |
책임 | 여러 도메인에 걸친 순수한 도메인 규칙 구현 | 유스케이스 조합 및 흐름 제어 |
위치 | 도메인 계층 | 애플리케이션 계층 |
상태 보유 여부 | Stateless | Stateless |
외부 시스템 접근 | ❌ | ✅ |
트랜잭션 처리 | ❌ | ✅ |
예시 | “A 계좌에서 B 계좌로 이체 가능 여부” | “이체 요청을 받아 트랜잭션으로 이체 수행” |
주의사항
- ✅ 고수준 모듈 관점에서 하위 기능을 추상화한 인터페이스를 도출해야 함
- (단순히 인터페이스와 구현 클래스를 분리하는 정도가 아님)
4. 도메인 영역의 주요 구성요소
Aggregate
- 연관된 Entity와 Value Object를 개념적으로 하나로 묶은 단위
- ✅ 연관된 객체들을 하나의 트랜잭션 단위로 관리
- ex) 주문 - 주문 정보, 주문 상품들
- ex) 게시글 - 게시글, 댓글들
- ex) 회원 - 회원, 주소 정보
root entity
- Aggregate 내부 객체들을 대표해서 관리하는 엔티티
항목 | 설명 | 특징 |
역할 | 애그리거트의 진입점 역할 | 내부 구성요소의 행위 위임 (하위 엔티티/밸류) |
접근 제한 | 외부에서는 Root만 직접 접근 가능 | 나머지 객체는 Root를 통해 간접 접근 |
책임 | 애그리거트 전체의 일관성과 캡슐화 보장 | 도메인 규칙 준수 (유효성 체크 등) |
Repository
- 도메인 모델의 영속성 처리
- ✅ 애그리거트 단위로 도메인 객체를 저장하고 조회하는 기능 담당
Domain Service
- 특정 엔티티에 넣기 애매한 비즈니스 규칙을 다루는 서비스 객체
- ✅ 여러 엔티티와 밸류를 필요로 할 경우 도메인 서비스에서 로직을 구현함
예) 주문 - 배송비 계산
더보기
public class ShippingFeeCalculator {
public Money calculateShippingFee(Order order, Customer customer) {
if (customer.isVip()) {
return Money.ZERO;
} else {
return order.getTotalPrice().isGreaterThan(new Money(50000))
? Money.ZERO
: new Money(3000);
}
}
}
- 주문, 고객, 정책 등 여러 도메인 객체를 받아서 비즈니스 로직을 수행
5. 요청 처리 흐름
6. 인프라스트럭처 개요
7. 모듈 구성
- 영역별로 패키지 구성하기
구조) 도메인 별 패키지 구성
더보기
com.example.project
├── order
│ ├── ui
│ ├── application
│ ├── domain
│ └── infra
└── product
├── ui
├── application
├── domain
└── infra
'Code' 카테고리의 다른 글
[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 8. 애그리거트 트랜잭션 관리 (0) | 2025.06.19 |
---|---|
[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 7. 도메인 서비스 (0) | 2025.06.19 |
[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 4. 애그리거트 (0) | 2025.06.19 |
[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 3. 애그리거트 (0) | 2025.06.18 |
[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 1. 도메인 모델 시작하기 (0) | 2025.06.16 |