Description
아키텍처 패턴의 기초부터 활용까지 다루는 실전 가이드
파이썬을 활용한 프로젝트의 규모가 커지면서 육각형/클린 아키텍처, 이벤트 기반 아키텍처, 도메인 주도 설계 등 고수준 디자인 패턴에 대한 관심이 높아지고 있다. 이 책은 검증된 예제와 아키텍처 디자인 패턴을 소개하며 애플리케이션의 복잡성, 의존성을 낮추고, 테스트 스위트에서 최선의 가치를 얻는 방법을 알려준다. 또한 자바나 C#보다 간단하고 우아한 파이썬 코드의 장점을 잘 살려 각 패턴을 설명한다.

저자

해리퍼시벌,밥그레고리

저자:해리퍼시벌
현재메이드닷컴(MADE.com)에서근무중이다.PythonAnywhereLLP에서근무한경험이있다.워크숍이나컨퍼런스등에서TDD의유용성을전세계에전파하고있다.캠브리지대학교에서철학학사학위를취득하고리버풀대학교에서컴퓨터과학석사학위를취득했다.

저자:밥그레고리
메이드닷컴에서근무중인소프트웨어아키텍트.10년넘게도메인주도설계로이벤트주도시스템을구축하고있다.

역자:오현석
비사이드소프트(Bsidesoft)이사로일하면서매일고객의요청에따라코드를만들고있는현업개발자다.어릴때처음컴퓨터를접하고매혹된후경기과학고등학교를졸업하고,카이스트전산학과(프로그래밍언어전공석사)를거치면서계속컴퓨터를사용해왔다.직장에서는주로코틀린이나자바를사용한서버프로그래밍을하고,주말이나여가시간에는번역을하거나공부를하면서즐거움을찾고있다.시간이아주많이남을때는시뮬레이션게임을하면서머리를식히고,어떻게하면막둥이를프로그래밍의세계로끌어들일수있을지고민중인아빠이기도하다.

목차

CHAPTER0도입
0.1설계가왜잘못되는가?
0.2캡슐화와추상화
0.3계층화
0.4의존성역전원칙
0.5모든비즈니스로직을위한장소:도메인모델

[PARTI도메인모델링을지원하는아키텍처구축]

CHAPTER1도메인모델링
1.1도메인모델이란?
1.2도메인언어탐구
1.3도메인모델단위테스트
1.4모든것을객체로만들필요는없다:도메인서비스함수

CHAPTER2저장소패턴
2.1도메인모델영속화
2.2의사코드:무엇이필요할까?
2.3데이터접근에DIP적용하기
2.4기억되살리기:우리가사용하는모델
2.5저장소패턴소개
2.6테스트에사용하는가짜저장소를쉽게만드는방법
2.7파이썬에서포트는무엇이고,어댑터란무엇인가
2.8마치며

CHAPTER3막간:결합과추상화
3.1추상적인상태는테스트를더쉽게해준다
3.2올바른추상화선택
3.3선택한추상화구현
3.4마치며

CHAPTER4첫번째유스케이스:플라스크API와서비스계층
4.1애플리케이션을실세계와연결하기
4.2첫번째엔드투엔드테스트
4.3직접구현하기
4.4데이터베이스검사가필요한오류조건
4.5서비스계층소개와서비스계층테스트용FakeRepository사용
4.6모든것을왜서비스라고부르는가?
4.7모든요소를폴더에넣고각부분이어떤위치에있는지살펴보기
4.8마치며

CHAPTER5높은기어비와낮은기어비의TDD
5.1테스트피라미드는어떻게생겼는가?
5.2도메인계층테스트를서비스계층으로옮겨야하는가?
5.3어떤종류의테스트를작성할지결정하는방법
5.4높은기어비와낮은기어비
5.5서비스계층테스트를도메인으로부터완전히분리하기
5.6E2E테스트에도달할때까지계속개선하기
5.7마치며

CHAPTER6작업단위패턴
6.1작업단위는저장소와협력
6.2테스트-통합테스트로UoW조정하기
6.3작업단위와작업단위의콘텍스트관리자
6.4UoW를서비스계층에사용하기
6.5커밋/롤백동작에대한명시적인테스트
6.6명시적커밋과암시적커밋
6.7예제:UoW를사용해여러연산을원자적단위로묶기
6.8통합테스트깔끔하게정리하기
6.9마치며

CHAPTER7애그리게이트와일관성경계
7.1모든것을스프레드시트에서처리하지않는이유
7.2불변조건,제약,일관성
7.3애그리게이트란?
7.4애그리게이트선택
7.5한애그리게이트=한저장소
7.6성능은어떨까?
7.7버전번호와낙관적동시성
7.8데이터무결성규칙테스트
7.9마치며
7.101부돌아보기

[PARTII이벤트기반아키텍처]

CHAPTER8이벤트와메시지버스
8.1지저분해지지않게막기
8.2단일책임원칙
8.3메시지버스에전부다싣자
8.4첫번째선택지:서비스계층이모델에서이벤트를가져와메시지버스에싣는다
8.5두번째선택지:서비스계층은자신만의이벤트를발생한다
8.6세번째선택지:UoW가메시지버스에이벤트를발행한다
8.7마치며

CHAPTER9메시지버스를타고시내로나가기
9.1새로운아키텍처가필요한새로운요구사항
9.2서비스함수를메시지핸들러로리팩터링하기
9.3새로운요구사항구현하기
9.4새핸들러시범운영하기
9.5선택:가짜메시지버스와독립적으로이벤트핸들러단위테스트하기
9.6마치며

CHAPTER10커맨드와커맨드핸들러
10.1커맨드와이벤트
10.2예외처리방식의차이점
10.3논의:이벤트,커맨드,오류처리
10.4동기적으로오류복구하기
10.5마치며

CHAPTER11이벤트기반아키텍처:이벤트를사용한마이크로서비스통합
11.1분산된진흙공,명사로생각하기
11.2분산시스템에서오류처리하기
11.3대안:비동기메시징을사용한시간적결합
11.4레디스발행/구독채널을통합에사용하기
11.5엔드투엔드테스트를사용해모든기능시범운영하기
11.6내부이벤트와외부이벤트비교
11.7마치며

CHAPTER12명령-질의책임분리(CQRS)
12.1쓰기위해존재하는도메인모델
12.2가구를구매하지않은사용자
12.3Post/리디렉션/Get과CQS
12.4점심을잠깐미뤄라
12.5CQRS뷰테스트하기
12.6‘명확한’대안1:기존저장소사용하기
12.7읽기연산에최적화되지않은도메인모델
12.8‘명확한’대안2:ORM사용하기
12.9SELECTN+1과다른고려사항
12.10이제는상어를완전히뛰어넘을때이다
12.11읽기모델구현을변경하기쉽다
12.12마치며

CHAPTER13의존성주입(그리고부트스트래핑)
13.1암시적의존성과명시적의존성
13.2명시적의존성은완전히이상하고자바스러운가?
13.3핸들러준비:클로저와부분함수를사용한수동DI
13.4클래스를사용한대안
13.5부트스트랩스크립트
13.6실행도중핸들러가제공된메시지버스
13.7진입점에서부트스트랩사용하기
13.8테스트에서DI초기화하기
13.9어댑터‘적절히’구축하기:실제사례
13.10마치며

CHAPTER14맺음말
14.1왜지금인가?
14.2여기서거기까지어떻게갈수있을까?
14.3뒤엉킨책임분리
14.4애그리게이트와제한된콘텍스트식별하기
14.5스트랭글러패턴을통해마이크로서비스로전환하는이벤트기반접근방법
14.6새로운일을시작하도록이해관계자설득하기
14.7기술리뷰어들의질문
14.8풋건
14.9추가자료
14.10마치며

[PARTIII부록]

APPENDIXA정리다이어그램과표

APPENDIXB프로젝트구조틀
B.1환경변수,12팩터,설정,컨테이너내부와외부
B.2config.py
B.3docker-compose와컨테이너설정
B.4소스를패키지로설치하기
B.5Dockerfile
B.6테스트
B.7마치며

APPENDIXC인프라교체:CSV로모든데이터처리하기
C.1CSV를사용한저장소와작업단위구현하기

APPENDIXD장고에서작업단위와저장소패턴사용하기
D.1장고를사용한저장소패턴
D.2장고작업단위패턴
D.3API:장고뷰는어댑터다
D.4이모든게왜그렇게어려웠는가?
D.5이미장고앱을사용중이라면
D.6장고와함께진행할수있는단계들

APPENDIXE검증
E.1검증이란무엇인가?
E.2문법검증
E.3포스텔의법칙과톨러런트리더패턴
E.4가장자리에서검증하기
E.5의미검증하기
E.6검증화용론

출판사 서평

고수준아키텍처패턴을적절한위치에서활용하는능력을키워보자

이책은파이썬을활용한실전예제를통해도메인주도개발을설명한다.설명하는과정에서이론이나실무에지나치게치우치지않고너무복잡하거나너무간단한예제를사용하지도않는다.즉,아주적절한수준의설명과예제로도메인주도개발의핵심요소를이해하기쉽도록도메인모델과소프트웨어웨어를설계하는과정을알려준다.문제를식별하고해결책을논의하며저자가권하는패턴의숨은의도를설명하는방식으로가이드한다.복잡성을처리해야하는팀에게충분히가치있고반드시읽어야하는,세상에오직하나뿐인도메인주도개발책이다.엔터프라이즈시스템이점차복잡해짐에따라고객의요구사항에맞춰도메인모델을도출하고구현하는문제에어려움을겪는개발자에게이책은완벽한길잡이가되어줄것이다.

주요내용
● 의존성역전,포트와어댑터패턴(육각형/클린아키텍처)과의존성주입의연결관계
● 도메인주도설계에서엔티티,값객체,애그리게이트를구별하는법
● 영속적저장소처리를위한저장소와작업단위패턴
● 이벤트,커맨드,메시지버스
● 명령-질의책임분리(CQRS)