코딩마을방범대

DDD(Domain Driven Design) 개념 본문

🎃 기타/상식 ❗

DDD(Domain Driven Design) 개념

신짱구 5세 2024. 5. 22. 13:15
728x90



 

도메인 주도 설계(DDD; Domain Driven Design)

  • 비즈니스 도메인 별로 나누어 설계하는 방식
  • 의존성 최소화(Loosly coupling=느슨한 결합), 응집성 최대화(High cohesion=높은 응집력)이 목표
  • Strategic Design(개념 설계)과 Tactical Design(으로 나눌 수 있음
도메인(Domain)
사전적인 의미는 영역, 집합
DDD의 도메인은 비즈니스 도메인을 뜻하며, 유사한 업무의 집합을 말함(MPRS-마케팅,구매,연구,영업)

 

 

 


 

 

 

 

 

 

개념 설계(Strategic Design)

 

컨텍스트(Context) 를 기준으로 설계하는 것

 

용어 설명
Domain 전체 설계
Subdomain 구성하는 부분 집합 (안방, 창고, 화장실 등)
Domain Model 실제 Subdomain의 구체적인 형상
(비즈니스 도메인의 서비스를 추상화한 설계도)
Context 특정 객체 혹은 상황이 벌어지는 주변 환경
(사용자, 프로세스, 정책/규정)
Bounded Context Biz Domain의 사용자, 프로세스, 정책/규정 등을 고유한 비즈니스 목적별로 그룹핑한것
(Domain안의 서비스를 경계 지은 Context의 집합)

특정 모텔은 어떤 bounded context에 놓이는가에 따라 다르게 이해될 수 있습니다. 예를 들어, 주택 정문에서 caretaker라는 모델이 있다면 이는 '경비원' 뜻합니다. 하지만 이 단어가 주택 건물 안에서 가지는 의미는 '아이를 돌보는 사람'이 될 수 있습니다.
Ubiquitous Language 현업, 개발자, 디자이너 등 참여자들이 동일한 의미로 이해하는 언어

'마우스'라는 단어는 '컴퓨터부속품생산'도메인내에서는 '컴퓨터 화면 안에서 커서를 옮기는 컴퓨터 부속품'으로 통용됩니다. '해충박멸서비스'도메인내에서는 '꼬리 달리고 털이 나있는 짐승'으로 이해됩니다.
Context Map Bounded Context간의 관계를 나타낸 도식화한 Diagram

 

 

 

 

 


 

 

 

 

 

 

구체적 설계(Tactical Design)

 

개발을 위해 구체적으로 설계하는 것

 

Model Driven Design

Strategic Design에서 설계한 각 Sub Domain별 Domain Model(Context Map)을 중심으로 설계하는 것

 

 


 

 

Layered Architecture

 

Tatical Design시 목적별 계층으로 나누어 설계하는것을 의미

 

Layer Annotaion 설명
Presentiation Layer @Controller,
@RestController
UI Layer
Service & Domain Layer @Service - Service Layer: Domain Layer와 Data Layer의 class들간의 제어(Control) 또는 연결(Interface)을 합니다.
Biz logic을 이 layer에 구현하지 않습니다.

- Domain Layer: Domain Object별로 Business Logic처리를 담당하는 Layer
Data Layer @Repository Database와의 CRUD처리 Layer

 

 

 

Service Layer와 Domain Model Layer를 나누는 이유는 새로운 비즈니스 요구에 대응할 때 기존 소스에 영향도를 최소화하고, Domain layer의 재활용성을 극대화하기 위함입니다.

 

 

 

 


 

 

 

용어 정리

 

용어 설명
Entity 각 레코드 간에 구별이 필요한 객체 (가변적)

'지폐'라는 객체는 '일련번호'라는 고유 ID로 구별되어야 하므로 엔티티이다.
Value Object(VO) 구별이 필요 없는 객체 (불변성)

'금액'이라는 객체는 '액수'와 '통화'라는 속성이 중요하지 구별할 필요가 없으므로 VO이다.
Aggregate Entity의 집합

customer, customerInfo,address 는 Customer 라는 주제로 뭉칠 수 있음
Factories 복잡한 Entity 혹은 Aggregate를 생성하는 것을 담당
Repositories Data Access 를 처리하는 객체 (CRUD를 담당)

JPA나 MyBatis (ORM)

 

 

 

 

 


참고사이트

[IT정보] 도메인 주도 설계(Domain Driven Design, DDD) 개념

DDD 핵심만 빠르게 이해하기

 

 

 

728x90