# 도메인(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로 구체화 시킨다.


# Aggregate란?

Aggregate는 고유의 비즈니스 목적 수행을 위한 데이터 객체들의 집합입니다.

예를 들면 피자주문DOMAIN의 Aggregate에는 Order, Consumer, Restaurant가 있습니다. 

Order Aggregate에는 Order, DeliveryInfo, PaymentInfo라는 Entity가 있고, Order Entity는 OrderLineItem(메뉴별 주문량)이라는 VO와 연결


# 출처

- https://happycloud-lee.tistory.com/94

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기