Learning
토픽 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