DDD(Domain-driven Design)

agnusdei·2025년 8월 8일
0

ICT

목록 보기
56/143

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 연계

profile
DevSecOps ⚙️ + CTF🚩

0개의 댓글