0. 문제
Domain-driven Design(DDD)에 관하여 설명하시오.
1. 서론
▣ 개념 정의
**DDD(Domain-driven Design, 도메인 주도 설계)**는 소프트웨어를 비즈니스 도메인 중심으로 설계하고, 개발자와 도메인 전문가가 **공통 언어(Ubiquitous Language)**를 기반으로 복잡한 문제를 효과적으로 해결하기 위한 설계 철학 및 방법론이다.
▣ 역사적 배경
- 2003년, Eric Evans가 저서 『Domain-Driven Design』에서 제안
- 복잡한 비즈니스 로직이 도메인과 무관한 기술 요소에 파묻히는 것을 방지하기 위해 등장
▣ 출현 목적
- 도메인 복잡도를 정확히 반영하고 소프트웨어에 일관되게 구현
- 개발자와 비즈니스 전문가 간 소통 강화
- 시스템의 유지보수성과 확장성 확보
2. 본론
▣ DDD의 핵심 개념 및 구조
개념 | 설명 |
---|
도메인(Domain) | 해결하고자 하는 문제 영역(예: 은행, 물류, 쇼핑몰 등) |
유비쿼터스 언어(Ubiquitous Language) | 도메인 전문가와 개발자가 공유하는 공통 언어 |
엔티티(Entity) | 식별 가능한 고유 객체 (ex: 사용자, 주문 등) |
밸류 오브젝트(Value Object) | 속성만으로 정의되는 객체 (ex: 주소, 화폐 등) |
어그리거트(Aggregate) | 일관성을 보장하는 객체 집합의 루트 (Aggregate Root) |
도메인 서비스(Domain Service) | 엔티티에 속하지 않는 도메인 로직 담당 |
레포지토리(Repository) | 객체 저장소와의 추상화된 인터페이스 |
팩토리(Factory) | 복잡한 객체 생성을 캡슐화 |
📌 계층 구조
[ 사용자 인터페이스 ]
↓
[ 응용 계층 (Application Layer) ]
↓
[ 도메인 계층 (Domain Layer) ]
↓
[ 인프라 계층 (Infrastructure Layer) ]
▣ DDD의 적용 방식
절차 | 설명 |
---|
도메인 분석 | 비즈니스 전문가와 협업하여 도메인 모델링 |
하위 도메인 분리 | Core, Supporting, Generic으로 구분 |
바운디드 컨텍스트(Bounded Context) 정의 | 명확한 책임과 경계를 설정 |
모델 구현 | 엔티티, 밸류 오브젝트, 도메인 서비스 등 구현 |
통합 | 컨텍스트 간 통합 방식 결정 (REST, 메시지 등) |
▣ 장단점
구분 | 장점 | 단점 |
---|
설계 | 복잡한 도메인 정확히 반영 | 초기 설계 비용/노력 요구 |
개발 | 도메인 중심 설계로 유지보수 용이 | 학습 곡선 존재 |
협업 | 개발자와 도메인 전문가 간 협력 강화 | 조직 내 협업 구조 필수 |
테스트 | 도메인 단위 테스트 용이 | 구현 범위가 커질 수 있음 |
▣ 타 접근법과 비교
항목 | 전통적 설계 (CRUD 중심) | DDD |
---|
중심 개념 | 데이터 구조 | 도메인 모델 및 규칙 |
구현 방식 | 테이블 중심 개발 | 객체 중심 모델링 |
복잡도 처리 | 코드 내 혼재 | 도메인 계층에 집중 |
변경 대응 | 영향도 높음 | 컨텍스트 내 국한 가능 |
▣ 실무 적용 전략
전략 | 설명 |
---|
점진적 도입 | 핵심 도메인(Core Domain)부터 부분 적용 |
Team Topology 연계 | 팀을 바운디드 컨텍스트 단위로 구성 (Stream-aligned 팀) |
MSA 연계 | 각 Bounded Context를 독립 마이크로서비스로 구현 가능 |
모델 탐색 워크숍 | Event Storming, Domain Modeling 워크숍 등 활용 |
TDD 기반 설계 | 테스트 주도 개발과 연계하여 도메인 로직 견고화 |
▣ 최신 트렌드 및 확장
트렌드 | 설명 |
---|
Event Storming | 도메인 이벤트 중심의 모델링 기법 |
Hexagonal Architecture | 도메인 계층을 중심으로 포트-어댑터 구조 설계 |
Event-Driven DDD | 도메인 이벤트를 기반으로 MSA 통합 구현 |
Strategic DDD + Team Topologies | 조직 구조와 아키텍처를 동시 설계 |
3. 결론
▣ 어린이 버전 요약
DDD는 소프트웨어를 만들 때 현실 세계의 개념을 잘 표현해서, 사람들이 말하는 방식 그대로 프로그램을 짜는 방법이에요.
▣ 한눈에 보는 요약표
항목 | 설명 |
---|
정의 | 도메인 중심의 설계 철학 및 방법론 |
핵심 개념 | Entity, Value Object, Aggregate, Bounded Context 등 |
계층 구조 | UI → Application → Domain → Infrastructure |
장점 | 복잡도 관리, 협업 강화, 유지보수 용이 |
단점 | 초기 비용, 학습 곡선, 조직적 합의 필요 |
실무 적용 | 핵심 도메인부터 점진적 도입 + 팀 구조 정비 |
최신 트렌드 | Event Storming, Hexagonal Architecture, MSA 연계 |