본문 바로가기

기록/TIL

DDD : Domain Driven Design

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

 

DDD에 대해 설명하기 앞서, 여기서 설명하는 Domain에 대해 먼저 알고가자.

Domain

 

네이버 영어사전에서 봤을 때, domain은 영역, 범위를 뜻한다고 한다.

그렇기 때문에 DDD에서 말하는 domain은 사용자가 사용하는 모든 것, 소프트웨어로 해결하고자 하는 문제 영역이 되겠다.

쇼핑몰을 예시로 들면, 구매자와 주문하는 도메인, 판매자가 관리하는 도메인 등이 있을 수 있다.

이러한 도메인들이 서로 상호작용하며 설계하는 것이 도메인 주도 설계 이다.

 

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

도메인을 중심으로 하는 설계, 개발하는 방식이다. 

 

1. 도메인을 구체화 하여 모델로 삼고, 데이터 중심이 아닌 도메인을 중심으로 한다.

 

2. 보편적인(ubiquitous) 언어의 사용

 이는 프로젝트 팀 내에서 사용되는 공용 언어로서, 모든 팀원(개발자, 도메인 전문가, 분석가 등)이 이해할 수 있는 용어로 구성된다. 도메인에서 사용하는 용어를 코드에 반영하지 않으면 그 코드는 개발자에게 코드의 의미를 해석해야 하는 부담을 준다. 코드의 가독성을 높여서 코드를 분석하고 이해하는 시간을 절약, 용어가 정의 될 때마다 용어 사전에 이를 기록하고 명확하게 정의 함으로써 추후 또는 다른 사람들도 공통된 언어를 사용할 수 있도록 한다.

 

3. 소프트웨어 엔티티와 도메인 컨셉트를 가능한 가장 가까이 일치시키는것.

요구사항을 잘못 받아들여 모델과 소프트웨어가 요구사항과는 다르게 구현되지 않기 위해 분석 / 설계를 나누지 않고 분석 / 설계 / 구현까지의 모든 단계를 하나의 모델을 사용한다. 모델 === 코드.

 

도메인 모델

도메인을 개념적으로 표현한 것.
도메인 모델을 사용하면 여러 관계자들이 동일한 모습으로 도메인을 이해하고 도메인 지식을 공유하는 데 도움이 된다.
 
 
DDD에서는 같은 객체들이 존재할 수 있는데, 예를 들어 구매자의 입장에서는 (name, price)와 같은 객체 정보를 담지만, 판매자의 입장에서는 (color, size, madeCountry) 등이 있을 수 있습니다. 즉, 상황(사용자 등)에 따라 객체의 역할이 바뀔 수 있는 것이 DDD입니다.
 

 > 


https://incheol-jung.gitbook.io/docs/q-and-a/architecture/ddd#undefined-10

https://velog.io/@pjh1011409/DDD-%EB%9E%80#-ddd-%ED%8A%B9%EC%A7%95

https://tech.kakao.com/2022/12/12/ddd-of-recommender-team/

https://www.youtube.com/watch?v=VIfNipL5KkU