토픽 89 / 192·마이크로서비스와 API
DDD (Domain-Driven Design)
DDD (Domain-Driven Design)
복잡한 소프트웨어의 핵심인 도메인(업무 영역)에 초점을 맞추고, 도메인 전문가와 개발자 간 협업을 통해 도메인 모델을 중심으로 설계하는 방법론
제안자: Eric Evans (2003년, "Domain-Driven Design" 저서)
핵심 개념
- •유비쿼터스 언어(Ubiquitous Language): 도메인 전문가와 개발자가 공유하는 공통 언어
- •Bounded Context: 모델이 유효한 명확한 경계
- •Context Map: Bounded Context 간 관계
전술적 설계(Building Blocks)
- •Entity: 고유 식별자, 생명주기
- •Value Object: 불변, 속성으로 식별
- •Aggregate: 일관성 경계, Root Entity
- •Repository: 영속성 추상화
- •Service: 도메인 로직 (Entity에 속하지 않는)
- •Factory: 복잡한 객체 생성
- •Domain Event: 도메인 내 발생 사건
전략적 설계
- •Core Domain: 핵심 경쟁력
- •Supporting Domain: 지원 영역
- •Generic Domain: 일반적 영역
적용사례: 복잡한 비즈니스 도메인, MSA 설계
비교: DDD(도메인중심) vs 데이터중심(ERD) vs 기능중심
연관: MSA, 이벤트소싱, CQRS