SlideShare a Scribd company logo
1 of 46
클린 아키텍처
도메인이 모든 것의 중심이다.
부분 : 클린 코드
클린 코드
큰건 작게 나누고
좋은 이름을 붙이고
친근한 녀석들 끼리는 모으고
…
이런 일의 대상은 모든 것들
변수, 함수, 메소드, 클래스, 파일, 패키지 ...
적당한 이름과
적당한 크기
코드를 이해할 수 있는 수준으
로 만들기
코드를 이해할 수 있는 수준으
로 만들기
추상화 / 모델링
팁
추상화란 구체적인 것을 분
해해서 관심 영역 (어플리
케이션 경계, Application
Boundary)에 있는 특성만
을 가지고 재조합하는 것
즉, 모델링
코드가 해결하고자 하는 문제
영역을 잘드러내는 모델
도메인 모델
본질 : 도메인 모델
도메인 주도 설계
본질로의 회귀
도메인이 모든 것의 중심이다.
생각과 코드의 연결
너와 나의 연결 고리
한팀, 하나의 언어
전체 : 클린 아키텍처
도메인 모델을 유지하며
SW를 확장해나가는 구조
책은 더 많은 것을 얘기하지만
이 번 시간은 구조에 대해서만
Before 클린 아키텍처
서로 끈끈한 애정을 가진 코드
들.
친해보이지 않은 코드들의 동침
왠지 모르지만 돌아간다.
등등 …
생각이 없었죠. 인정.
그래서
결과적으로 테스트는
앱을 돌려했죠. 하하..,
After 클린 아키텍처
너무 붙지마 프레임워크야
덥단 말이야.
프레임워크는 툴이다.
지배 당하지 말자.
Testable
도메인 로직은 UI, 데이터베이스, 웹 서버, 외부 장치.. 등등과 무
관하게 테스트 가능해야 한다.
Independent of ui
Independent of database
Independent of external *
Clean Architecture
“ A good architecture emphasizes the
use cases and decouples them from
peripheral concerns”
- Robert C. martin
Clean Architecture
“ A good architecture emphasizes the
use cases and decouples them from
peripheral concerns”
- Robert C. martin
Clean Architecture
➔ Layers & Dependency Inversion
➔ Inversion of Control
➔ Different Models
➔ Clean Architecture Again
➔ Screaming Architecture
Layers & Dependency Inversion
Inversion of Control
Different Models
Persistence Domain Presentation
Clean Architecture Again
View
Model
Domain
Model
Data
Model
Screaming Architecture
Screaming Architecture
vs
Screaming Architecture
vs
예제 : 클린 아키텍처
Mobile AppApp Launcher
App Preview
Menu,
Remote Controller
Trigger
Mobile App
Infrastructure
Domain
Presentation
implements
Wall Tablet App
Infrastructure
Domain
Presentation
uses
Domain /
Entities
Use
Cases
AdaptersFrameworks
Mobile App
TV Mode
Fragment
App
Launcher
Presenter
GetApp-
Items
Use Case
AppItem,
AppItem-
Repository
Entities
AppItem-
DataSource
AppItem-
DataSource-
Impl
TV Service
APIs
Mobile App
TV Mode
Fragment
App
Launcher
Presenter
GetApp-
Items
Use Case
AppItem,
AppItem-
Repository
Entities
AppItem-
DataSource
View
Model
Domain
Model
Data
Model
AppItemEntityAppItemAppItemViewModel
Mobile App – Different Models
AppItem-
DataSource-
Impl
TV Service
APIs
TV Mode
Fragment
App
Launcher
Presenter
GetApp-
Items
Use Case
AppItem,
AppItem-
Repository
Entities
AppItem-
DataSource
RxJava.
Observarable<List<AppItem>>
RxJava.
Observarable.onNext
(callback)
Implementation
Mobile App – Asynchronous
AppItem-
DataSource-
Impl
TV Service
APIs
TV Mode
Fragment
App
Launcher
Presenter
GetApp-
Items
Use Case
AppItem,
AppItem-
Repository
Entities
AppItem-
DataSource
Mock-
AppItem-
DataSource
RxJava.
Observarable<List<AppItem>>
RxJava.
Observarable.onNext
(callback)
Implementation
Mobile App – Testable
생각해볼 것들
서로 다른 영역의
서로 다른 모델의
필요성에 대해서
내가 몸담고 있는
도메인의 이상적인
테스트에 대해서
내가 몸담고 있는
도메인의 Entity와
Use Case에
대해서
참고 자료
● Robert C Martin - Clean Architecture - https://goo.gl/ZE22uA
● Keeping it Clean - https://goo.gl/BkKWy6
● Introducing Clean Architecture - https://goo.gl/TFexBW
● The Clean Architecture (8thlight.com) - https://goo.gl/ZpsmfZ
● Screaming Architecture (8thlight.com) - https://goo.gl/EcBXtN
● Clean Architecture Book - https://goo.gl/QBhjua
● Clean Architecture Book PDF - http://putregai.com/sbooks/clean_arch.pdf

More Related Content

Similar to 클린 아키텍처 살짝 적용기

객체지향의 사실과 오해 7장.함께모으기
객체지향의 사실과 오해 7장.함께모으기 객체지향의 사실과 오해 7장.함께모으기
객체지향의 사실과 오해 7장.함께모으기 한 경만
 
델파이XE2와 파이어몽키(FireMoneky)
델파이XE2와 파이어몽키(FireMoneky)델파이XE2와 파이어몽키(FireMoneky)
델파이XE2와 파이어몽키(FireMoneky)Devgear
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Designhyun soomyung
 
아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지YoungSu Son
 
[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장sung ki choi
 
너무블록체인 dApp 개발에서 테스트넷의 중요성.pdf
너무블록체인 dApp 개발에서 테스트넷의 중요성.pdf너무블록체인 dApp 개발에서 테스트넷의 중요성.pdf
너무블록체인 dApp 개발에서 테스트넷의 중요성.pdf너무 블록체인
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례선협 이
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
Lost practice : Requirement Analysis
Lost practice : Requirement AnalysisLost practice : Requirement Analysis
Lost practice : Requirement Analysisc K
 
Kubernetes cloud native development tools - k8s day korea 2019 - Gyuseok Lee
Kubernetes cloud native development tools - k8s day korea 2019 - Gyuseok LeeKubernetes cloud native development tools - k8s day korea 2019 - Gyuseok Lee
Kubernetes cloud native development tools - k8s day korea 2019 - Gyuseok Lee규석 이
 
도메인주도설계
도메인주도설계도메인주도설계
도메인주도설계Wonjun Hwang
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿AnselmKim
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...Taekyu Lim
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorialBingu Shim
 
[HCI2010]Web Application UI Pattern
[HCI2010]Web Application UI Pattern[HCI2010]Web Application UI Pattern
[HCI2010]Web Application UI PatternChangGyum Kim
 
DevOps with AWS Edge
DevOps with AWS EdgeDevOps with AWS Edge
DevOps with AWS EdgeGS Neotek
 
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 APINAVER Engineering
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksSunuk Park
 

Similar to 클린 아키텍처 살짝 적용기 (20)

C++ api design 품질
C++ api design 품질C++ api design 품질
C++ api design 품질
 
객체지향의 사실과 오해 7장.함께모으기
객체지향의 사실과 오해 7장.함께모으기 객체지향의 사실과 오해 7장.함께모으기
객체지향의 사실과 오해 7장.함께모으기
 
델파이XE2와 파이어몽키(FireMoneky)
델파이XE2와 파이어몽키(FireMoneky)델파이XE2와 파이어몽키(FireMoneky)
델파이XE2와 파이어몽키(FireMoneky)
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지
 
[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장[아꿈사/110903] 도메인주도설계 4장
[아꿈사/110903] 도메인주도설계 4장
 
너무블록체인 dApp 개발에서 테스트넷의 중요성.pdf
너무블록체인 dApp 개발에서 테스트넷의 중요성.pdf너무블록체인 dApp 개발에서 테스트넷의 중요성.pdf
너무블록체인 dApp 개발에서 테스트넷의 중요성.pdf
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
Lost practice : Requirement Analysis
Lost practice : Requirement AnalysisLost practice : Requirement Analysis
Lost practice : Requirement Analysis
 
Kubernetes cloud native development tools - k8s day korea 2019 - Gyuseok Lee
Kubernetes cloud native development tools - k8s day korea 2019 - Gyuseok LeeKubernetes cloud native development tools - k8s day korea 2019 - Gyuseok Lee
Kubernetes cloud native development tools - k8s day korea 2019 - Gyuseok Lee
 
도메인주도설계
도메인주도설계도메인주도설계
도메인주도설계
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
 
[HCI2010]Web Application UI Pattern
[HCI2010]Web Application UI Pattern[HCI2010]Web Application UI Pattern
[HCI2010]Web Application UI Pattern
 
DevOps with AWS Edge
DevOps with AWS EdgeDevOps with AWS Edge
DevOps with AWS Edge
 
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworks
 

클린 아키텍처 살짝 적용기