SlideShare une entreprise Scribd logo
1  sur  18
Domain Driven Design8장 이수안(inch772@naver.com) 아꿈사(café.naver.com/architect1)
더 심층적인 통찰력을 향한 리팩토링 3장 소개
우리가 알고 있는 리팩토링 "매우 상세한 수준에서 코드의 가독성을 높이거나 개선하려는 기계적인 변경에 초점을 맞춘다"
Refactoring 마이크로 리팩토링 카탈로그 코드 자체에서 발견되는 문제를 해결하는 것이 목표
패턴을 활용한 리팩토링 개발자가 디자인 패턴을 적용해야 한다고 판단 했을 때 따라야 할 리팩토링 절차에 대한 높은 수준 목표 제시 설계 품질을 기술적 관점에서 바라봄
심층 모델을 향한 리팩토링 What? 시스템의 생존력에 가장 큰 영향을 미치는 리팩토링 When ? 도메인에 대한 새로운 통찰력을 얻었을 때 수행 How ? 코드를 사용해 모델이 표현하고자 하는 바를 명확하게 드러내고자 수행  리팩토링의 목표는 개발자가 단순히 코드가 수행 하는 바를 이해하는 것뿐만 아니라 왜 그렇게 수행 되는지를 이해하고 도메인 전문가와 의사소통에 이를 연결 시키는 것이다.
심층 모델(Deep Model)이란? 도메인의 피상적인 측면을 배제하고 도메인 전문가의 주요 관심사와 가장 적절한 지식을 알기 쉽게 표현하는 모델 추상적인 요소를 포함하지만 문제의 핵심을 관통하는 구체적인 요소를 포함 예) 선박과 컨테이너가 포함된 객체 모델 초기 아이디어로 사용 -> 여러번의 반복주기-> 선박운항 과 "선하증권"모델 부각 (선백/컨테이너는 모델에 누락)
심층 모델/유연한 설계 지속적 리팩토링을 수행하려면 설계 자체가 변경을 지원 해야됨   "유연한 설계"(supple design)와 이를 달성하기 위한 접근법 10장에서 소개 예)낡은 야구글러브  구부러지는 지점 유연해짐 - 그 외 부분은 딱딱해서 손을 보호 출처 : http://suhyeonkwon.blog.me/100099740800
발견과정 9장 "암시적인 개념을 명시적으로 "  도메인의 중심 개념을 담고 있는 모델을 확보하고 설계에 반영하는 법  10장 "유연한 설계“  유연하고 쉽게 확장할 수 있는 소프트웨어를 작성하는 방법 11장 ~12장  분석 패턴과, 디자인 패턴을 적용하는 방법을 설명
8장 도약 사례 소개
리팩토링 효과 서서히 습득한 지식은 소규모 리팩토링을 통해 드러난다 쌓인 지식은 어느 순간 중요한 통찰로서 프로젝트 전체에 영향을 미친다
도약의 사례소개 여러 대출회사가 모여 퍼실리티(facility)를 지원할 지원할 자금을 공동으로 출자하는 채권 은행단 구현 퍼실리티란? 돈을 대출해 줄 회사와의 매매 계약 신용카드 예 신용카드 한도 : 사전 협의된 금액까지 빌릴 수 있는 퍼실리티 신용카드 사용의 미 청구 금액은 퍼실리티에 대한 차용액이 되며 대출 총액을 증가시킴
서서히 지식 쌓아가기 1. 대출 회사 지분이 고정적이라는 가정 2. but. 대출금  제공 받은 투자 회사는 일반적으로 더 많은 지분에 해당 하는 금액을 제공할 수 있음 핵심을 관통 하지 못하여 알고리즘은 복잡해지고 미묘한 반올림 불일치 문제 발생 됨
도약
PIE 그래프를 통한 새로운 모델을 시각화 하고 다양한 시나리오 검증
지분 총액(Share Pie)를 사용한 Loan 모델 생성
결과 업무 전문가들도 쉽게 이해할 수 있는 모델이 생김 복잡한 반올림 문제도 자동 해결 됨 심층모델의명확성/단순함 UBIUITUOS LANGUAGE 기반 의사소통 더 나은 모델링으로 도약
정리 우리가 알고 있는 수준의 리팩토링은 코드레벨로 접근하는 마이크로리팩토링 보다 시스템의 생존력에 영향을 미칠 수 있는 큰 관점의 접근법을 심층 모델을 향한 리팩토링 심층 모델은 핵심을 관통하는 구체적인 요소를 포함하면서 알기 쉽게 표현한 모델  심층 모델의 발견과정은 기반 지식을 쌓다 어느순간도약 시점을 거쳐 발견하게 된다.

Contenu connexe

Tendances

Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignYoung-Ho Cho
 
Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#Pascal Laurin
 
객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기Young-Ho Cho
 
Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Minchul Jung
 
Roles, Responsibilities, Collaborations
Roles, Responsibilities, CollaborationsRoles, Responsibilities, Collaborations
Roles, Responsibilities, CollaborationsYoung-Ho Cho
 
Domain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal ArchitectureDomain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal ArchitectureCrishantha Nanayakkara
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
애플리케이션 아키텍처와 객체지향
애플리케이션 아키텍처와 객체지향 애플리케이션 아키텍처와 객체지향
애플리케이션 아키텍처와 객체지향 Young-Ho Cho
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)beom kyun choi
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignRyan Riley
 
Introducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemashIntroducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemashSteven Smith
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계Jinho Yoo
 
[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)용호 최
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Tom Kocjan
 
도메인 주도 설계 (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 20151128beom kyun choi
 

Tendances (20)

Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#
 
객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기
 
Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1
 
Roles, Responsibilities, Collaborations
Roles, Responsibilities, CollaborationsRoles, Responsibilities, Collaborations
Roles, Responsibilities, Collaborations
 
Domain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal ArchitectureDomain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal Architecture
 
Rich domain model
Rich domain modelRich domain model
Rich domain model
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
애플리케이션 아키텍처와 객체지향
애플리케이션 아키텍처와 객체지향 애플리케이션 아키텍처와 객체지향
애플리케이션 아키텍처와 객체지향
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Introducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemashIntroducing Domain Driven Design - codemash
Introducing Domain Driven Design - codemash
 
DDD Introduction
DDD IntroductionDDD Introduction
DDD Introduction
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계
 
[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)
 
우아한 객체지향
우아한 객체지향우아한 객체지향
우아한 객체지향
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
 

Similaire à Domain driven design 8장

도메인주도설계
도메인주도설계도메인주도설계
도메인주도설계Wonjun Hwang
 
3부. 더 심층적인 통찰력을 향한 리팩터링 (8장 도약)
3부. 더 심층적인 통찰력을 향한 리팩터링 (8장 도약)3부. 더 심층적인 통찰력을 향한 리팩터링 (8장 도약)
3부. 더 심층적인 통찰력을 향한 리팩터링 (8장 도약)Choonghyun Yang
 
Event storming based msa training commerce example add_handson_v3
Event storming based msa training commerce example add_handson_v3Event storming based msa training commerce example add_handson_v3
Event storming based msa training commerce example add_handson_v3uEngine Solutions
 
토종 개발자가 바라본 실리콘밸리 개발 트랜드
토종 개발자가 바라본 실리콘밸리 개발 트랜드토종 개발자가 바라본 실리콘밸리 개발 트랜드
토종 개발자가 바라본 실리콘밸리 개발 트랜드Justin Park
 
[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략Ji-Woong Choi
 
2016 Staccato track3 Android를 더 잘 개발하려면? (MVP, MVVM, Clean Architecture)
2016 Staccato track3 Android를 더 잘 개발하려면? (MVP, MVVM, Clean Architecture)2016 Staccato track3 Android를 더 잘 개발하려면? (MVP, MVVM, Clean Architecture)
2016 Staccato track3 Android를 더 잘 개발하려면? (MVP, MVVM, Clean Architecture)승용 윤
 
Wwc2016 기획디자인개발그리고프로토
Wwc2016 기획디자인개발그리고프로토Wwc2016 기획디자인개발그리고프로토
Wwc2016 기획디자인개발그리고프로토keesung kim
 
[Atlassian meets dev ops and itsm] infrastructure for devops
[Atlassian meets dev ops and itsm] infrastructure for devops[Atlassian meets dev ops and itsm] infrastructure for devops
[Atlassian meets dev ops and itsm] infrastructure for devopsOpen Source Consulting
 
프로젝트관리­ 2회(블로그용)
프로젝트관리­ 2회(블로그용)프로젝트관리­ 2회(블로그용)
프로젝트관리­ 2회(블로그용)yonsei87
 
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)Eunchan Lee
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksSunuk Park
 
SLiPP 스터디 - MSA
SLiPP 스터디 - MSASLiPP 스터디 - MSA
SLiPP 스터디 - MSADaekwon Kang
 
Dev rookie codecomplete-1
Dev rookie codecomplete-1Dev rookie codecomplete-1
Dev rookie codecomplete-1대영 노
 
개발자, 성장하는 '척' 말고, 진짜 성장하기
개발자, 성장하는 '척' 말고, 진짜 성장하기개발자, 성장하는 '척' 말고, 진짜 성장하기
개발자, 성장하는 '척' 말고, 진짜 성장하기Donghyun Cho
 
자본시장IT의 미래 오픈소스에서 답을 구하라
자본시장IT의 미래 오픈소스에서 답을 구하라자본시장IT의 미래 오픈소스에서 답을 구하라
자본시장IT의 미래 오픈소스에서 답을 구하라heungjae Kim
 
C Language II
C Language IIC Language II
C Language IISuho Kwon
 
SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션DoHyun Jung
 
클라우드 네이티브로의 전환을 위한 여정
클라우드 네이티브로의 전환을 위한 여정클라우드 네이티브로의 전환을 위한 여정
클라우드 네이티브로의 전환을 위한 여정VMware Tanzu Korea
 
시간 있으면 설계나 합시다
시간 있으면 설계나 합시다시간 있으면 설계나 합시다
시간 있으면 설계나 합시다codevania
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringSuwon Chae
 

Similaire à Domain driven design 8장 (20)

도메인주도설계
도메인주도설계도메인주도설계
도메인주도설계
 
3부. 더 심층적인 통찰력을 향한 리팩터링 (8장 도약)
3부. 더 심층적인 통찰력을 향한 리팩터링 (8장 도약)3부. 더 심층적인 통찰력을 향한 리팩터링 (8장 도약)
3부. 더 심층적인 통찰력을 향한 리팩터링 (8장 도약)
 
Event storming based msa training commerce example add_handson_v3
Event storming based msa training commerce example add_handson_v3Event storming based msa training commerce example add_handson_v3
Event storming based msa training commerce example add_handson_v3
 
토종 개발자가 바라본 실리콘밸리 개발 트랜드
토종 개발자가 바라본 실리콘밸리 개발 트랜드토종 개발자가 바라본 실리콘밸리 개발 트랜드
토종 개발자가 바라본 실리콘밸리 개발 트랜드
 
[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략
 
2016 Staccato track3 Android를 더 잘 개발하려면? (MVP, MVVM, Clean Architecture)
2016 Staccato track3 Android를 더 잘 개발하려면? (MVP, MVVM, Clean Architecture)2016 Staccato track3 Android를 더 잘 개발하려면? (MVP, MVVM, Clean Architecture)
2016 Staccato track3 Android를 더 잘 개발하려면? (MVP, MVVM, Clean Architecture)
 
Wwc2016 기획디자인개발그리고프로토
Wwc2016 기획디자인개발그리고프로토Wwc2016 기획디자인개발그리고프로토
Wwc2016 기획디자인개발그리고프로토
 
[Atlassian meets dev ops and itsm] infrastructure for devops
[Atlassian meets dev ops and itsm] infrastructure for devops[Atlassian meets dev ops and itsm] infrastructure for devops
[Atlassian meets dev ops and itsm] infrastructure for devops
 
프로젝트관리­ 2회(블로그용)
프로젝트관리­ 2회(블로그용)프로젝트관리­ 2회(블로그용)
프로젝트관리­ 2회(블로그용)
 
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworks
 
SLiPP 스터디 - MSA
SLiPP 스터디 - MSASLiPP 스터디 - MSA
SLiPP 스터디 - MSA
 
Dev rookie codecomplete-1
Dev rookie codecomplete-1Dev rookie codecomplete-1
Dev rookie codecomplete-1
 
개발자, 성장하는 '척' 말고, 진짜 성장하기
개발자, 성장하는 '척' 말고, 진짜 성장하기개발자, 성장하는 '척' 말고, 진짜 성장하기
개발자, 성장하는 '척' 말고, 진짜 성장하기
 
자본시장IT의 미래 오픈소스에서 답을 구하라
자본시장IT의 미래 오픈소스에서 답을 구하라자본시장IT의 미래 오픈소스에서 답을 구하라
자본시장IT의 미래 오픈소스에서 답을 구하라
 
C Language II
C Language IIC Language II
C Language II
 
SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션
 
클라우드 네이티브로의 전환을 위한 여정
클라우드 네이티브로의 전환을 위한 여정클라우드 네이티브로의 전환을 위한 여정
클라우드 네이티브로의 전환을 위한 여정
 
시간 있으면 설계나 합시다
시간 있으면 설계나 합시다시간 있으면 설계나 합시다
시간 있으면 설계나 합시다
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: Refactoring
 

Domain driven design 8장

  • 1. Domain Driven Design8장 이수안(inch772@naver.com) 아꿈사(café.naver.com/architect1)
  • 2. 더 심층적인 통찰력을 향한 리팩토링 3장 소개
  • 3. 우리가 알고 있는 리팩토링 "매우 상세한 수준에서 코드의 가독성을 높이거나 개선하려는 기계적인 변경에 초점을 맞춘다"
  • 4. Refactoring 마이크로 리팩토링 카탈로그 코드 자체에서 발견되는 문제를 해결하는 것이 목표
  • 5. 패턴을 활용한 리팩토링 개발자가 디자인 패턴을 적용해야 한다고 판단 했을 때 따라야 할 리팩토링 절차에 대한 높은 수준 목표 제시 설계 품질을 기술적 관점에서 바라봄
  • 6. 심층 모델을 향한 리팩토링 What? 시스템의 생존력에 가장 큰 영향을 미치는 리팩토링 When ? 도메인에 대한 새로운 통찰력을 얻었을 때 수행 How ? 코드를 사용해 모델이 표현하고자 하는 바를 명확하게 드러내고자 수행 리팩토링의 목표는 개발자가 단순히 코드가 수행 하는 바를 이해하는 것뿐만 아니라 왜 그렇게 수행 되는지를 이해하고 도메인 전문가와 의사소통에 이를 연결 시키는 것이다.
  • 7. 심층 모델(Deep Model)이란? 도메인의 피상적인 측면을 배제하고 도메인 전문가의 주요 관심사와 가장 적절한 지식을 알기 쉽게 표현하는 모델 추상적인 요소를 포함하지만 문제의 핵심을 관통하는 구체적인 요소를 포함 예) 선박과 컨테이너가 포함된 객체 모델 초기 아이디어로 사용 -> 여러번의 반복주기-> 선박운항 과 "선하증권"모델 부각 (선백/컨테이너는 모델에 누락)
  • 8. 심층 모델/유연한 설계 지속적 리팩토링을 수행하려면 설계 자체가 변경을 지원 해야됨 "유연한 설계"(supple design)와 이를 달성하기 위한 접근법 10장에서 소개 예)낡은 야구글러브 구부러지는 지점 유연해짐 - 그 외 부분은 딱딱해서 손을 보호 출처 : http://suhyeonkwon.blog.me/100099740800
  • 9. 발견과정 9장 "암시적인 개념을 명시적으로 " 도메인의 중심 개념을 담고 있는 모델을 확보하고 설계에 반영하는 법 10장 "유연한 설계“ 유연하고 쉽게 확장할 수 있는 소프트웨어를 작성하는 방법 11장 ~12장 분석 패턴과, 디자인 패턴을 적용하는 방법을 설명
  • 11. 리팩토링 효과 서서히 습득한 지식은 소규모 리팩토링을 통해 드러난다 쌓인 지식은 어느 순간 중요한 통찰로서 프로젝트 전체에 영향을 미친다
  • 12. 도약의 사례소개 여러 대출회사가 모여 퍼실리티(facility)를 지원할 지원할 자금을 공동으로 출자하는 채권 은행단 구현 퍼실리티란? 돈을 대출해 줄 회사와의 매매 계약 신용카드 예 신용카드 한도 : 사전 협의된 금액까지 빌릴 수 있는 퍼실리티 신용카드 사용의 미 청구 금액은 퍼실리티에 대한 차용액이 되며 대출 총액을 증가시킴
  • 13. 서서히 지식 쌓아가기 1. 대출 회사 지분이 고정적이라는 가정 2. but. 대출금 제공 받은 투자 회사는 일반적으로 더 많은 지분에 해당 하는 금액을 제공할 수 있음 핵심을 관통 하지 못하여 알고리즘은 복잡해지고 미묘한 반올림 불일치 문제 발생 됨
  • 15. PIE 그래프를 통한 새로운 모델을 시각화 하고 다양한 시나리오 검증
  • 16. 지분 총액(Share Pie)를 사용한 Loan 모델 생성
  • 17. 결과 업무 전문가들도 쉽게 이해할 수 있는 모델이 생김 복잡한 반올림 문제도 자동 해결 됨 심층모델의명확성/단순함 UBIUITUOS LANGUAGE 기반 의사소통 더 나은 모델링으로 도약
  • 18. 정리 우리가 알고 있는 수준의 리팩토링은 코드레벨로 접근하는 마이크로리팩토링 보다 시스템의 생존력에 영향을 미칠 수 있는 큰 관점의 접근법을 심층 모델을 향한 리팩토링 심층 모델은 핵심을 관통하는 구체적인 요소를 포함하면서 알기 쉽게 표현한 모델 심층 모델의 발견과정은 기반 지식을 쌓다 어느순간도약 시점을 거쳐 발견하게 된다.