SlideShare a Scribd company logo
도메인 주도 설계
                Domain-Driven Design
                         Eric Evans
5장. 소프트웨어에서 표현되는 모델(일부)
                                     아꿈사
            http://cafe.naver.com/architect1
                                     안명환
               homepage: http://eritaka.net
                        twitter: @eritakas
소프트웨어에서 표현되는 모델
             MODEL-DRIVEN
                DESIGN




             모델을 표현

          VALUE
 ENTITY                SERVICE   MODULE
          OBJECT



• 객체의 의미에 따른 모델을 구분한다
연관관계
• 현실세계의 두 사물간의 관계
 – 다대다(*:*) 관계가 흔하다
 – 애초부터 양방향(bidirection)인 경우가 많다

• 현실세계를 그대로 모델링하면…
 – 구현과 유지보수가 복잡해진다
 – 해당 관계의 특성이 드러나지 않는다

• 결론: 가능한 한 관계를 제약하자!
연간관계 간소화 방법
1. 탐색 방향을 부여한다

2. 한정자(qualifier)를 추가해서 다중성
   (multiplicity)을 줄인다

3. 중요하지 않은 연관관계를 제거한다
 •   요구사항을 분석하여 설계를 단순하게 정제
1. 탐색 방향을 부여한다
• 조지 워싱턴이 대통령이었던 나라가 어디
  입니까?
• 미국의 대통령은 누구인가요?
      국가       국가


       대통령      대통령


       *        *
      사람       사람
2. 한정자를 추가하여
       다중성을 줄이자
• 미국의 대통령은 누구인가요?
• 1790년에 미국의 대통령은 누구인가요?


      국가        국가
                기간

       대통령       대통령


       *
      사람        사람
Entity
• 사전적 의미
 – 존재간의 서로 구별되는 것
 – 물질적 존재와는 상관없음


• Entity라는 용어가 혼란스러워도…
 – DB: ERD (Entity-Relationship Model)
 – J2EE: Entity Bean (실제 Entity와는 다르지만)


• 그래도 본질은 같습니다.
Entity가 된 에어에게…
• 내가 구매 버튼을 누르기 전에는 그는 다만
  하나의 고철 덩어리에 지나지 않았다.

• 내가 전원 버튼을 눌러 주었을 때 그는 나
  에게로 와서 진정 맥북에어가 되었다.


                이것은 오직 나만의 사자…
DDD – Entity Model
• 어떤 객체를 해당 객체의 식별성으로 정의할
  경우 Entity라고 한다
• Entity의 형태와 내용은 바뀔 수 있다.
• Entity의 정체성이 중요!

• 자바의 ‘==‘ 연산자와 같은 메모리 동등 비교
  는 Entity와 상관없다
• 개념적 속성이므로 언어에서 제공하는 자동화
  된 기능으로 대체할 수 없다.
Entity Modeling
• 속성이나 행위에 집중하지 말고 본질적인
  식별성에 중점을 두고 정의하라.
• 즉, 클래스 정의를 단순하게 하고 생명 주
  기의 연속성과 식별성에 집중하라.
  class Exam
                         class Exam

          Customer
                                 Customer
     -   고객ID                                       Business Line
     -   이름                 -   고객ID
     -   제품 분류              -   이름              -   제품 분류
     -   평균 매출액             -   전화번호            -   평균 매출액
                            -   주소




         Sales Contact
                                Sales Contact
     -   영업사원
     -   우선순위               -   영업사원
     -   전화번호               -   우선순위
     -   주소
Value Object
• 개념적 식별성을 갖지 않으면서 도메인의
  서술적 측면을 나타내는 객체

• 모든 것에 식별성을 부여하고 Entity로 관
  리한다면 복잡성이 증가

• DTO(Data Transfer Object)의 과거이름
  인 Value Object와는 상관없다
Value Object
• 개념적 완전성을 형성해야 함
 – 도메인 내에서 해당 개념을 온전히 표현해야
   한다 (Whole Value Pattern)

                                   class Exam



  class Exam                                    Customer

                                      -   고객ID
                                      -   이름
               Customer
                                      -   주소
     -   고객ID
     -   이름
     -   읍면동
     -   시군구
     -   도
                                                Address

                                          -   읍면동
                                          -   시군구
                                          -   도
Value Object 설계
• Value Object는 많아지는 경향이 있으므
  로 성능 최적화를 생각해야 함
• 객체를 안전하게 공유하기 위해서 불변적
  (immutable)이어야 한다
• 알고리즘이 포함되어 있을 수도 있다
• 구현 예            Flyweight Pattern을 이용한 최적화
  – .net 의 struct
끝?

아닙니다.
SERVICE부터는
다음 발표자…
Ad

More Related Content

What's hot (20)

Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄
Suhyeon Jo
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
habib_786
 
Introducing Kogito
Introducing KogitoIntroducing Kogito
Introducing Kogito
Red Hat Developers
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Edureka!
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
its_skm
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Araf Karsh Hamid
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
Andriy Buday
 
Angular interview questions
Angular interview questionsAngular interview questions
Angular interview questions
Goa App
 
Introduction to GitHub, Open Source and Tech Article
Introduction to GitHub, Open Source and Tech ArticleIntroduction to GitHub, Open Source and Tech Article
Introduction to GitHub, Open Source and Tech Article
PRIYATHAMDARISI
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Ryan Riley
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Hannah Farrugia
 
객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기
Young-Ho Cho
 
2019-02-20-ddd taiwan-community-iddd-studygroup-1st
2019-02-20-ddd taiwan-community-iddd-studygroup-1st2019-02-20-ddd taiwan-community-iddd-studygroup-1st
2019-02-20-ddd taiwan-community-iddd-studygroup-1st
Kim Kao
 
Why and How to Use Virtual DOM
Why and How to Use Virtual DOMWhy and How to Use Virtual DOM
Why and How to Use Virtual DOM
Daiwei Lu
 
Hexagonal architecture with Spring Boot [EPAM Java online conference]
Hexagonal architecture with Spring Boot [EPAM Java online conference]Hexagonal architecture with Spring Boot [EPAM Java online conference]
Hexagonal architecture with Spring Boot [EPAM Java online conference]
Mikalai Alimenkou
 
Clean code
Clean code Clean code
Clean code
Achintya Kumar
 
NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기
Hoyoung Choi
 
Arquitetura de Software Na Pratica
Arquitetura de Software Na PraticaArquitetura de Software Na Pratica
Arquitetura de Software Na Pratica
Alessandro Kieras
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
John Ferguson Smart Limited
 
Android Jetpack
Android Jetpack Android Jetpack
Android Jetpack
Tudor Sirbu
 
Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄
Suhyeon Jo
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
habib_786
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Edureka!
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
its_skm
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
Andriy Buday
 
Angular interview questions
Angular interview questionsAngular interview questions
Angular interview questions
Goa App
 
Introduction to GitHub, Open Source and Tech Article
Introduction to GitHub, Open Source and Tech ArticleIntroduction to GitHub, Open Source and Tech Article
Introduction to GitHub, Open Source and Tech Article
PRIYATHAMDARISI
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Ryan Riley
 
객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기
Young-Ho Cho
 
2019-02-20-ddd taiwan-community-iddd-studygroup-1st
2019-02-20-ddd taiwan-community-iddd-studygroup-1st2019-02-20-ddd taiwan-community-iddd-studygroup-1st
2019-02-20-ddd taiwan-community-iddd-studygroup-1st
Kim Kao
 
Why and How to Use Virtual DOM
Why and How to Use Virtual DOMWhy and How to Use Virtual DOM
Why and How to Use Virtual DOM
Daiwei Lu
 
Hexagonal architecture with Spring Boot [EPAM Java online conference]
Hexagonal architecture with Spring Boot [EPAM Java online conference]Hexagonal architecture with Spring Boot [EPAM Java online conference]
Hexagonal architecture with Spring Boot [EPAM Java online conference]
Mikalai Alimenkou
 
NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기
Hoyoung Choi
 
Arquitetura de Software Na Pratica
Arquitetura de Software Na PraticaArquitetura de Software Na Pratica
Arquitetura de Software Na Pratica
Alessandro Kieras
 
Android Jetpack
Android Jetpack Android Jetpack
Android Jetpack
Tudor Sirbu
 

Viewers also liked (6)

Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Young-Ho Cho
 
DDD 산책
DDD 산책DDD 산책
DDD 산책
Sungchul Park
 
도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)
Ashal aka JOKER
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질
Young-Ho Cho
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
beom kyun choi
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
beom kyun choi
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Young-Ho Cho
 
도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)
Ashal aka JOKER
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질
Young-Ho Cho
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
beom kyun choi
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
beom kyun choi
 
Ad

Similar to 아꿈사 DDD(Domain-Driven Design) 5장 소프트웨어에서 표현되는 모델 (20)

Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄
Suhyeon Jo
 
Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄
현 수
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
Gyuwon Yi
 
DDD start 1장
DDD start 1장DDD start 1장
DDD start 1장
Sunggon Song
 
Uml 세미나
Uml 세미나Uml 세미나
Uml 세미나
Daniel Shin
 
[강의] OOP 개요
[강의] OOP 개요[강의] OOP 개요
[강의] OOP 개요
Nohyun Kee
 
Sql developer 2nd
Sql developer 2ndSql developer 2nd
Sql developer 2nd
Minwoo Choi
 
객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx
Park Doil
 
4팀_객체지향 프로그래밍.pptx
4팀_객체지향 프로그래밍.pptx4팀_객체지향 프로그래밍.pptx
4팀_객체지향 프로그래밍.pptx
ssuser40c239
 
Object-Oriented Programming.pptx
 Object-Oriented Programming.pptx Object-Oriented Programming.pptx
Object-Oriented Programming.pptx
ssuserda17f6
 
데이터 모델링
데이터 모델링데이터 모델링
데이터 모델링
Choonghyun Yang
 
객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx
ssuser9eebcf
 
MSA_기초자료.pdf
MSA_기초자료.pdfMSA_기초자료.pdf
MSA_기초자료.pdf
Hyosang Hong
 
Sqlp 스터디
Sqlp 스터디Sqlp 스터디
Sqlp 스터디
lee4339
 
170222 창조경제혁신센터 기술사업화 과정에서의 비즈니스모델 민광동
170222 창조경제혁신센터 기술사업화 과정에서의 비즈니스모델 민광동170222 창조경제혁신센터 기술사업화 과정에서의 비즈니스모델 민광동
170222 창조경제혁신센터 기술사업화 과정에서의 비즈니스모델 민광동
Kwangdong Min
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)
명석 고
 
Whats
WhatsWhats
Whats
종현 정
 
Event Storming(이벤트 스토밍)
Event Storming(이벤트 스토밍)Event Storming(이벤트 스토밍)
Event Storming(이벤트 스토밍)
종일 김
 
Whats 사업계획서
Whats 사업계획서Whats 사업계획서
Whats 사업계획서
종현 정
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON
Younghan Kim
 
Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄
Suhyeon Jo
 
Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄
현 수
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
Gyuwon Yi
 
[강의] OOP 개요
[강의] OOP 개요[강의] OOP 개요
[강의] OOP 개요
Nohyun Kee
 
Sql developer 2nd
Sql developer 2ndSql developer 2nd
Sql developer 2nd
Minwoo Choi
 
객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx
Park Doil
 
4팀_객체지향 프로그래밍.pptx
4팀_객체지향 프로그래밍.pptx4팀_객체지향 프로그래밍.pptx
4팀_객체지향 프로그래밍.pptx
ssuser40c239
 
Object-Oriented Programming.pptx
 Object-Oriented Programming.pptx Object-Oriented Programming.pptx
Object-Oriented Programming.pptx
ssuserda17f6
 
데이터 모델링
데이터 모델링데이터 모델링
데이터 모델링
Choonghyun Yang
 
객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx
ssuser9eebcf
 
MSA_기초자료.pdf
MSA_기초자료.pdfMSA_기초자료.pdf
MSA_기초자료.pdf
Hyosang Hong
 
Sqlp 스터디
Sqlp 스터디Sqlp 스터디
Sqlp 스터디
lee4339
 
170222 창조경제혁신센터 기술사업화 과정에서의 비즈니스모델 민광동
170222 창조경제혁신센터 기술사업화 과정에서의 비즈니스모델 민광동170222 창조경제혁신센터 기술사업화 과정에서의 비즈니스모델 민광동
170222 창조경제혁신센터 기술사업화 과정에서의 비즈니스모델 민광동
Kwangdong Min
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)
명석 고
 
Event Storming(이벤트 스토밍)
Event Storming(이벤트 스토밍)Event Storming(이벤트 스토밍)
Event Storming(이벤트 스토밍)
종일 김
 
Whats 사업계획서
Whats 사업계획서Whats 사업계획서
Whats 사업계획서
종현 정
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON
Younghan Kim
 
Ad

아꿈사 DDD(Domain-Driven Design) 5장 소프트웨어에서 표현되는 모델

  • 1. 도메인 주도 설계 Domain-Driven Design Eric Evans 5장. 소프트웨어에서 표현되는 모델(일부) 아꿈사 http://cafe.naver.com/architect1 안명환 homepage: http://eritaka.net twitter: @eritakas
  • 2. 소프트웨어에서 표현되는 모델 MODEL-DRIVEN DESIGN 모델을 표현 VALUE ENTITY SERVICE MODULE OBJECT • 객체의 의미에 따른 모델을 구분한다
  • 3. 연관관계 • 현실세계의 두 사물간의 관계 – 다대다(*:*) 관계가 흔하다 – 애초부터 양방향(bidirection)인 경우가 많다 • 현실세계를 그대로 모델링하면… – 구현과 유지보수가 복잡해진다 – 해당 관계의 특성이 드러나지 않는다 • 결론: 가능한 한 관계를 제약하자!
  • 4. 연간관계 간소화 방법 1. 탐색 방향을 부여한다 2. 한정자(qualifier)를 추가해서 다중성 (multiplicity)을 줄인다 3. 중요하지 않은 연관관계를 제거한다 • 요구사항을 분석하여 설계를 단순하게 정제
  • 5. 1. 탐색 방향을 부여한다 • 조지 워싱턴이 대통령이었던 나라가 어디 입니까? • 미국의 대통령은 누구인가요? 국가 국가 대통령 대통령 * * 사람 사람
  • 6. 2. 한정자를 추가하여 다중성을 줄이자 • 미국의 대통령은 누구인가요? • 1790년에 미국의 대통령은 누구인가요? 국가 국가 기간 대통령 대통령 * 사람 사람
  • 7. Entity • 사전적 의미 – 존재간의 서로 구별되는 것 – 물질적 존재와는 상관없음 • Entity라는 용어가 혼란스러워도… – DB: ERD (Entity-Relationship Model) – J2EE: Entity Bean (실제 Entity와는 다르지만) • 그래도 본질은 같습니다.
  • 8. Entity가 된 에어에게… • 내가 구매 버튼을 누르기 전에는 그는 다만 하나의 고철 덩어리에 지나지 않았다. • 내가 전원 버튼을 눌러 주었을 때 그는 나 에게로 와서 진정 맥북에어가 되었다. 이것은 오직 나만의 사자…
  • 9. DDD – Entity Model • 어떤 객체를 해당 객체의 식별성으로 정의할 경우 Entity라고 한다 • Entity의 형태와 내용은 바뀔 수 있다. • Entity의 정체성이 중요! • 자바의 ‘==‘ 연산자와 같은 메모리 동등 비교 는 Entity와 상관없다 • 개념적 속성이므로 언어에서 제공하는 자동화 된 기능으로 대체할 수 없다.
  • 10. Entity Modeling • 속성이나 행위에 집중하지 말고 본질적인 식별성에 중점을 두고 정의하라. • 즉, 클래스 정의를 단순하게 하고 생명 주 기의 연속성과 식별성에 집중하라. class Exam class Exam Customer Customer - 고객ID Business Line - 이름 - 고객ID - 제품 분류 - 이름 - 제품 분류 - 평균 매출액 - 전화번호 - 평균 매출액 - 주소 Sales Contact Sales Contact - 영업사원 - 우선순위 - 영업사원 - 전화번호 - 우선순위 - 주소
  • 11. Value Object • 개념적 식별성을 갖지 않으면서 도메인의 서술적 측면을 나타내는 객체 • 모든 것에 식별성을 부여하고 Entity로 관 리한다면 복잡성이 증가 • DTO(Data Transfer Object)의 과거이름 인 Value Object와는 상관없다
  • 12. Value Object • 개념적 완전성을 형성해야 함 – 도메인 내에서 해당 개념을 온전히 표현해야 한다 (Whole Value Pattern) class Exam class Exam Customer - 고객ID - 이름 Customer - 주소 - 고객ID - 이름 - 읍면동 - 시군구 - 도 Address - 읍면동 - 시군구 - 도
  • 13. Value Object 설계 • Value Object는 많아지는 경향이 있으므 로 성능 최적화를 생각해야 함 • 객체를 안전하게 공유하기 위해서 불변적 (immutable)이어야 한다 • 알고리즘이 포함되어 있을 수도 있다 • 구현 예 Flyweight Pattern을 이용한 최적화 – .net 의 struct