DDD 내용 정리.
DDD 내용 정리.
요약
개념
- Domain이란 유사한 업무의 집합을 말한다. (마케팅, 구매, 연구, 영업 등)
- Domain Driven Design은 비즈니스 도메인별로 나누어 설계하는 방법론이다.
- 한 Domain 내에서는 Ubiquitous Language가 사용되어야 한다. 즉, 모두가 공통으로 이해하는 통일된 용어가 필요하다.
- Context란 도메인의 사용자, 프로세스, 정책 등을 의미한다. 고유의 비즈니스 목적별로 Context를 나눈것이 Bounded Context이다.
- DDD는 전략설계와 전술설계로 나뉜다.
- 전략설계의 산출물은 Domain Model이고 Domain 분해도와 Context Map으로 구성된다.
- Domain 분해도는 최상위 도메인을 서브도메인으로 나누고 각 서브도메인의 Type을 Core, Support, Generic으로 나눈 것이다.
- Context Map은 Bounded Context간의 관계를 도식화한것이다.
- Event Storming은 도메인에 대한 공통의 이해를 위해 도메인에서 일어나는것들을 찾는 방법이고 일련의 과정을 통해 Bounded Context를 식별한다.
- 각 Bounded Context를 Micro Service로 나눈 후 각 마이크로서비스별로 설계한다.
- 마이크로서비스는 Layered Architecture로 설계하는 것을 권장한다. Presentation, Service, Domain Model, Data Access
- 전술설계의 객체에는 Entity, VO(Value Object), Aggregate, Factory, Repository가 있다. Entity- 구별필요, VO-구별X, Aggregate-Entity집합
- 전술설계의 결과물은 Userstory(주체가 사람인 요구사항명세서), Usercase diagram, Sequence Diagram, Class diagram, Data Model, Storyboard(화면설계서), API설계서와 같이 기존과 유사한 산출물과 메시지설계서, 마이크로서비스패턴 적용 설계서와 같은 마이크로서비스에 특화된 설계서가 있다.
- Design Thinking은 사용자에 대한 공감과 이해를 통해 사용자 경험을 향상시킬 아이디어를 찾는 방법론이다. DDD시작 전에 아이디에이션을 위해 수행하면 좋으며, 그 결과를 DDD로 구체화 시킨다.- TODO
DDD 작업 순서 요약?
DDD는 Strategic Design과 Tactical Design으로 나눌 수 있습니다. Strategic Design은 개념 설계이고 Tactical Design은 프로그래밍하기 위한 구체적 설계라고 할 수 있습니다.
Strategic Desig
- Step1. Domain Event 정의: 비즈니스 도메인내에 발생하는 모든 이벤트를 과거형으로 기술 - “오렌지색”
- Step2. Tell the story: 도출된 이벤트로 도메인의 업무 흐름을 이해하고 토론하여 보완
- Step3. 프로세스로 그룹핑: 이벤트들을 프로세스로 그룹핑
- Step4. Command 정의: 각 Domain Event를 발생시키는 명령을 현재형으로 정의하며 명령형(ex: 제품목록을 검색)으로 기술 - “파란색”
- Step5. Trigger 정의: Command를 일으키는 Actor와 Event를 일으키는 External System와 Policy/Rule을 정의
- Step6. Aggregate 정의: Command 수행을 위해 CRUD해야 하는 데이터 객체 정의 - “노란색”
- Step 7. Bounded Context정의 - “분홍색”
- Step 8. Context Map 작성
Tactical Design
- 생략
Action Plan
- DDD 작업의 기회(신규 프로젝트 작업, 사이드 프로젝트 시작)가 있으면 아래 내용으로 테스트 해볼것.
- 또는 저자처럼 기존의 서비스에 대해서 연습해보는 것도 좋은 방법.
참고 자료
- https://happycloud-lee.tistory.com/94
This post is licensed under CC BY 4.0 by the author.