→ Domain Driven Design

[1] 서론

“도메인(=비즈니스의 핵심 개념과 규칙)을 중심에 두고 시스템을 설계하자” 는 철학이다


<aside> ❓

왜 클린 아키텍처에서 DDD로 확장하게 될까?

1) 둘은 이렇게 이어져 있다.

개념 설명
클린 아키텍처 기술과 비즈니스의 구조적 분리를 잘 해줌
DDD 그 안에 들어갈 비즈니스 도메인을 정확하고 풍부하게 설계

2) DDD 핵심 개념 미리보기

개념 설명
Entity 고유 ID를 가진 도메인 객체 (Order, User 등)
Value Object 의미는 있지만 ID는 없는 값 (Money, Address)
Aggregate 비즈니스 단위의 트랜잭션 루트 (Order가 여러 LineItem을 포함)
Repository 도메인 객체를 저장/조회 (여기서부터 클린 아키텍처와 연결됨)
Domain Service Entity에 넣기 애매한 도메인 로직 처리
Ubiquitous Language 비즈니스와 개발자가 같은 말을 쓰도록 명확한 모델 정의

3) 그래서 왜 확장하는가?

이유 설명
복잡한 도메인 설계가 필요해짐 기능이 늘어나고 도메인 규칙이 많아짐
“비즈니스 용어 그대로” 시스템을 표현하고 싶어짐 팀 내 소통 & 유지보수 향상
클린 아키텍처 + DDD = 비즈니스 중심의 깔끔한 구조 둘이 합쳐져야 진짜 견고한 설계가 완성됨

4) 한 줄 요약

클린 아키텍처는 “어떻게 분리할까”를 알려주고 DDD는 “무엇을 설계할까”를 알려준다.


5) DDD 학습 순서

<aside> ❓

DDD 학습 순서

  1. DDD란 무엇인가? (개념 + 배경)
  2. 도메인, 도메인 모델이란?
  3. 엔티티(Entity) vs 값 객체(value Object)
  4. 애그리거트(Aggregate) & 루트
  5. 도메인 서비스란?
  6. 리포지토리 & 팩토리
  7. 유비쿼터스 언어란?
  8. 클린 아키텍처에 DDD 적용 예시 (NestJS 기준) </aside>

[2] DDD란 무엇인가?