메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

파이썬으로 살펴보는 아키텍처 패턴

TDD, DDD, EDM 적용하기

한빛미디어

번역서

판매중

  • 저자 : 해리 퍼시벌 , 밥 그레고리
  • 번역 : 오현석
  • 출간 : 2021-06-03
  • 페이지 : 356 쪽
  • ISBN : 9791162244319
  • 물류코드 :10431
초급 초중급 중급 중고급 고급
5점 (2명)
좋아요 : 1

아키텍처 패턴의 기초부터 활용까지 다루는 실전 가이드

 

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

 

 

주요 내용 

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

 

 

추천사

 

파이썬 커뮤니티가 이 책을 손꼽아 기다렸다. 파이썬에 모던 애플리케이션 아키텍처를 적용하면 어떤 형태가 되는지를 잘 보여주며, 의존성 역전 원칙을 유연하고 동적인 언어에 우아하게 적용하는 방법을 알려준다. 

_브랜던 로즈(Brandon Rhodes), python-patterns.guide 운영자

 

지금까지 파이썬만으로 유지보수하기 좋은 대규모 시스템을 작성하는 방법을 알려주는 책은 없었다. 이 책은 복잡한 소프트웨어 개발에도 파이썬이 더할 나위 없이 적합하다는 사실을 잘 보여준다. 

_히네크 슐라바크(Hynek Schlawack), 파이써니스타 및 연설가

저자

해리 퍼시벌

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

저자

밥 그레고리

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

역자

오현석

 

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

CHAPTER 0 도입

0.1 설계가 왜 잘못되는가?

0.2 캡슐화와 추상화

0.3 계층화

0.4 의존성 역전 원칙

0.5 모든 비즈니스 로직을 위한 장소: 도메인 모델


 

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


CHAPTER 1 도메인 모델링

1.1 도메인 모델이란?

1.2 도메인 언어 탐구

1.3 도메인 모델 단위 테스트

1.4 모든 것을 객체로 만들 필요는 없다: 도메인 서비스 함수

 

CHAPTER 2 저장소 패턴

2.1 도메인 모델 영속화

2.2 의사코드: 무엇이 필요할까?

2.3 데이터 접근에 DIP 적용하기

2.4 기억 되살리기: 우리가 사용하는 모델

2.5 저장소 패턴 소개

2.6 테스트에 사용하는 가짜 저장소를 쉽게 만드는 방법

2.7 파이썬에서 포트는 무엇이고, 어댑터란 무엇인가

2.8 마치며

 

CHAPTER 3 막간: 결합과 추상화

3.1 추상적인 상태는 테스트를 더 쉽게 해준다

3.2 올바른 추상화 선택

3.3 선택한 추상화 구현

3.4 마치며

 

CHAPTER 4 첫 번째 유스 케이스: 플라스크 API와 서비스 계층

4.1 애플리케이션을 실세계와 연결하기

4.2 첫 번째 엔드투엔드 테스트

4.3 직접 구현하기

4.4 데이터베이스 검사가 필요한 오류 조건

4.5 서비스 계층 소개와 서비스 계층 테스트용 FakeRepository 사용

4.6 모든 것을 왜 서비스라고 부르는가?

4.7 모든 요소를 폴더에 넣고 각 부분이 어떤 위치에 있는지 살펴보기

4.8 마치며

 

CHAPTER 5 높은 기어비와 낮은 기어비의 TDD

5.1 테스트 피라미드는 어떻게 생겼는가?

5.2 도메인 계층 테스트를 서비스 계층으로 옮겨야 하는가?

5.3 어떤 종류의 테스트를 작성할지 결정하는 방법

5.4 높은 기어비와 낮은 기어비

5.5 서비스 계층 테스트를 도메인으로부터 완전히 분리하기

5.6 E2E 테스트에 도달할 때까지 계속 개선하기

5.7 마치며

 

CHAPTER 6 작업 단위 패턴

6.1 작업 단위는 저장소와 협력

6.2 테스트-통합 테스트로 UoW 조정하기

6.3 작업 단위와 작업 단위의 콘텍스트 관리자

6.4 UoW를 서비스 계층에 사용하기

6.5 커밋/롤백 동작에 대한 명시적인 테스트

6.6 명시적 커밋과 암시적 커밋

6.7 예제: UoW를 사용해 여러 연산을 원자적 단위로 묶기

6.8 통합 테스트 깔끔하게 정리하기

6.9 마치며

 

CHAPTER 7 애그리게이트와 일관성 경계

7.1 모든 것을 스프레드시트에서 처리하지 않는 이유

7.2 불변조건, 제약, 일관성

7.3 애그리게이트란?

7.4 애그리게이트 선택

7.5 한 애그리게이트 = 한 저장소

7.6 성능은 어떨까?

7.7 버전 번호와 낙관적 동시성

7.8 데이터 무결성 규칙 테스트

7.9 마치며

7.10 1부 돌아보기

 

 

[PART II 이벤트 기반 아키텍처]


CHAPTER 8 이벤트와 메시지 버스

8.1 지저분해지지 않게 막기

8.2 단일 책임 원칙

8.3 메시지 버스에 전부 다 싣자

8.4 첫 번째 선택지: 서비스 계층이 모델에서 이벤트를 가져와 메시지 버스에 싣는다

8.5 두 번째 선택지: 서비스 계층은 자신만의 이벤트를 발생한다

8.6 세 번째 선택지: UoW가 메시지 버스에 이벤트를 발행한다

8.7 마치며

 

CHAPTER 9 메시지 버스를 타고 시내로 나가기

9.1 새로운 아키텍처가 필요한 새로운 요구 사항

9.2 서비스 함수를 메시지 핸들러로 리팩터링하기

9.3 새로운 요구 사항 구현하기

9.4 새 핸들러 시범운영하기

9.5 선택: 가짜 메시지 버스와 독립적으로 이벤트 핸들러 단위 테스트하기

9.6 마치며

 

CHAPTER 10 커맨드와 커맨드 핸들러

10.1 커맨드와 이벤트

10.2 예외 처리 방식의 차이점

10.3 논의: 이벤트, 커맨드, 오류 처리

10.4 동기적으로 오류 복구하기

10.5 마치며


CHAPTER 11 이벤트 기반 아키텍처: 이벤트를 사용한 마이크로서비스 통합

11.1 분산된 진흙 공, 명사로 생각하기

11.2 분산 시스템에서 오류 처리하기

11.3 대안: 비동기 메시징을 사용한 시간적 결합

11.4 레디스 발행/구독 채널을 통합에 사용하기

11.5 엔드투엔드 테스트를 사용해 모든 기능 시범운영하기

11.6 내부 이벤트와 외부 이벤트 비교

11.7 마치며

 

CHAPTER 12 명령-질의 책임 분리(CQRS)

12.1 쓰기 위해 존재하는 도메인 모델

12.2 가구를 구매하지 않은 사용자

12.3 Post/리디렉션/Get과 CQS

12.4 점심을 잠깐 미뤄라

12.5 CQRS 뷰 테스트하기

12.6 ‘명확한’ 대안 1: 기존 저장소 사용하기

12.7 읽기 연산에 최적화되지 않은 도메인 모델

12.8 ‘명확한’ 대안 2: ORM 사용하기

12.9 SELECT N+1과 다른 고려 사항

12.10 이제는 상어를 완전히 뛰어 넘을 때이다

12.11 읽기 모델 구현을 변경하기 쉽다

12.12 마치며

 

CHAPTER 13 의존성 주입(그리고 부트스트래핑)

13.1 암시적 의존성과 명시적 의존성

13.2 명시적 의존성은 완전히 이상하고 자바스러운가?

13.3 핸들러 준비: 클로저와 부분함수를 사용한 수동 DI

13.4 클래스를 사용한 대안

13.5 부트스트랩 스크립트

13.6 실행 도중 핸들러가 제공된 메시지 버스

13.7 진입점에서 부트스트랩 사용하기

13.8 테스트에서 DI 초기화하기

13.9 어댑터 ‘적절히’ 구축하기: 실제 사례

13.10 마치며

 

CHAPTER 14 맺음말

14.1 왜 지금인가?

14.2 여기서 거기까지 어떻게 갈 수 있을까?

14.3 뒤엉킨 책임 분리

14.4 애그리게이트와 제한된 콘텍스트 식별하기

14.5 스트랭글러 패턴을 통해 마이크로서비스로 전환하는 이벤트 기반 접근 방법

14.6 새로운 일을 시작하도록 이해관계자 설득하기

14.7 기술 리뷰어들의 질문

14.8 풋건

14.9 추가 자료

14.10 마치며

 

 

[PART III 부록]


APPENDIX A 정리 다이어그램과 표


APPENDIX B 프로젝트 구조 틀

B.1 환경 변수, 12팩터, 설정, 컨테이너 내부와 외부

B.2 config.py

B.3 docker-compose와 컨테이너 설정

B.4 소스를 패키지로 설치하기

B.5 Dockerfile

B.6 테스트

B.7 마치며

 

APPENDIX C 인프라 교체: CSV로 모든 데이터 처리하기

C.1 CSV를 사용한 저장소와 작업 단위 구현하기

 

APPENDIX D 장고에서 작업 단위와 저장소 패턴 사용하기

D.1 장고를 사용한 저장소 패턴

D.2 장고 작업 단위 패턴

D.3 API: 장고 뷰는 어댑터다

D.4 이 모든 게 왜 그렇게 어려웠는가?

D.5 이미 장고 앱을 사용 중이라면

D.6 장고와 함께 진행할 수 있는 단계들

 

APPENDIX E 검증

E.1 검증이란 무엇인가?

E.2 문법 검증

E.3 포스텔의 법칙과 톨러런트 리더 패턴

E.4 가장자리에서 검증하기

E.5 의미 검증하기

E.6 검증 화용론

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

 

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

  •  



    [주요 내용]

    -의존성 역전, 포트와 어댑터 패턴(육각형/클린 아키텍처)과 의존성 주입의 연결 관계

    -도메인 주도 설계에서 엔티티, 값 객체, 애그리게이트를 구별하는 법

    -영속적 저장소 처리를 위한 저장소와 작업 단위 패턴

    -이벤트, 커맨드, 메시지 버스

    -명령-질의 책임 분리(CQRS)


    [대상 독자]

    - 어느 정도 복잡한 파이썬 애플리케이션을 가까이에서 다뤄본 적이 있다.

    - 복잡한 애플리케이션의 복잡성을 관리할 때 발생하는 고통을 꽤 많이 겪었다.

    - DDD나 고전적인 애플리케이션 아키텍처 패턴에 대해서는 물라도 된다.



    [서평]


    이 책은 두 부분으로 구성되어 있다. 다음은 이 책에서 다루는 주제와 어느 장에서 어떤 주제를 다루는지를 소개한다.


    1부: 도메인 모델링을 지원하는 아키텍처 구축

    도메인 모델링과 DDD(1~7장)

    복잡한 비즈니스 문제들을 도메인 모델 형태로 코드에 반영되어야 한다는 사실을 배운다. 하지만 인프라나 웹 프레임워크 등의 여러 관심사가 얼기설기 엮여 있지 않은 도메인 모델을 만드는 것은 항상 어려워 보일까? 첫 장에서는 도메인 모델링과 DDD에 대한 전체 개요를 알려주고, 빠른 단위 테스트가 가능한 외부 의존성이 없는 모델을 어떻게 시작하는지를 보여준다. 나중에는 DDD 패턴으로 돌아가서 올바른 애그리게이트를 선택하는 방법과 애그리게이트 선택이 데이터 무결성에 대한 의문과 어떻게 연관되는지를 설명한다.


    저장소, 서비스 계층, 작업 단위 패턴 (2, 4, 5장)

    이 세 장에서는 밀접하게 관련되어 있고, 서로 강화해주는 세 가지 패턴을 설명한다. 이 세 가지 패턴은 외부 의존성이 없도록 모델을 유지한다는 야망을 심어준다. 영속적인 저장소 주변에 추상화된 계층을 만들고, 시스템의 진입점을 정의하고 주 유스 케이스를 찾는 서비스 계층을 구축한다. 그리고 플라스크 API인지, CLI인지 관계없이 시스템에 대한 얇은 진입점을 만드는 데 서비스 계층이 어떤 도움이 되는지 살펴본다.


    테스팅과 추상화에 대한 생각(3, 6장)

    첫 번째 추상화(저장소 패턴)를 보여준 다음에는 추상화를 선택하는 방법과 선택한 추상화에 따라 소프트웨어가 서로 커플링되는 방식이 어떻게 달라지는지에 대해 일반적인 논의를 진행 한다. 서비스 계층 패턴을 소개한 다음에는 테스트 피라미드를 달성하는 방법과 단위 테스트를 가능한 최대로 추상화된 수준에서 작성하는 방법에 대해 살짝 살펴본다.


    2부: 이벤트 기반 아키텍처

    이벤트 기반 아키텍처(8~11장)

    서로 강화해주는 세가지 패턴을 더 자세히 살펴본다. 이 세 가지 패턴은 도메인 이벤트, 메시지 버스, 핸들러 패턴이다. 도메인 이벤트는 시스템에 대한 상호작용이 다른 시스템에 대한 상호작용을 촉발할 수 있다는 생각을 심어준다. 액션이 이벤트를 만들고, 적절한 핸들러를 호출하도록 보장하기 위해 메시지 버스를 사용한다. 그리고 마이크로 서비스 아키텍처에서 여러 서비스를 통합하는 패턴으로 이벤트를 사용하는 방법을 설명한다. 마지막으로 커맨드와 이벤트가 어떻게 다른지 설명한다. 11장이 끝나는 시점에서 이책의 애플리케이션은 근본적으로 처리 시스템이다.


    CQRS(12장)

    명령-질의 책임 분리 예제를 제시한다. 이벤트를 사용하는 예제와 이벤트를 사용하지 않는 예제를 보여준다.


    의존성 주입(13장)

    애플리케이션의 명시적인 의존성과 암시적인 의존성을 정리하고, 간단한 의존성 주입 프레임워크를 구현한다.


    이책을 가장 효율적으로 학습하는 방법은 바로 책에 있는 코드를 직접 작성해보는 것입니다. 누구나 다 아는 사실이지만 대부분의 사람은 눈으로 그냥 읽고 넘어 갑니다. 코드를 눈으로 읽는것과 아는것이라도 직접 손으로 치는 것은 하늘과 땅 차이 입니다. 이책의 코드를 따라하는 방법은 세가지가 있습니다. 1.자신만의 github 저장소를 만들고 책에서 소개하는 방법처럼 앱을 구축하는 방법 입니다. 2.자신의 프로젝트에 이책의 패턴을 하나씩 적용하고, 유스 케이스에 이책의 패턴을 적용할 수 있는지 살펴 봅니다. 이과정을 고위험/고수익 작업입니다. 이책의 패턴을 적용해 자신의 프로젝트 일부를 구동 한다면 생각보다 꽤많은 작업이 필요하지만, 정말 많은 경험을 배울수 있습니다. 3.노력을 적게 하고 싶은 독자를 위해 장마다 ‘연습 문제’를 풀면서 책에서 다룬 패턴을 예제 프로젝트로 작업하는 것이 안전하게 연습할 수있는 좋은 방법입니다. 꼭 직접 코드를 작성하는 과정을 통해서 경험을 쌓기를 바랍니다. 

     

     

     "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

  • 스캔한 페이지 (9)-1.jpg

    

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

     

    CHAPTER 1 도메인 모델링

    CHAPTER 2 저장소 패턴

    CHAPTER 3 막간: 결합과 추상화

    CHAPTER 4 첫 번째 유스 케이스: 플라스크 API와 서비스 계층

    CHAPTER 5 높은 기어비와 낮은 기어비의 TDD

    CHAPTER 6 작업 단위 패턴

    CHAPTER 7 애그리게이트와 일관성 경계

     

     

    [PART II 이벤트 기반 아키텍처]

     

    CHAPTER 8 이벤트와 메시지 버스

    CHAPTER 9 메시지 버스를 타고 시내로 나가기

    CHAPTER 10 커맨드와 커맨드 핸들러

    CHAPTER 11 이벤트 기반 아키텍처: 이벤트를 사용한 마이크로서비스 통합

    CHAPTER 12 명령-질의 책임 분리(CQRS)

    CHAPTER 13 의존성 주입(그리고 부트스트래핑)

    CHAPTER 14 맺음말

     

     

    [PART III 부록]

     

    APPENDIX A 정리 다이어그램과 표

    APPENDIX B 프로젝트 구조 틀

    APPENDIX C 인프라 교체: CSV로 모든 데이터 처리하기

    APPENDIX D 장고에서 작업 단위와 저장소 패턴 사용하기

    APPENDIX E 검증

     

    

    

    주요내용

    -의존성 역전, 포트와 어댑터 패턴(육각형/클린 아키텍처)과 의존성 주입의 연결 관계

    -도메인 주도 설계에서 엔티티, 값 객체, 애그리게이트를 구별하는 법

    -영속적 저장소 처리를 위한 저장소와 작업 단위 패턴

    -이벤트, 커맨드, 메시지 버스

    -명령-질의 책임 분리(CQRS)

    

    스캔한 페이지 (9)-2.jpg

    

    해당 쳅터 별 핵심 내용을 시각적으로 그래프와 도표를 제공 하여 독자들의 이해를 도왔다.

     

    

     

    스캔한 페이지 (9)-3.jpg

    

    이론적 내용 뿐 만 아니라 각 개념 별 코드도 수록해 놓았고, 저자가 유용하다 생각되는 부분은 TIP 과 NOTE로 수록해 놓은 모습을 볼 수 있었다.

    

    스캔한 페이지 (9)-4.jpg


    각 단원 별 마지막 부분에 '정리' 부분을 수록해 놓아 단원 별 핵심내용을 일목요연하게 볼 수 있어 좋았다.

     

     

    추천 독자

    · 여러 고전적인 아키텍처 패턴에 관심이 있고, 이들이 어떻게 DDD, TDD, 이벤트 기반 서비스를 지원하는지 궁금한 독자

    · 복잡한 애플리케이션의 복잡성을 관리할 때 발생하는 고통을 해결하고 싶은 독자

    · 파이썬을 활용한 실전 예제를 통해 도메인 주도 개발을 배우고 싶은 독자

     

     

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

     

    

결제하기
• 문화비 소득공제 가능

배송료 안내

  • 책, 아이템 등 상품을 1만원 이상 구매시 무료배송
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

도서판매처

리뷰쓰기

닫기
* 도서명 :
파이썬으로 살펴보는 아키텍처 패턴
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
파이썬으로 살펴보는 아키텍처 패턴
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
파이썬으로 살펴보는 아키텍처 패턴
구입처*
구입일*
부가기호*
부가기호 안내

* 인터넷 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 한빛 웹사이트에서 구입한 도서는 자동 인증됩니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실