SlideShare a Scribd company logo
1 of 30
DDD
정복기 1탄
@ jjo_ssoo
정복기에 시작하기에 앞서
■ 처음 들었던 DDD에서의 Domain?
Domain이 설계의 중심?
관계형 데이터베이스에서 테이블의 각 속성이 가질 수 있는 값의 집합?
인터넷상에서 개인이 소유하고 있는 인터넷 주소?
각자 생각하는 Domain은 다 다를 것!
DDD에서의 Domain은 다르다!
DDD ?
What is the “Domain Driven Design”?
Domain-
Driven-
DESIGN
저자 : Eric Evans
이 책의 한줄 평
DDD를 공부하는 이들에게 성서와
같은 존재 (해석도 여럿이다.)
by Gyuwon Yi
DDD 준비 단계
개발은 일정한 반복주기를 가지고,
반복주기를 토대로 진행되야 한다.
Domain 전문가와 밀접한 관계에 있어야 한다.
DDD
복잡한 도메인을 다뤄야 하는 SW 프로젝트에 박차를 가하는 것을 목표로 삼는
사고방식이자 우선순위의 모음
소프트웨어는 도메인의 핵심 구성과 각 구성요소를 담고 있어야 한다.
이렇게 도메인과 조화된 소프트웨어를 만드는게 DDD의 목적
STEPs
Analyze
Domain
Domain
Ubiquitous
Language
Bounded
Context
Bounded
Context
Context Map Shared Kernel Etc)
Define Entities,
Aggregates,
Services
Entities Value Object Aggregates Services Etc)
UI Application Domain Layer Infrastructure
Layerd
Architecture
ANALYZE DOMAIN
DOMAIN으로 부터 얻는 것
Domain
사용자가 프로그램을 사용하는 대상영역
SW는 도메인의 문제를 해결하기 위한 수단
하나의 도메인은 하위 도메인으로 나눌 수 있다.
DOMAIN MODEL
도메인의 구성요소를 개념적으로 표현한 것
SW 전문가와 도메인 전문가가 만드는 것
도메인에 대한 이해가 필수!
어떤 특정한 다이어그램이 아니라 다이어그램이 전달하고자 하는 아이디어
DOMAIN MODEL
모델은 도메인 지식의 정수만을 뽑아 낸 것
모델은 팀 구성원이 사용하는 언어의 중추
모델과 핵심 설계는 서로 영향을 주며 구체화된다.
Ubiquitous Language
서로의 용어를 이해해야만 한다!
도메인 모델을 만들기 위해선 모호함이 없어야 한다.
만들어진 Ubiquitous Language는 보관이 필수!
Ubiquitous Language
도메인 모델 용어
Bounded Context 이름
기술적 디자인
패턴
DDD에서 소개하는 여러 패턴 이름
대규모 구조 용어
기술적인 용어
개발자가
이해하지
못하는 업무
관련 용어
모든 이들이
사용하지만 설계에
나타나지 않는 업무
관련 용어
(모델에 속하는 후보)
설계의 기술적 측면
Ubiquitous Language
설계의 세부사항은 코드에 담긴다.
문서는 코드가 이미 잘 하고 있는 것을 하려고 해서는 안된다.
문서는 유효한 상태를 유지하고 최신 내용을 담고있어야 한다.
QUICKLY MODELING
From Domain
Modeling Example
영화 예매 시스템
1. Reservation은 영화 정보ID, 좌석 정보, 요금정보를 갖는다.
…
Reservation : 영화 예매 정보, Movie: 영화 정보, Sitting : 좌석 정보, Rate: 요금 정보등
Modeling Example
Reservation Model (이거보다 훨씬 풍성해져야 한다)
Reservation
ID
MovieID
Sitting
Rate
Enitity
소프트웨어가 여러 과정을 거치는 과정에도
동일한 값을 유지하는 식별자를 지닌 유형의
객체
“Entity의 정체성에 초점을 맞추어야 한다.
의미에 따라 Entity를 분류한다면 모델이
더욱 투명해지고 구현은 견고해질 것이다.”
By Eric Evans
Value Object
개념적 식별성이 없는, 어떤 특징을 묘사하는
객체
한번 만들어 지면 바뀌지 않는 객체
값 자체에만 의미가 있다.
Aggregate
일관성을 공유하는 데이터 집합
일관성을 유지해야될 객체들을 묶어 놓은 것
Root Entity : 접근 범위에 있는 가장 상위
Entity
Aggregate은 Root Entity만을 통해
외부에서 접근 할 수 있다.
Aggregate
필요성
연관 관계를 줄이면서 복잡도가 감소한다.
많은 도메인 모델을 간단하고 이해가능한
수준으로 만들어 줄 수 있다.
Modeling Example
Reservation Aggregate
<<Value Object>>
Rate
…
<<Entity>>
(Root)
Reservation
Id: Guid
MovieId: Guid
Sitting : Sit
Rate : Rate
<<Value Object>>
Sit
…
Effective Modeling by Eric Evans
모델과 구현의 연계
모델을 기반으로 하는 언어 정제
풍부한 지식이 담긴 모델 기반
모델의 정제
브레인 스토밍과 실험
지속적인 학습
DDD를 왜 해야하는지?
놓치기 쉬운 이유
Why DDD?
DDD 발표를 준비하면서 많은 내용들의 글을 보았지만 DDD에 대한 요소들의 설명은 많이
찾아 볼 수 있었다.
하지만… 요소들의 설명들만큼 찾기 힘들었던 DDD의 존재이유….
덕분에 Eric Evans 님의 말을 이해하려고 노력함
Eric Evans 가 말한 Domain
하나의 도메인은 세상의 어떤것!
우리가 이해하기 위해 혼신의 힘을 다해야만 하는 가장 중요한 부분!
힘있고 유연한 소프트웨어를 만들게 해준다!
내가 생각하는 DDD의 장점
3. 어느 분야나 트렌드는 변한다.
DDD로 잘 설계 되어있는 소프트웨어는 변하는 Trend에 재빠르게 진화할 수 있는
소프트웨어가 될 수 있다.
1. 복잡한 설계를 잘 나누는 데에 중점을 둔다.
2. DDD는 도메인 전문가와 소통을 중요하게 여긴다.
그래서 도메인이 무엇을 하고자 하는지에 명확해지기를 DDD가 유도한다.
TO BE CONTINUED
2탄 Bounded Context: 모델 무결성에 관하여
THANK YOU
DDD 정복기 1탄 끝
@ jjo_ssoo

More Related Content

What's hot

로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법Jeongsang Baek
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019devCAT Studio, NEXON
 
JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리KwangSeob Jeong
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
 
Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄Suhyeon Jo
 
AngularJS Architecture
AngularJS ArchitectureAngularJS Architecture
AngularJS ArchitectureEyal Vardi
 
Screen Space Decals in Warhammer 40,000: Space Marine
Screen Space Decals in Warhammer 40,000: Space MarineScreen Space Decals in Warhammer 40,000: Space Marine
Screen Space Decals in Warhammer 40,000: Space MarinePope Kim
 
Asynchronous Programming at Netflix
Asynchronous Programming at NetflixAsynchronous Programming at Netflix
Asynchronous Programming at NetflixC4Media
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 Amazon Web Services Korea
 
Agile, User Stories, Domain Driven Design
Agile, User Stories, Domain Driven DesignAgile, User Stories, Domain Driven Design
Agile, User Stories, Domain Driven DesignAraf Karsh Hamid
 
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성KwangSeob Jeong
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignRyan Riley
 
Behavioral Design Patterns
Behavioral Design PatternsBehavioral Design Patterns
Behavioral Design PatternsLidan Hifi
 
Jetpack Compose a new way to implement UI on Android
Jetpack Compose a new way to implement UI on AndroidJetpack Compose a new way to implement UI on Android
Jetpack Compose a new way to implement UI on AndroidNelson Glauber Leal
 
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트Amazon Web Services Korea
 

What's hot (20)

로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
 
Vertical Slicing
Vertical SlicingVertical Slicing
Vertical Slicing
 
JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄
 
AngularJS Architecture
AngularJS ArchitectureAngularJS Architecture
AngularJS Architecture
 
Screen Space Decals in Warhammer 40,000: Space Marine
Screen Space Decals in Warhammer 40,000: Space MarineScreen Space Decals in Warhammer 40,000: Space Marine
Screen Space Decals in Warhammer 40,000: Space Marine
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Asynchronous Programming at Netflix
Asynchronous Programming at NetflixAsynchronous Programming at Netflix
Asynchronous Programming at Netflix
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018 게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기::최유정::AWS Summit Seoul 2018
 
Domain Driven Design 101
Domain Driven Design 101Domain Driven Design 101
Domain Driven Design 101
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
Agile, User Stories, Domain Driven Design
Agile, User Stories, Domain Driven DesignAgile, User Stories, Domain Driven Design
Agile, User Stories, Domain Driven Design
 
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Behavioral Design Patterns
Behavioral Design PatternsBehavioral Design Patterns
Behavioral Design Patterns
 
Jetpack Compose a new way to implement UI on Android
Jetpack Compose a new way to implement UI on AndroidJetpack Compose a new way to implement UI on Android
Jetpack Compose a new way to implement UI on Android
 
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
 

Similar to Domain-Driven-Design 정복기 1탄

DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)명석 고
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기Sunghyouk Bae
 
게임 기획과 Oop
게임 기획과 Oop게임 기획과 Oop
게임 기획과 Oopsnugdc
 
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기NAVER Engineering
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호용호 최
 
객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고HeechanLee6
 
[14] Material Design 의 철학과 적용 사례
[14] Material Design 의 철학과 적용 사례[14] Material Design 의 철학과 적용 사례
[14] Material Design 의 철학과 적용 사례NAVER Engineering
 
Ii.객체지향 1들어가기
Ii.객체지향 1들어가기Ii.객체지향 1들어가기
Ii.객체지향 1들어가기guest77f171ae
 
GloVe:Global vectors for word representation
GloVe:Global vectors for word representationGloVe:Global vectors for word representation
GloVe:Global vectors for word representationkeunbong kwak
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
0126 패턴 랭귀지 ios 가이드라인
0126 패턴 랭귀지  ios 가이드라인0126 패턴 랭귀지  ios 가이드라인
0126 패턴 랭귀지 ios 가이드라인Hyunjeong Lee
 
Data oriented design
Data oriented designData oriented design
Data oriented designSangwook Kwon
 
클린 아키텍처 살짝 적용기
클린 아키텍처 살짝 적용기클린 아키텍처 살짝 적용기
클린 아키텍처 살짝 적용기Younghyun Kim
 
아꿈사 DDD(Domain-Driven Design) 5장 소프트웨어에서 표현되는 모델
아꿈사 DDD(Domain-Driven Design) 5장 소프트웨어에서 표현되는 모델아꿈사 DDD(Domain-Driven Design) 5장 소프트웨어에서 표현되는 모델
아꿈사 DDD(Domain-Driven Design) 5장 소프트웨어에서 표현되는 모델명환 안
 
예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기수보 김
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
도메인주도설계
도메인주도설계도메인주도설계
도메인주도설계Wonjun Hwang
 
격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it goChris Ohk
 

Similar to Domain-Driven-Design 정복기 1탄 (20)

DDD 산책
DDD 산책DDD 산책
DDD 산책
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기
 
게임 기획과 Oop
게임 기획과 Oop게임 기획과 Oop
게임 기획과 Oop
 
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호
 
객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고
 
[14] Material Design 의 철학과 적용 사례
[14] Material Design 의 철학과 적용 사례[14] Material Design 의 철학과 적용 사례
[14] Material Design 의 철학과 적용 사례
 
Ii.객체지향 1들어가기
Ii.객체지향 1들어가기Ii.객체지향 1들어가기
Ii.객체지향 1들어가기
 
GloVe:Global vectors for word representation
GloVe:Global vectors for word representationGloVe:Global vectors for word representation
GloVe:Global vectors for word representation
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
0126 패턴 랭귀지 ios 가이드라인
0126 패턴 랭귀지  ios 가이드라인0126 패턴 랭귀지  ios 가이드라인
0126 패턴 랭귀지 ios 가이드라인
 
Data oriented design
Data oriented designData oriented design
Data oriented design
 
클린 아키텍처 살짝 적용기
클린 아키텍처 살짝 적용기클린 아키텍처 살짝 적용기
클린 아키텍처 살짝 적용기
 
아꿈사 DDD(Domain-Driven Design) 5장 소프트웨어에서 표현되는 모델
아꿈사 DDD(Domain-Driven Design) 5장 소프트웨어에서 표현되는 모델아꿈사 DDD(Domain-Driven Design) 5장 소프트웨어에서 표현되는 모델
아꿈사 DDD(Domain-Driven Design) 5장 소프트웨어에서 표현되는 모델
 
예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
도메인주도설계
도메인주도설계도메인주도설계
도메인주도설계
 
격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go
 

Domain-Driven-Design 정복기 1탄

  • 2. 정복기에 시작하기에 앞서 ■ 처음 들었던 DDD에서의 Domain? Domain이 설계의 중심? 관계형 데이터베이스에서 테이블의 각 속성이 가질 수 있는 값의 집합? 인터넷상에서 개인이 소유하고 있는 인터넷 주소? 각자 생각하는 Domain은 다 다를 것! DDD에서의 Domain은 다르다!
  • 3. DDD ? What is the “Domain Driven Design”?
  • 4. Domain- Driven- DESIGN 저자 : Eric Evans 이 책의 한줄 평 DDD를 공부하는 이들에게 성서와 같은 존재 (해석도 여럿이다.) by Gyuwon Yi
  • 5. DDD 준비 단계 개발은 일정한 반복주기를 가지고, 반복주기를 토대로 진행되야 한다. Domain 전문가와 밀접한 관계에 있어야 한다.
  • 6. DDD 복잡한 도메인을 다뤄야 하는 SW 프로젝트에 박차를 가하는 것을 목표로 삼는 사고방식이자 우선순위의 모음 소프트웨어는 도메인의 핵심 구성과 각 구성요소를 담고 있어야 한다. 이렇게 도메인과 조화된 소프트웨어를 만드는게 DDD의 목적
  • 7. STEPs Analyze Domain Domain Ubiquitous Language Bounded Context Bounded Context Context Map Shared Kernel Etc) Define Entities, Aggregates, Services Entities Value Object Aggregates Services Etc) UI Application Domain Layer Infrastructure Layerd Architecture
  • 9.
  • 10. Domain 사용자가 프로그램을 사용하는 대상영역 SW는 도메인의 문제를 해결하기 위한 수단 하나의 도메인은 하위 도메인으로 나눌 수 있다.
  • 11. DOMAIN MODEL 도메인의 구성요소를 개념적으로 표현한 것 SW 전문가와 도메인 전문가가 만드는 것 도메인에 대한 이해가 필수! 어떤 특정한 다이어그램이 아니라 다이어그램이 전달하고자 하는 아이디어
  • 12. DOMAIN MODEL 모델은 도메인 지식의 정수만을 뽑아 낸 것 모델은 팀 구성원이 사용하는 언어의 중추 모델과 핵심 설계는 서로 영향을 주며 구체화된다.
  • 13. Ubiquitous Language 서로의 용어를 이해해야만 한다! 도메인 모델을 만들기 위해선 모호함이 없어야 한다. 만들어진 Ubiquitous Language는 보관이 필수!
  • 14. Ubiquitous Language 도메인 모델 용어 Bounded Context 이름 기술적 디자인 패턴 DDD에서 소개하는 여러 패턴 이름 대규모 구조 용어 기술적인 용어 개발자가 이해하지 못하는 업무 관련 용어 모든 이들이 사용하지만 설계에 나타나지 않는 업무 관련 용어 (모델에 속하는 후보) 설계의 기술적 측면
  • 15. Ubiquitous Language 설계의 세부사항은 코드에 담긴다. 문서는 코드가 이미 잘 하고 있는 것을 하려고 해서는 안된다. 문서는 유효한 상태를 유지하고 최신 내용을 담고있어야 한다.
  • 17. Modeling Example 영화 예매 시스템 1. Reservation은 영화 정보ID, 좌석 정보, 요금정보를 갖는다. … Reservation : 영화 예매 정보, Movie: 영화 정보, Sitting : 좌석 정보, Rate: 요금 정보등
  • 18. Modeling Example Reservation Model (이거보다 훨씬 풍성해져야 한다) Reservation ID MovieID Sitting Rate
  • 19. Enitity 소프트웨어가 여러 과정을 거치는 과정에도 동일한 값을 유지하는 식별자를 지닌 유형의 객체 “Entity의 정체성에 초점을 맞추어야 한다. 의미에 따라 Entity를 분류한다면 모델이 더욱 투명해지고 구현은 견고해질 것이다.” By Eric Evans
  • 20. Value Object 개념적 식별성이 없는, 어떤 특징을 묘사하는 객체 한번 만들어 지면 바뀌지 않는 객체 값 자체에만 의미가 있다.
  • 21. Aggregate 일관성을 공유하는 데이터 집합 일관성을 유지해야될 객체들을 묶어 놓은 것 Root Entity : 접근 범위에 있는 가장 상위 Entity Aggregate은 Root Entity만을 통해 외부에서 접근 할 수 있다.
  • 22. Aggregate 필요성 연관 관계를 줄이면서 복잡도가 감소한다. 많은 도메인 모델을 간단하고 이해가능한 수준으로 만들어 줄 수 있다.
  • 23. Modeling Example Reservation Aggregate <<Value Object>> Rate … <<Entity>> (Root) Reservation Id: Guid MovieId: Guid Sitting : Sit Rate : Rate <<Value Object>> Sit …
  • 24. Effective Modeling by Eric Evans 모델과 구현의 연계 모델을 기반으로 하는 언어 정제 풍부한 지식이 담긴 모델 기반 모델의 정제 브레인 스토밍과 실험 지속적인 학습
  • 26. Why DDD? DDD 발표를 준비하면서 많은 내용들의 글을 보았지만 DDD에 대한 요소들의 설명은 많이 찾아 볼 수 있었다. 하지만… 요소들의 설명들만큼 찾기 힘들었던 DDD의 존재이유…. 덕분에 Eric Evans 님의 말을 이해하려고 노력함
  • 27. Eric Evans 가 말한 Domain 하나의 도메인은 세상의 어떤것! 우리가 이해하기 위해 혼신의 힘을 다해야만 하는 가장 중요한 부분! 힘있고 유연한 소프트웨어를 만들게 해준다!
  • 28. 내가 생각하는 DDD의 장점 3. 어느 분야나 트렌드는 변한다. DDD로 잘 설계 되어있는 소프트웨어는 변하는 Trend에 재빠르게 진화할 수 있는 소프트웨어가 될 수 있다. 1. 복잡한 설계를 잘 나누는 데에 중점을 둔다. 2. DDD는 도메인 전문가와 소통을 중요하게 여긴다. 그래서 도메인이 무엇을 하고자 하는지에 명확해지기를 DDD가 유도한다.
  • 29. TO BE CONTINUED 2탄 Bounded Context: 모델 무결성에 관하여
  • 30. THANK YOU DDD 정복기 1탄 끝 @ jjo_ssoo