도메인 주도 설계의 본질

95
도메인-주도 설계의 본질 Domain-Driven Design Essence 조영호 Eternity’s Chit-Chat http://aeternum.egloos.com

Upload: youngho-cho

Post on 10-May-2015

15.940 views

Category:

Documents


7 download

DESCRIPTION

도메인-주도 설계(Domain-Driven Design, DDD)의 기본 개념을 정리한 자료입니다.

TRANSCRIPT

Page 1: 도메인 주도 설계의 본질

도메인-주도����������� ������������������  설계의����������� ������������������  본질����������� ������������������  

Domain-Driven Design Essence

조영호����������� ������������������  

Eternity’s����������� ������������������  Chit-Chat����������� ������������������  

http://aeternum.egloos.com����������� ������������������  

Page 2: 도메인 주도 설계의 본질

Part - 1

도메인-주도����������� ������������������  설계����������� ������������������  

Page 3: 도메인 주도 설계의 본질

2011년����������� ������������������  여름����������� ������������������  영화계에서는����������� ������������������  

Page 4: 도메인 주도 설계의 본질
Page 5: 도메인 주도 설계의 본질
Page 6: 도메인 주도 설계의 본질
Page 7: 도메인 주도 설계의 본질

설득력����������� ������������������  없는����������� ������������������  스토리와����������� ������������������  내러티브����������� ������������������  빈약����������� ������������������  

볼거리에����������� ������������������  치중해����������� ������������������  스토리가����������� ������������������  빈약����������� ������������������  

소문난����������� ������������������  잔치에����������� ������������������  먹을����������� ������������������  것����������� ������������������  없었다����������� ������������������  대작의����������� ������������������  몰락����������� ������������������  

연이은����������� ������������������  언론의����������� ������������������  혹평����������� ������������������  

스토리를����������� ������������������  무시한채����������� ������������������  영화의����������� ������������������  스케일과����������� ������������������  

사이즈에만����������� ������������������  집착하다����������� ������������������  좌초����������� ������������������  ����������� ������������������  ����������� ������������������  

Page 8: 도메인 주도 설계의 본질

한국형����������� ������������������  블록버스터의����������� ������������������  추락����������� ������������������  CG만����������� ������������������  남고����������� ������������������  이야기는����������� ������������������  증발했다����������� ������������������  

Page 9: 도메인 주도 설계의 본질

그와����������� ������������������  대조적으로����������� ������������������  

Page 10: 도메인 주도 설계의 본질
Page 11: 도메인 주도 설계의 본질

CG를����������� ������������������  전혀����������� ������������������  사용하지����������� ������������������  않았음에도����������� ������������������  

아름다운����������� ������������������  화면과����������� ������������������  내러티브로����������� ������������������  관객을����������� ������������������  사로잡다����������� ������������������  

Page 12: 도메인 주도 설계의 본질

이야기가����������� ������������������  정서와����������� ������������������  감정적으로����������� ������������������  훌륭하고����������� ������������������  납득할만해야����������� ������������������  한다.����������� ������������������  

기술력에����������� ������������������  너무����������� ������������������  촛점을����������� ������������������  둬서����������� ������������������  (영화나����������� ������������������  이야기의)����������� ������������������  본질을����������� ������������������  흐려서는����������� ������������������  안된다.����������� ������������������  

영화의����������� ������������������  본질은����������� ������������������  기술이����������� ������������������  아니다.����������� ������������������  ����������� ������������������  

-����������� ������������������  김용화(영화감독)����������� ������������������  ����������� ������������������  

Page 13: 도메인 주도 설계의 본질

이����������� ������������������  교훈은����������� ������������������  소프트웨어����������� ������������������  개발����������� ������������������  분야에서도����������� ������������������  ����������� ������������������  동일하게����������� ������������������  적용����������� ������������������  가능����������� ������������������  

Page 14: 도메인 주도 설계의 본질

소프트웨어의����������� ������������������  본질����������� ������������������  해당����������� ������������������  소프트웨어의����������� ������������������  사용자를����������� ������������������  위해����������� ������������������  ����������� ������������������  도메인에����������� ������������������  관련된����������� ������������������  문제를����������� ������������������  해결하는����������� ������������������  능력����������� ������������������  ����������� ������������������  

Page 15: 도메인 주도 설계의 본질

도메인의����������� ������������������  복잡성����������� ������������������  =����������� ������������������  소프트웨어����������� ������������������  개발의����������� ������������������  복잡성����������� ������������������  

Page 16: 도메인 주도 설계의 본질

대부분의����������� ������������������  프로그래머들은����������� ������������������  기술에����������� ������������������  매혹����������� ������������������  

Page 17: 도메인 주도 설계의 본질

-����������� ������������������  김용화(영화감독)����������� ������������������  ����������� ������������������  

소프트웨어의����������� ������������������  본질은����������� ������������������  기술이����������� ������������������  아니다.����������� ������������������  ����������� ������������������  

프로그램이����������� ������������������  정서와����������� ������������������  감정적으로����������� ������������������  훌륭하고����������� ������������������  납득할만����������� ������������������  해야����������� ������������������  한다����������� ������������������  

기술력에����������� ������������������  너무����������� ������������������  촛점을����������� ������������������  둬서����������� ������������������  (프로그램이나����������� ������������������  이야기의)본질을����������� ������������������  흐려서는����������� ������������������  안된����������� ������������������  

Page 18: 도메인 주도 설계의 본질

도메인의����������� ������������������  복잡성 핵심은����������� ������������������  

Page 19: 도메인 주도 설계의 본질

Domain-Driven Design Tackling Complexity in the Heart of Software

Page 20: 도메인 주도 설계의 본질

Part - 2

두����������� ������������������  가지����������� ������������������  핵심����������� ������������������  원칙����������� ������������������  

Page 21: 도메인 주도 설계의 본질

훌륭한����������� ������������������  소프트웨어����������� ������������������  개발의����������� ������������������  전제����������� ������������������  조건����������� ������������������  

도메인의����������� ������������������  본질을����������� ������������������  이해하고����������� ������������������  있는����������� ������������������  

도메인����������� ������������������  전문가 의����������� ������������������  참여����������� ������������������  

Page 22: 도메인 주도 설계의 본질

도메인����������� ������������������  전문가와의����������� ������������������  ����������� ������������������  원활한����������� ������������������  의사소통����������� ������������������  

Page 23: 도메인 주도 설계의 본질

언어는����������� ������������������  오해의����������� ������������������  근원이다����������� ������������������  -����������� ������������������  생택쥐페리����������� ������������������  

Page 24: 도메인 주도 설계의 본질

24

Page 25: 도메인 주도 설계의 본질

도메인����������� ������������������  전문가와����������� ������������������  ����������� ������������������  개발자����������� ������������������  사이의����������� ������������������  

공유����������� ������������������  언어����������� ������������������  

Page 26: 도메인 주도 설계의 본질

26

Language

Page 27: 도메인 주도 설계의 본질

Language

모든����������� ������������������  대화는����������� ������������������  공유����������� ������������������  언어에����������� ������������������  기반����������� ������������������  

Page 28: 도메인 주도 설계의 본질

모든����������� ������������������  대화는����������� ������������������  공유����������� ������������������  언어에����������� ������������������  기반����������� ������������������  

Language Ubiquitous

도메인����������� ������������������  전문가가����������� ������������������  이해할����������� ������������������  수����������� ������������������  있는����������� ������������������  공용����������� ������������������  언어����������� ������������������  

Based on Domain Concepts

Page 29: 도메인 주도 설계의 본질

Domain Concepts Domain Abstraction

Page 30: 도메인 주도 설계의 본질

Domain Abstraction

Page 31: 도메인 주도 설계의 본질

Domain Abstraction

Domain Model

Page 32: 도메인 주도 설계의 본질

Ubiquitous Language

Domain Model

모든����������� ������������������  커뮤니케이션����������� ������������������  

based on

based on

Page 33: 도메인 주도 설계의 본질

모든����������� ������������������  프로그램����������� ������������������  코드����������� ������������������  

Ubiquitous Language

Domain Model

based on

based on

Page 34: 도메인 주도 설계의 본질

Design Model -Driven

Page 35: 도메인 주도 설계의 본질

Domain-Driven Design

Ubiquitous Language Model-Driven Design

Page 36: 도메인 주도 설계의 본질

Part - 3

모델과����������� ������������������  코드����������� ������������������  

Page 37: 도메인 주도 설계의 본질

37

가상����������� ������������������  계좌(Virtual����������� ������������������  Account)����������� ������������������  환불����������� ������������������  

Page 38: 도메인 주도 설계의 본질

상품����������� ������������������  주문(Order)����������� ������������������  

가상����������� ������������������  계좌(Virtual����������� ������������������  Account)����������� ������������������  

가상계좌(Virtual����������� ������������������  Account)����������� ������������������  ����������� ������������������  

발급����������� ������������������  

입금(Deposit)����������� ������������������  

구매(Purchase)����������� ������������������  완료����������� ������������������  

Page 39: 도메인 주도 설계의 본질

상품����������� ������������������  주문(Order)����������� ������������������  

가상����������� ������������������  계좌(Virtual����������� ������������������  Account)����������� ������������������  

입금(Deposit)����������� ������������������  

IN 24H

Page 40: 도메인 주도 설계의 본질

입금(Deposit)����������� ������������������  

상품����������� ������������������  주문(Order)����������� ������������������  

가상����������� ������������������  계좌(Virtual����������� ������������������  Account)����������� ������������������  

IN 24H

전액����������� ������������������  환불(Refund)����������� ������������������  

Page 41: 도메인 주도 설계의 본질

그러나...����������� ������������������  

예상과����������� ������������������  달리����������� ������������������  점점����������� ������������������  더����������� ������������������  복잡해지는����������� ������������������  규칙

Page 42: 도메인 주도 설계의 본질

여러����������� ������������������  종류의����������� ������������������  상품을����������� ������������������  함께����������� ������������������  구매한����������� ������������������  경우

부분����������� ������������������  품절

부분����������� ������������������  환불

Page 43: 도메인 주도 설계의 본질

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액

차액����������� ������������������  환불

Page 44: 도메인 주도 설계의 본질

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액

전액����������� ������������������  환불

Page 45: 도메인 주도 설계의 본질

우리의����������� ������������������  도메인����������� ������������������  규칙은...

전체����������� ������������������  품절����������� ������������������  

부분����������� ������������������  품절����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������   결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

Page 46: 도메인 주도 설계의 본질

아직����������� ������������������  끝나지����������� ������������������  않은...

Page 47: 도메인 주도 설계의 본질

때때로...

주문����������� ������������������  취소도����������� ������������������  함께...

Page 48: 도메인 주도 설계의 본질

우리의����������� ������������������  도메인����������� ������������������  규칙은...

전체����������� ������������������  품절����������� ������������������  

부분����������� ������������������  품절����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������   결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

취소����������� ������������������  없음����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

Page 49: 도메인 주도 설계의 본질

49

…⋯

Page 50: 도메인 주도 설계의 본질

우리의����������� ������������������  코드는

Page 51: 도메인 주도 설계의 본질

전체����������� ������������������  품절����������� ������������������  

결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

취소����������� ������������������  없음����������� ������������������  

if (isFullySoldOut(order)) { virtualAccountCancelService.refundVirtualAccount(전액);}

전체����������� ������������������  품절

Page 52: 도메인 주도 설계의 본질

취소����������� ������������������  없음����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������   입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

if (deposit > order.getOrderedPrice()) { virtualAccountCancelService.refundVirtualAccount(차액);}

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액

Page 53: 도메인 주도 설계의 본질

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

if (deposit < order.getOrderedPrice()) { virtualAccountCancelService.cancelOrder(order); virtualAccountCancelService.refundVirtualAccount(입금액);}

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액

Page 54: 도메인 주도 설계의 본질

부분����������� ������������������  품절����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

부분����������� ������������������  품절

void PaymentService.paymentTransaction() { ... applyDiscountCouponAndPoint(...); refundVirtualAccount(...); refundCash(...); ...}

Page 55: 도메인 주도 설계의 본질

단순해����������� ������������������  보이나요?

Page 56: 도메인 주도 설계의 본질

실제����������� ������������������  코드

Page 57: 도메인 주도 설계의 본질

…⋯

Page 58: 도메인 주도 설계의 본질

KcpController

processPayment()

VirtualAccountService

refundVirtualAccount() cancelOrder() RefundDao

Inert()

PaymentService

paymentTransaction() refundCash() applyDIscountCouponAndPoint() refundVirtualAccount()

코드를����������� ������������������  기반으로����������� ������������������  한����������� ������������������  커뮤니케이션은?

입금액이����������� ������������������  결제금액보다����������� ������������������  크면����������� ������������������  VirtualAccountCancelService의����������� ������������������  ����������� ������������������  refundVirtualAccount()를����������� ������������������  호출합니다

입금액이����������� ������������������  결제금액보다����������� ������������������  작으면����������� ������������������  ����������� ������������������  VirtualAccountCancelService의����������� ������������������  ����������� ������������������  cancelOrder()를����������� ������������������  ����������� ������������������  상품을����������� ������������������  전체����������� ������������������  취소한����������� ������������������  후����������� ������������������  refundVirtualAccount()를����������� ������������������  호출해서����������� ������������������  입금����������� ������������������  금액����������� ������������������  전체를����������� ������������������  환불합니다

환불����������� ������������������  금액은����������� ������������������  ����������� ������������������  RefundDao를����������� ������������������  통해����������� ������������������  ����������� ������������������  DB에����������� ������������������  저장됩니다

Page 59: 도메인 주도 설계의 본질

코드를����������� ������������������  기반으로����������� ������������������  한����������� ������������������  커뮤니케이션은?

입금액이����������� ������������������  결제금액보다����������� ������������������  크면����������� ������������������  VirtualAccountCancelService의����������� ������������������  ����������� ������������������  refundVirtualAccount()를����������� ������������������  호출합니다

입금액이����������� ������������������  결제금액보다����������� ������������������  작으면����������� ������������������  ����������� ������������������  VirtualAccountCancelService의����������� ������������������  ����������� ������������������  cancelOrder()를����������� ������������������  ����������� ������������������  상품을����������� ������������������  전체����������� ������������������  취소한����������� ������������������  후����������� ������������������  refundVirtualAccount()를����������� ������������������  호출해서����������� ������������������  입금����������� ������������������  금액����������� ������������������  전체를����������� ������������������  환불합니다

환불����������� ������������������  금액은����������� ������������������  ����������� ������������������  RefundDao를����������� ������������������  통해����������� ������������������  ����������� ������������������  DB에����������� ������������������  저장됩니다

기술����������� ������������������  종속적인����������� ������������������  커뮤니케이션

Page 60: 도메인 주도 설계의 본질

도메인����������� ������������������  전문가와의����������� ������������������  커뮤니케이션����������� ������������������  불가능

Page 61: 도메인 주도 설계의 본질

전체����������� ������������������  품절����������� ������������������  

부분����������� ������������������  품절����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������   결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  취소����������� ������������������  없음����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

KcpController

processPayment()

VirtualAccountService

refundVirtualAccount() cancelOrder() RefundDao

Inert()

PaymentService

paymentTransaction() refundCash() applyDIscountCouponAndPoint() refundVirtualAccount()

개발자조차����������� ������������������  도메인����������� ������������������  개념과����������� ������������������  코드를����������� ������������������  머릿속에서����������� ������������������  ����������� ������������������  상호����������� ������������������  대응시켜야만����������� ������������������  코드의����������� ������������������  이해����������� ������������������  및����������� ������������������  수정이����������� ������������������  가능����������� ������������������  

Page 62: 도메인 주도 설계의 본질

Ubiquitous Language

Domain Model

Nowhere

Page 63: 도메인 주도 설계의 본질

63

코드는����������� ������������������  도메인의����������� ������������������  개념과����������� ������������������  도메인의����������� ������������������  언어를����������� ������������������  투영

Page 64: 도메인 주도 설계의 본질

부분����������� ������������������  품절����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

취소����������� ������������������  없음����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������   입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

전체����������� ������������������  품절����������� ������������������  

결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

도메인����������� ������������������  규칙

Page 65: 도메인 주도 설계의 본질

부분����������� ������������������  품절����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

취소����������� ������������������  없음����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������   입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

전체����������� ������������������  품절����������� ������������������  

결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

도메인����������� ������������������  규칙

CancelationRule

cancel(order)

NullCancelationRule

cancel(order)

FullCancelationRule

cancel(order)

PartialCancelationRule

cancel(order)

RefundCondition

check(order, deposit)

FullySOldOut

check(order, deposit)

ExceededDeposit

check(order, deposit)

PartiallySoldOut

check(order, deposit)

LackedDeposit

check(order, deposit)

RefundRule

refund(order, deposit)

PartialPayment RefundRule

refund(order, deposit)

DifferenceDeposit RefundRule

refund(order, deposit)

FullDeposit RefundRule

refund(order, deposit)

FullPayment RefundRule

refund(order, deposit)

Page 66: 도메인 주도 설계의 본질

도메인����������� ������������������  규칙

CancelationRule

cancel(order)

NullCancelationRule

cancel(order)

FullCancelationRule

cancel(order)

PartialCancelationRule

cancel(order)

RefundCondition

check(order, deposit)

FullySOldOut

check(order, deposit)

ExceededDeposit

check(order, deposit)

PartiallySoldOut

check(order, deposit)

LackedDeposit

check(order, deposit)

RefundRule

refund(order, deposit)

PartialPayment RefundRlke

refund(order, deposit)

DifferenceDeposit RefundRule

refund(order, deposit)

FullDeposit RefundRule

refund(order, deposit)

FullPayment RefundRule

refund(order, deposit)

=����������� ������������������  코드����������� ������������������  구조

Page 67: 도메인 주도 설계의 본질

코드를����������� ������������������  기반으로����������� ������������������  한����������� ������������������  커뮤니케이션은?

CancelationRule

Null CancelationRule

Full CancelationRule

Partial CancelationRule

RefundCondition

FullySOldOut

ExceededDeposit

PartiallySoldOut

LackedDeposit

RefundRule

PartialPayment RefundRlke

DifferenceDeposit RefundRule

FullDeposit RefundRule

FullPayment RefundRule

환불����������� ������������������  조건(RefundCondition)이����������� ������������������  입금초과(ExceededDeposit)라면����������� ������������������  입금차액����������� ������������������  환불규칙(DifferenceDepositRefundRule)에����������� ������������������  따라����������� ������������������  화불금액을����������� ������������������  계산한����������� ������������������  후����������� ������������������  ����������� ������������������  취소는����������� ������������������  하지����������� ������������������  않습니다(NullCancelationRule).

환불����������� ������������������  조건(RefundCondition)이����������� ������������������  전체����������� ������������������  품절(FullySoldOut)이라면����������� ������������������  결제금액을����������� ������������������  ����������� ������������������  전체����������� ������������������  환불(FullPaymentRefundRule)하고����������� ������������������  취소는����������� ������������������  하지����������� ������������������  않습니다(NullCancelationRule).����������� ������������������  

환불����������� ������������������  조건(RefundCondition)이����������� ������������������  부분����������� ������������������  품절(PartiallySoldOut)이라면����������� ������������������  결제금액을����������� ������������������  부분����������� ������������������  환불(PartialaymentRefundRule)하고����������� ������������������  전체����������� ������������������  주문을����������� ������������������  취소합니다(FullCancelationRule).����������� ������������������  

Page 68: 도메인 주도 설계의 본질

코드를����������� ������������������  기반으로����������� ������������������  한����������� ������������������  커뮤니케이션은?

환불����������� ������������������  조건(RefundCondition)이����������� ������������������  입금초과(ExceededDeposit)라면����������� ������������������  입금차액����������� ������������������  환불규칙(DifferenceDepositRefundRule)에����������� ������������������  따라����������� ������������������  화불금액을����������� ������������������  계산한����������� ������������������  후����������� ������������������  ����������� ������������������  취소는����������� ������������������  하지����������� ������������������  않습니다(NullCancelationRule).

환불����������� ������������������  조건(RefundCondition)이����������� ������������������  전체����������� ������������������  품절(FullySoldOut)이라면����������� ������������������  결제금액을����������� ������������������  ����������� ������������������  전체����������� ������������������  환불(FullPaymentRefundRule)하고����������� ������������������  취소는����������� ������������������  하지����������� ������������������  않습니다(NullCancelationRule).����������� ������������������  

환불����������� ������������������  조건(RefundCondition)이����������� ������������������  부분����������� ������������������  품절(PartiallySoldOut)이라면����������� ������������������  결제금액을����������� ������������������  부분����������� ������������������  환불(PartialaymentRefundRule)하고����������� ������������������  전체����������� ������������������  주문을����������� ������������������  취소합니다(FullCancelationRule).����������� ������������������  

도메인����������� ������������������  종속적인����������� ������������������  커뮤니케이션

Page 69: 도메인 주도 설계의 본질

도메인����������� ������������������  개념을����������� ������������������  기반으로����������� ������������������  한����������� ������������������  도메인����������� ������������������  전문가와의����������� ������������������  커뮤니케이션����������� ������������������  

Page 70: 도메인 주도 설계의 본질

전체����������� ������������������  품절����������� ������������������  

부분����������� ������������������  품절����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������   결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

취소����������� ������������������  없음����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

도메인����������� ������������������  규칙을����������� ������������������  기술한����������� ������������������  도메인����������� ������������������  모델

Page 71: 도메인 주도 설계의 본질

71

전체����������� ������������������  품절����������� ������������������  

부분����������� ������������������  품절����������� ������������������  

입금����������� ������������������  금액����������� ������������������  >����������� ������������������  결제����������� ������������������  금액����������� ������������������  

입금����������� ������������������  금액����������� ������������������  <����������� ������������������  결제����������� ������������������  금액����������� ������������������   결제금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

결제금액����������� ������������������  부분����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  차액����������� ������������������  환불����������� ������������������  

입금금액����������� ������������������  전체����������� ������������������  환불����������� ������������������  

취소����������� ������������������  없음����������� ������������������  

전체����������� ������������������  취소����������� ������������������  

부분����������� ������������������  취소����������� ������������������  

CancelationRule

cancel(order)

NullCancelationRule

cancel(order)

FullCancelationRule

cancel(order)

PartialCancelationRule

cancel(order)

RefundCondition

check(order, deposit)

FullySOldOut

check(order, deposit)

ExceededDeposit

check(order, deposit)

PartiallySoldOut

check(order, deposit)

LackedDeposit

check(order, deposit)

RefundRule

refund(order, deposit)

PartialPayment RefundRuke

refund(order, deposit)

DifferenceDeposit Refund

refund(order, deposit)

FullDeposit RefundRule

refund(order, deposit)

FullPayment RefundRull

refund(order, deposit)

도메인����������� ������������������  모델을����������� ������������������  반영한����������� ������������������  코드

Page 72: 도메인 주도 설계의 본질

도메인����������� ������������������  모델과����������� ������������������  공용����������� ������������������  언어를����������� ������������������  바탕으로����������� ������������������  ����������� ������������������  코드의����������� ������������������  이해����������� ������������������  및����������� ������������������  ����������� ������������������  수정����������� ������������������  가능

Page 73: 도메인 주도 설계의 본질

Ubiquitous Language

Domain Model

모든����������� ������������������  커뮤니케이션과����������� ������������������  코드����������� ������������������  

based on

based on

Page 74: 도메인 주도 설계의 본질

74

코드와����������� ������������������  ����������� ������������������  도메인����������� ������������������  모델����������� ������������������  간의����������� ������������������  조화

Page 75: 도메인 주도 설계의 본질

Model-Driven Design

Page 76: 도메인 주도 설계의 본질

Part - 4

패����������� ������������������  ����������� ������������������  턴����������� ������������������  

Page 77: 도메인 주도 설계의 본질

Entity

속성이����������� ������������������  아닌����������� ������������������  연속성과����������� ������������������  식별성을����������� ������������������  기준으로����������� ������������������  정의되는����������� ������������������  ����������� ������������������  도메인����������� ������������������  객체����������� ������������������  

Page 78: 도메인 주도 설계의 본질

Value Object

식별성이����������� ������������������  아닌����������� ������������������  속성을����������� ������������������  이용해����������� ������������������  정의되는����������� ������������������  불변����������� ������������������  객체����������� ������������������  

Page 79: 도메인 주도 설계의 본질

79

상품����������� ������������������  주문����������� ������������������  도메인����������� ������������������  

Page 80: 도메인 주도 설계의 본질

Domain����������� ������������������  Layer����������� ������������������  

Order DealItem OptionItem

Payment Status

Delivery Payment

Deal Option *

* *

1

Discount Coupon

* 1 1

Entity����������� ������������������   Value����������� ������������������  Object����������� ������������������  &����������� ������������������  

Page 81: 도메인 주도 설계의 본질

Aggregate

연관된����������� ������������������  Entity와����������� ������������������  Value����������� ������������������  Object의����������� ������������������  묶음����������� ������������������  일관성과����������� ������������������  트랜잭션,����������� ������������������  분산의����������� ������������������  단위����������� ������������������  캡슐화를����������� ������������������  통한����������� ������������������  복잡성����������� ������������������  관리����������� ������������������  

Page 82: 도메인 주도 설계의 본질

Domain����������� ������������������  Layer����������� ������������������  

Order DealItem OptionItem

Payment Status

Delivery Payment

Deal Option *

* *

1

Discount Coupon

* 1

1

Aggregate����������� ������������������  

Page 83: 도메인 주도 설계의 본질

83

Factory

생성하기����������� ������������������  복잡한����������� ������������������  Aggregate����������� ������������������  내의����������� ������������������  여러����������� ������������������  객체들을����������� ������������������  동시에����������� ������������������  생성����������� ������������������  생성시����������� ������������������  Aggregate의����������� ������������������  일관성����������� ������������������  유지����������� ������������������  

Page 84: 도메인 주도 설계의 본질

Order DealItem OptionItem

Payment Status

Delivery Payment

Deal Option *

* *

1

Discount Coupon

* 1

1

Factory����������� ������������������  OrderFactory

DealFactory Domain����������� ������������������  Layer����������� ������������������  

Page 85: 도메인 주도 설계의 본질

85

Repository

생성된����������� ������������������  Aggregate에����������� ������������������  대한����������� ������������������  영속성����������� ������������������  관리����������� ������������������  조회,����������� ������������������  등록,����������� ������������������  수정,삭제����������� ������������������  시����������� ������������������  Aggregate의����������� ������������������  일관성����������� ������������������  유지����������� ������������������  In-memory����������� ������������������  data����������� ������������������  store처럼����������� ������������������  행동����������� ������������������  

Page 86: 도메인 주도 설계의 본질

Order DealItem OptionItem

Payment Status

Delivery Payment

Deal Option *

* *

1

Discount Coupon

* 1

1

Repository����������� ������������������  OrderFactory

DealFactory Deal Repositoty

Order Reposior

Domain����������� ������������������  Layer����������� ������������������  

Page 87: 도메인 주도 설계의 본질

87

Bounded Context

특정한����������� ������������������  Domain����������� ������������������  Model이����������� ������������������  적용되는����������� ������������������  제한된����������� ������������������  영역����������� ������������������  경계����������� ������������������  내에선����������� ������������������  동일한����������� ������������������  모델을����������� ������������������  일관되게����������� ������������������  적용����������� ������������������  경계����������� ������������������  밖의����������� ������������������  일관성은����������� ������������������  고려����������� ������������������  대상이����������� ������������������  아님����������� ������������������  

Page 88: 도메인 주도 설계의 본질

Order DealItem OptionItem

Payment Status

Delivery Payment

Deal Option *

* *

1

Discount Coupon

* 1

1

Bounded����������� ������������������  Context����������� ������������������  

OrderFactory

DealFactory Deal Repositoty

Order Reposior

Domain����������� ������������������  Layer����������� ������������������  

Page 89: 도메인 주도 설계의 본질

89

Service

Domain����������� ������������������  Object에����������� ������������������  위치시키기����������� ������������������  어려운����������� ������������������  오퍼레이션을����������� ������������������  가지는����������� ������������������  객체����������� ������������������  여러����������� ������������������  Domain����������� ������������������  Object를����������� ������������������  다루는����������� ������������������  연산����������� ������������������  Service의����������� ������������������  오퍼레이션은����������� ������������������  일반적으로����������� ������������������  stateless����������� ������������������  

Page 90: 도메인 주도 설계의 본질

Order DealItem OptionItem

Payment Status

Delivery Payment

Deal Option *

* *

1

Discount Coupon

* 1

1

Service����������� ������������������  

OrderFactory

DealFactory Deal Repositoty

Order Reposior

Domain����������� ������������������  Layer����������� ������������������  

RefundService

Page 91: 도메인 주도 설계의 본질

Part - 5

결����������� ������������������  ����������� ������������������  론����������� ������������������  

Page 92: 도메인 주도 설계의 본질

도메인-주도����������� ������������������  설계에����������� ������������������  관한����������� ������������������  오해

Entity Value Object

Aggregate

Repository

Factory

Service

JUST PATTERNS

Page 93: 도메인 주도 설계의 본질

도메인에����������� ������������������  집중하고����������� ������������������  ����������� ������������������  도메인의����������� ������������������  개념을����������� ������������������  ����������� ������������������  

커뮤니케이션과����������� ������������������  코드로����������� ������������������  ����������� ������������������  부드럽게����������� ������������������  연결시키려는����������� ������������������  ����������� ������������������  

과정이����������� ������������������  도메인-주도����������� ������������������  설계의����������� ������������������  해심

Page 94: 도메인 주도 설계의 본질

기술이����������� ������������������  아닌����������� ������������������  도메인의����������� ������������������  소리에����������� ������������������  귀����������� ������������������  기울여라

Page 95: 도메인 주도 설계의 본질

95

Thank you