SlideShare una empresa de Scribd logo
1 de 14
Descargar para leer sin conexión
도메인 주도 설계
                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부터는
다음 발표자…

Más contenido relacionado

La actualidad más candente

Domain driven design 8장
Domain driven design 8장Domain driven design 8장
Domain driven design 8장kukuman
 
Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Minchul Jung
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질Young-Ho Cho
 
Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄현 수
 
BM 발굴 프로젝트 - 비즈니스 모델편(개인 비즈니스 모델 포함)
BM 발굴 프로젝트 - 비즈니스 모델편(개인 비즈니스 모델 포함)BM 발굴 프로젝트 - 비즈니스 모델편(개인 비즈니스 모델 포함)
BM 발굴 프로젝트 - 비즈니스 모델편(개인 비즈니스 모델 포함)JeongHeon Lee
 
객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기Young-Ho Cho
 
Introduction au Domain Driven Design
Introduction au Domain Driven DesignIntroduction au Domain Driven Design
Introduction au Domain Driven DesignDNG Consulting
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)hyun soomyung
 
7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍Hyunsoo Jung
 
Krnet2018 kakao container cloud dkos
Krnet2018 kakao container cloud dkosKrnet2018 kakao container cloud dkos
Krnet2018 kakao container cloud dkosWon-Chon Jung
 
도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)Ashal aka JOKER
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EESabri Bouchlema
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introductionwojtek_s
 
Front end 웹사이트 성능 측정 및 개선
Front end 웹사이트 성능 측정 및 개선Front end 웹사이트 성능 측정 및 개선
Front end 웹사이트 성능 측정 및 개선기동 이
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향Young-Ho Cho
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민종민 김
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Tom Kocjan
 
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisantcluelessjoe
 

La actualidad más candente (20)

Domain driven design 8장
Domain driven design 8장Domain driven design 8장
Domain driven design 8장
 
Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질
 
Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄
 
BM 발굴 프로젝트 - 비즈니스 모델편(개인 비즈니스 모델 포함)
BM 발굴 프로젝트 - 비즈니스 모델편(개인 비즈니스 모델 포함)BM 발굴 프로젝트 - 비즈니스 모델편(개인 비즈니스 모델 포함)
BM 발굴 프로젝트 - 비즈니스 모델편(개인 비즈니스 모델 포함)
 
객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기
 
Introduction au Domain Driven Design
Introduction au Domain Driven DesignIntroduction au Domain Driven Design
Introduction au Domain Driven Design
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
 
7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍
 
Java Performance Tuning
Java Performance TuningJava Performance Tuning
Java Performance Tuning
 
Krnet2018 kakao container cloud dkos
Krnet2018 kakao container cloud dkosKrnet2018 kakao container cloud dkos
Krnet2018 kakao container cloud dkos
 
도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EE
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introduction
 
Front end 웹사이트 성능 측정 및 개선
Front end 웹사이트 성능 측정 및 개선Front end 웹사이트 성능 측정 및 개선
Front end 웹사이트 성능 측정 및 개선
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 

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

Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Suhyeon Jo
 
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 2ndMinwoo Choi
 
객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptxPark Doil
 
4팀_객체지향 프로그래밍.pptx
4팀_객체지향 프로그래밍.pptx4팀_객체지향 프로그래밍.pptx
4팀_객체지향 프로그래밍.pptxssuser40c239
 
Object-Oriented Programming.pptx
 Object-Oriented Programming.pptx Object-Oriented Programming.pptx
Object-Oriented Programming.pptxssuserda17f6
 
데이터 모델링
데이터 모델링데이터 모델링
데이터 모델링Choonghyun Yang
 
객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptxssuser9eebcf
 
MSA_기초자료.pdf
MSA_기초자료.pdfMSA_기초자료.pdf
MSA_기초자료.pdfHyosang 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 DEVONYounghan Kim
 

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

Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 
DDD start 1장
DDD start 1장DDD start 1장
DDD start 1장
 
Uml 세미나
Uml 세미나Uml 세미나
Uml 세미나
 
[강의] OOP 개요
[강의] OOP 개요[강의] OOP 개요
[강의] OOP 개요
 
Sql developer 2nd
Sql developer 2ndSql developer 2nd
Sql developer 2nd
 
객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx
 
4팀_객체지향 프로그래밍.pptx
4팀_객체지향 프로그래밍.pptx4팀_객체지향 프로그래밍.pptx
4팀_객체지향 프로그래밍.pptx
 
Object-Oriented Programming.pptx
 Object-Oriented Programming.pptx Object-Oriented Programming.pptx
Object-Oriented Programming.pptx
 
데이터 모델링
데이터 모델링데이터 모델링
데이터 모델링
 
객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx
 
MSA_기초자료.pdf
MSA_기초자료.pdfMSA_기초자료.pdf
MSA_기초자료.pdf
 
Sqlp 스터디
Sqlp 스터디Sqlp 스터디
Sqlp 스터디
 
DDD 산책
DDD 산책DDD 산책
DDD 산책
 
170222 창조경제혁신센터 기술사업화 과정에서의 비즈니스모델 민광동
170222 창조경제혁신센터 기술사업화 과정에서의 비즈니스모델 민광동170222 창조경제혁신센터 기술사업화 과정에서의 비즈니스모델 민광동
170222 창조경제혁신센터 기술사업화 과정에서의 비즈니스모델 민광동
 
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
 

아꿈사 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