PE Notes · 사업관리
DDD
도메인 모델을 코드 중심에 두는 DDD를 유비쿼터스 언어·바운디드 컨텍스트·애그리거트로 정리하고, 전술 블록과 MSA 경계 매핑을 잇습니다.
화면 프레임워크 이름이 모델이 되면, 업무 규칙은 컨트롤러 사이에 흩어집니다. 는 복잡한 업무를 소프트웨어 모델의 중심에 둡니다. 도메인 전문가와 개발자가 같은 단어를 같은 뜻으로 쓰고, 그 단어가 코드·문서·대화에 반복됩니다. 의 객체에 업무 불변식을 심는 설계입니다. 에릭 에반스의 책이 이름을 남겼습니다.
언어와 경계
는 번역 표가 아닙니다. “주문”이 영업과 물류에서 다르면, 같은 클래스에 넣지 않습니다. 가 그 말이 통하는 울타리입니다. 울타리 안에서 모델은 일관되고, 울타리 사이는 맵으로 잇습니다. 공유 커널, 고객-공급자, 순응, 부패 방지 계층, 공개 호스트가 대표 관계입니다. 외부 레거시의 용어를 그대로 코어에 들이면 모델이 썩습니다.
| 개념 | 한 줄 |
|---|---|
| 유비쿼터스 언어 | 전문가·개발·코드가 같은 말 |
| 바운디드 컨텍스트 | 그 말이 유효한 모델 경계 |
| 도메인 모델 | 업무 개념의 객체 추상 |
| 컨텍스트 맵 | 울타리 사이 통합 방식 |
핵심 도메인에 설계 힘을 두고, 지원·일반 서브도메인은 사서 쓰거나 얇게 둡니다. 모든 모듈을 같은 밀도로 조각하면 DDD가 아니라 분업입니다.
애그리거트와 전술 블록
는 함께 일관되어야 하는 엔티티와 값 객체의 묶음입니다. 바깥은 루트만 부릅니다. 주문 루트를 통하지 않고 라인 항목을 직접 고치면 합계와 상태가 어긋납니다. 엔티티는 식별자가 있고, 값 객체는 금액·주소처럼 값으로만 같습니다. 도메인 서비스는 한 엔티티에 넣기 어색한 업무 규칙입니다. 도메인 이벤트는 “주문완료됨”처럼 일어난 일입니다. 리포지터리는 애그리거트 단위로 저장을 감추고, 팩터리는 복잡한 생성만 감춥니다.
표현은 화면·API, 응용은 유스케이스 오케스트레이션, 도메인은 규칙, 인프라는 DB·메시지입니다. 도메인이 인프라 타입에 의존하면 중심이 뒤집힙니다. GoF 팩토리·리포지터리 이름과 만나되, 목적은 객체 생성이 아니라 업무 불변식입니다.
MSA와 붙는 자리
서비스 경계의 좋은 후보는 바운디드 컨텍스트입니다. 화면 단위로 나누면 말이 깨집니다. 애그리거트 루트가 API의 입구가 되고, 도메인 이벤트가 메시지와 만납니다. 는 쓰기의 불변식과 읽기 모델을 가르는 전술에 가깝습니다. 는 통신·보안의 실행 칸이지, 경계를 그려 주지는 않습니다. 은 도메인을 어댑터 안에 가두는 배치입니다.
이커머스의 주문·결제·배송이 같은 “상태” 필드를 공유하면 컨텍스트가 하나인 척한 것입니다. 코어뱅킹의 계좌와 원장도 말이 다르면 나눕니다. 작은 CRUD에 DDD 전 블록을 깔면 과잉입니다.
답안은 언어·컨텍스트·애그리거트, 전술 블록 몇 이름, 레이어, MSA 매핑, 핵심 도메인 집중을 한 장에 닫습니다.