Domain-Driven Design도메인 주도 설계
도메인 주도 설계(DDD, Domain-Driven Design)는 복잡한 소프트웨어를 비즈니스 도메인 모델 중심으로 설계하는 방법론이다. Eric Evans가 2003년 제시했으며, 개발자와 도메인 전문가가 유비쿼터스 언어로 공통의 이해를 구축하는 것을 강조한다.
핵심 개념
유비쿼터스 언어 (Ubiquitous Language)
팀 전체(개발자 + 비즈니스)가 동일한 용어를 코드와 대화에서 사용한다.
- •코드에서: class Order, method place_order()
- •대화에서: "주문(Order)을 접수(place)할 때..."
바운디드 컨텍스트 (Bounded Context)
큰 도메인을 명확한 경계로 나눈 서브 도메인.
전술적 설계 패턴
| 패턴 | 설명 |
|---|---|
| Entity | 고유 식별자가 있는 객체 (Order #1234) |
| Value Object | 식별자 없이 값으로 구분 (Money, Address) |
| Aggregate | 트랜잭션 경계 단위 (Order + Items) |
| Repository | 집계 루트 조회/저장 |
| Domain Service | 어떤 엔티티에도 속하지 않는 도메인 로직 |
| Domain Event | 도메인에서 발생한 사건 (OrderPlaced) |
집계 (Aggregate)
전략적 패턴
- •컨텍스트 맵: 바운디드 컨텍스트 간 관계 표시
- •Anti-Corruption Layer: 레거시 시스템과 통합 시 모델 보호
- •Shared Kernel: 두 컨텍스트가 공유하는 모델
관련 개념
- •클린 아키텍처 — DDD를 구현하는 아키텍처
- •이벤트 소싱 — 도메인 이벤트 기반 저장
- •마이크로서비스 — 바운디드 컨텍스트가 서비스 경계
- •CQRS — DDD와 함께 자주 사용되는 패턴
참고문헌
- •Evans, E. (2003). Domain-Driven Design. Addison-Wesley