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

Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Kyoung Up Jung
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기beom kyun choi
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계Jinho Yoo
 
[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩NHN FORWARD
 
Programming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. RavenProgramming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. RavenRyan Park
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유beom kyun choi
 
Extending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss ForgeExtending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss ForgeAntoine Sabot-Durand
 
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론Terry Cho
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기경원 이
 
Django로 쇼핑몰 만들자
Django로 쇼핑몰 만들자Django로 쇼핑몰 만들자
Django로 쇼핑몰 만들자Kyoung Up Jung
 
Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Minchul Jung
 
날로 먹는 Django admin 활용
날로 먹는 Django admin 활용날로 먹는 Django admin 활용
날로 먹는 Django admin 활용KyeongMook "Kay" Cha
 
Spring bootでweb バリデート編
Spring bootでweb バリデート編Spring bootでweb バリデート編
Spring bootでweb バリデート編なべ
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기Kyoung Up Jung
 
도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)Ashal aka JOKER
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012Daum DNA
 

La actualidad más candente (20)

Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계
 
[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩
 
Programming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. RavenProgramming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. Raven
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유
 
Extending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss ForgeExtending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss Forge
 
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
 
Django로 쇼핑몰 만들자
Django로 쇼핑몰 만들자Django로 쇼핑몰 만들자
Django로 쇼핑몰 만들자
 
Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1
 
날로 먹는 Django admin 활용
날로 먹는 Django admin 활용날로 먹는 Django admin 활용
날로 먹는 Django admin 활용
 
Spring bootでweb バリデート編
Spring bootでweb バリデート編Spring bootでweb バリデート編
Spring bootでweb バリデート編
 
Rich domain model
Rich domain modelRich domain model
Rich domain model
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기
 
도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012
 
Soap Vs Rest
Soap Vs RestSoap Vs Rest
Soap Vs Rest
 

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

Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄현 수
 
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
 
4팀_객체지향 프로그래밍.pptx
4팀_객체지향 프로그래밍.pptx4팀_객체지향 프로그래밍.pptx
4팀_객체지향 프로그래밍.pptxssuser40c239
 
객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptxPark Doil
 
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 사업계획서종현 정
 

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

Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄
 
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
 
4팀_객체지향 프로그래밍.pptx
4팀_객체지향 프로그래밍.pptx4팀_객체지향 프로그래밍.pptx
4팀_객체지향 프로그래밍.pptx
 
객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx객체지향 프로그래밍.pptx
객체지향 프로그래밍.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 사업계획서
 

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