DDD는 전략적 설계와 전술적 설계로 나눈다.
전략적 설계
- 무엇과 왜에 대해 논의한다.
- 도메인을 분석하고, 서브 도메인과 그 가치와 중요도를 식별하고, 도메인에 대한 지식을 다양한 모델로 설계한다.
Domain
- 기업이 제공하는 서비스
ex) 페덱스 - 배송 서비스, 스타벅스 - 커피
- DDD에서는 기존의 현업에서 IT로의 일방향 소통구조를 탈피하여 현업과 IT의 쌍방향 커뮤니케이션을 매우 중요하게 생각한다.
Subdomain
- 한 도메인은 다시 여러 개의 하위 도메인(subdomain)으로 나눌 수 있다.
ex) 온라인 서점이 최상위 도메인이라면, 하위 도메인으로는 주문, 배송, 결제, 정산, 회원, 리뷰 등이 있을 수 있다.
- 서브 도메인은 중요도에 따라 핵심 서브도메인, 지원 서브도메인, 일반 서브도메인으로 나눈다.
핵심 서브도메인 (core subdomain)
- 회사가 경쟁업체와 다르게 수행하고 있는 것
- 가령 새로운 제품이나 서비스를 발명하거나, 기존 프로세스를 최적화하여 비용을 줄이는 것
ex) 우버 - 새로운 방식의 승차 공유 서비스
지원 서브 도메인 (supporting subdomain)
- 회사의 비즈니스를 지원하는 활동
- 핵심 서브 도메인과 달리 어떠한 경쟁 우위도 제공하지 않는다.
- 그러나 핵심 도메인을 성공시키기 위해서는 반드시 필요한 영역
- 핵심 서브도메인 다음으로 중요한 영역
일반 서브 도메인 (generic subdomain)
- 모든 회사가 같은 방식으로 수행하는 비즈니스 활동
- 지원 서브 도메인과 마찬가지로 회사에 경쟁력을 제공하지 않는다.
- 모든 회사에서 사용하고 있어서 더 이상 혁신이나 최적화가 필요 없다.
유비쿼터스 언어
모델
사물이나 현상에서 의도한 관점만 강조하고 다른 측면은 무시하여 간략히 표현한 것. 즉, 특정 용도를 목적으로 둔 추상적 결과
-
ex) 길 안내 지도, 지형도, 지하철 노선도
-
이 지도 중 어느 것도 지구의 세부적인 모든 것을 나타내지는 않지만, 특정 목적을 지원하는 데 충분한 자료를 담고 있다.
-
유용한 모델은 실세계의 복사본이 아니라 문제를 해결하려는 의도가 있고, 그 목적에 필요한 정보만 제공한다.
-
Bounded context : 도메인 모델이 구현되는 곳으로 복잡한 도메인들을 구분 짓고 경계를 만들며, 각각의 모델들이 특정한 의미를 갖고, 특정한 일을 수행한다. Bounded context는 독립적이지 않고 서로 상호작용해야 한다.
-
Event Storming : 도메인 내에서 일어나는 행동을을 찾아 Bounded Context 를 식별 하는 방법론이다.
전술적 설계
-
전략적 설계보다 비즈니스 로직에 집중해서 문제를 어떻게 해결하는지에 집중한다.
-
전략적 설계에서 도출된 바운디드 컨텍스트와 도메인을 이용하여 애그리거트 패턴, 엔티티와 값 객체 등을 구성하고 구현하는 활동이다.
엔티티 (Entity)
- 엔티티는 주문, 회원, 상품과 같이 도메인의 고유한 개념을 표현한다.
- 도메인 모델의 데이터를 포함하며 해당 데이터와 관련된 기능을 함께 제공한다.
- 엔티티의 가장 큰 특징은 식별자를 가진다는 것 이다.
ex) 주문 도메인에서 각각의 주문번호는 모두 다르므로, 주문번호가 주문의 식별자가 된다. 여기서 주문이 엔티티이고, 주문번호가 속성이다.
- 주문에서 배송지 주소가 바뀌더라도 주문번호가 바뀌지 않는 것처럼 엔티티의 식별자는 바뀌지 않는다.
값 (Value)
- 값이 가장 큰 특징은 식별자를 가지지 않는다는 것이다,
ex) 배송지 주소, 주문 금액
애그리거트, 집합 (Aggregate)
- 연관된 엔티티와 값 객체를 하나의 집합으로 묶은 개념
ex) 주문이라는 애그리거트 속에 배송지 정보, 주문자, 주문 목록, 주문 금액 등이 하위 모델로 구성된다.