DDD(Domain-Driven Design)
- 비즈니스 도메인을 중심으로 소프트웨어를 설계하는 방법론
- 주요 개념:
- 유비쿼터스 언어
- 바운디드 컨텍스트
- 애그리게이트
- 도메인 이벤트
- 엔티티와 값 객체
**핵심 개념과 원칙**
1. 전략적 설계 (Strategic Design)
- 바운디드 컨텍스트 (Bounded Context)
- 특정 도메인 모델이 적용되는 명확한 경계
- 예: '주문' 컨텍스트와 '배송' 컨텍스트는 서로 다른 규칙과 개념을 가짐
- 유비쿼터스 언어 (Ubiquitous Language)
- 도메인 전문가와 개발자가 공유하는 공통 언어
- 코드, 문서, 대화에서 일관되게 사용
- 예: '주문'이라는 용어가 모든 맥락에서 동일한 의미를 가짐
2. 전술적 설계 (Tactical Design)
- 엔티티 (Entity)
- 고유한 식별자를 가지는 객체
- 예: 주문번호로 식별되는 주문
- 값 객체 (Value Object)
- 식별자 없이 속성으로만 정의되는 객체
- 불변성을 가짐
- 예: 주소, 금액
- 애그리게이트 (Aggregate)
- 연관된 객체들의 집합
- 일관성을 보장하는 경계
- 예: 주문(루트)과 주문항목들
```java
// 애그리게이트 예시
public class Order { // 애그리게이트 루트
private OrderId id;
private List<OrderItem> items;
private Money totalAmount;
public void addItem(Product product, int quantity) {
OrderItem item = new OrderItem(product, quantity);
validateItemAddition(item);
items.add(item);
recalculateTotalAmount();
}
}
```
3. 도메인 서비스 (Domain Service)
- 여러 애그리게이트에 걸친 비즈니스 로직
- 상태를 가지지 않음
- 예: 주문 가격 계산 서비스
4. 리포지토리 (Repository)
- 애그리게이트의 저장소
- 도메인 객체의 영속성 처리
- 예: OrderRepository
**적용 프로세스**
1. 도메인 전문가와의 협업
- 도메인 지식 습득
- 유비쿼터스 언어 정의
- 주요 비즈니스 규칙 파악
2. 모델링
- 바운디드 컨텍스트 식별
- 애그리게이트 설계
- 도메인 이벤트 정의
3. 구현
- 도메인 모델을 코드로 표현
- 비즈니스 규칙을 명시적으로 구현
- 테스트 주도 개발 적용
**장점**
- 비즈니스 복잡성 효과적 관리
- 도메인 전문가와 개발자 간 원활한 소통
- 유지보수성 향상
- 비즈니스 규칙의 명확한 표현
**단점**
- 학습 곡선이 높음
- 초기 설계에 많은 시간 소요
- 단순한 CRUD 애플리케이션에는 과도할 수 있음
- 팀 전체의 이해와 합의 필요
DDD는 특히 복잡한 비즈니스 로직을 가진 시스템에서 효과적이며, 현대의 마이크로서비스 아키텍처와도 잘 어울립니다.
'개발공부 > CS' 카테고리의 다른 글
[자료구조] AVL 트리란? (0) | 2025.02.16 |
---|---|
MSA(Microservices Architecture)란? (0) | 2025.02.16 |
쿠버네티스란? (0) | 2025.02.16 |
메시지 큐(Message Queue) (0) | 2025.02.16 |
프레임워크와 라이브러리의 차이점 (0) | 2025.02.16 |