도메인 주도 설계(DDD) 이해하기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
아키텍처 패턴
대상자
- 중급~고급 개발자, 시스템 아키텍트, 비즈니스 분석가
- 복잡한 도메인 모델링과 모듈화 설계에 관심 있는 사람
- DDD의 전략적 원칙과 전술적 패턴을 적용하고자 하는 팀
핵심 요약
- DDD는 비즈니스 도메인을 기반으로 소프트웨어를 설계하는 전략적 접근법으로, Ubiquitous Language(일관된 용어), Bounded Contexts(경계 맥락), Context Map(맥락 지도), 전술적 패턴을 핵심으로 삼는다.
- Bounded Contexts는 모듈화된 설계를 통해 시스템 확장성과 유지보수성을 향상시킨다.
- DDD는 Microservices 및 이벤트 주도 시스템과 호환되며, 도메인 모델의 지속적 개선을 통해 비즈니스 변화에 유연하게 대응한다.
섹션별 세부 요약
1. Ubiquitous Language
- 일관된 도메인 용어를 통해 개발자, 비즈니스 전문가, 이해관계자 간 의사소통 혼란 최소화.
- 예: 전자상거래 플랫폼에서 "Order" → "Purchase Order", "Shipment", "Payment Transaction"으로 구체화.
- 장점: 오류 줄이기, 코드 일관성 확보, 도메인 이해도 향상.
2. Bounded Contexts
- 도메인 모델의 유효 범위를 명확히 정의하여 모델 충돌 방지 및 독립 개발 지원.
- 예: 전자상거래 플랫폼에서 Customer(지원 서브도메인), Order(핵심 서브도메인), Inventory(일반 서브도메인)로 분리.
- 장점: 모듈화 설계, 팀 자율성 강화, 병렬 개발 가능.
3. Context Map
- 다양한 Bounded Contexts 간 상호작용 관계를 시각화하여 시스템 통합 전략 수립.
- 관계 유형: Shared Kernel, Partnership, Customer-Supplier, Anti-Corruption Layer(ACL).
- 예: Order와 Inventory 간 ACL을 통해 외부 모델 변경으로부터 도메인 순수성 보호.
- 장점: 안전한 통합, 도메인 독립성 유지, 결합도 감소.
4. 전술적 패턴
- Aggregate Roots: 트랜잭션 경계 정의, 관련 엔티티 간 일관성 보장.
- Entities & Value Objects: 엔티티(고유 식별자), 값 객체(불변성)로 실세계 개념 모델링.
- Domain Events: 이벤트 주도 설계 지원, 도메인 변화를 비동기 방식으로 전파.
- Repositories: 도메인 언어 기반 데이터 액세스 추상화, 지속성 로직 분리.
- Domain Services: 엔티티/값 객체에 속하지 않는 비즈니스 로직을 캡슐화.
- Factories: 복잡한 객체/애그리게이트 생성 시 유효성 및 일관성 보장.
결론
- DDD 적용 시점: Ubiquitous Language 정의 → Bounded Contexts 설계 → Context Map 정의 → 전술적 패턴 적용 순으로 진행.
- 실무 팁: 비즈니스 전문가와의 협업 강화, 모듈화 설계로 확장성 확보, 이벤트 주도 아키텍처와의 통합.
- DDD는 복잡한 도메인 문제 해결과 장기적인 시스템 유지보수에 효과적인 접근법이다.