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

한빛출판네트워크

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

TDD, DDD, EDM 적용하기

한빛미디어

번역서

판매중

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

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

 

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

 

 

주요 내용 

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

 

 

추천사

 

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

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

 

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

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

해리 퍼시벌 저자

해리 퍼시벌

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

밥 그레고리 저자

밥 그레고리

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

오현석 역자

오현석

모빌리티42 이사로 일하면서 매일 고객의 요청에 따라 코드를 만드는 현업 개발자다. 어릴 때 처음 접한 컴퓨터에 매료된 후 경기과학고등학교, KAIST 전산학 학사와 프로그래밍 언어 전공 석사를 취득하며 계속 컴퓨터를 사용했다. 직장에서는 주로 코틀린이나 자바를 사용한 서버 프로그래밍을 하고, 주말이나 빈 시간에는 번역을 하거나 공부하면서 즐거움을 찾는다. 『코어 파이썬 애플리케이션 프로그래밍』(에이콘, 2014)을 시작으로 『배워서 바로 쓰는 스프링 프레임워크』(2020), 『러닝 리액트(2판)』(2021), 『고성능 파이썬(2판)』(이상 한빛미디어, 2021) 등 30권 이상의 책을 번역했다.

 

 

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 검증 화용론

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

 

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

 

 

프로그래밍 기본서를 본 후 어느 정도 익숙해지면 중급으로 가는 길은 무엇인가 고민을 하게 된다. 종종 어떤 언어의 중급서를 추천해달라는 말도 듣는다.

중급으로 가려면 특정 언어에 종속된다기 보다는 언어에 구애받지 않고 프로그래밍 설계 역량을 키워야 하지 않을까 싶다.

이런점에서 입문용 언어의 이미지가 강하지만 사실 강력한 언어인 파이썬으로 살펴보는 아키텍처 패턴 책이 나왔다.

파이썬을 몰라도 아키텍처 패턴에 관하여 배운다고 생각하면서 읽을 수도 있다. 파이썬은 몰라도 코드를 보면 대충 느낌을 알 수도 있다. 그래도... 당연하지만 파이썬을 알고 읽는 것이 베스트이다.

 

 

2.jpg

 

 

 

아키텍처를 논하기 때문에 이런 그림들이 종종 등장하여 이해를 돕는다. 구조를 이해하기엔 그림이 최고인 것 같다.

당연히 코드도 있다. 파이썬이지만 본인의 언어로 변경해는 작업을 하면서 익히는 것도 엄청 도움이 될 것 같다. 아키텍처 패턴 학습에 관심이 있다면 추천한다.

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

undefined

 

 

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

 

 대형 프로젝트를 python으로는 진행해본적이 없어서 어떤 식으로 구조를 잡고 비지니스 로직을 처리할지에 대한 궁금함으로 이 책을 시작했다.  

책은 도메인 모델링 그리고 이벤트 기반 아키텍쳐 2파트로 진행이 된다.  

책을 읽으며 조금은 생소한 아키텍쳐 패턴 등에 대해 얻어갈수 있었고 특히나 맺음말의 내용이 많이 와닿앗다.  

“이 책을 읽는다고 전문가가 되는 것이 아니다”  

책에서는 스스로 상황을 맞닥뜨려서 고민하고 그때 도움을 얻을 수 있는 아이디어를 제공하고 특히 무엇이 답이다라기 보다 어떠한 대안들이 있는지와 그것들의 trade-off들에 대해 소개한다.  이러한 내용들은 무언가 새로운 시스템을 만들때 적용하면 좋겠다고도 생각했는데 이미 만들어진 시스템을 고치고 새로운 방식으로 전환하려고 할 때 역시 활용할 수 있다.  

다만 개선은 한 번에 전부를 갈아엎는 것이 아닌 한 번에 하나씩을 대상으로 하라고 조언하고 있다. 우선순위를 정해서.  

 

일단은 책을 시작하면서 가진 궁금함은 해소할 수 있었고 좀 생소한 패턴에 대해서는 책 속의 저자가 추천하는 책으로 심화학습을 해볼수 있을 것 같다.  

 

 

 

KakaoTalk_Photo_2021-06-20-23-57-44.jpeg

 

 

 

 


아키텍처 패턴이란, 소프트웨어 아키텍처의 공통적인 발생 문제에 대해서 재사용 가능한 해결책이란 뜻으로,

 

 


소프트웨어 디자인 패턴과 비슷하지만 더 넓은 범위에 속합니다.

 

 


첫번째 챕터에서 도메인 모델링을 구축하는 방법을 배우며 도메인 주도 개발을 이해하게 되는데요.

 

 


파이썬을 활용한 실전 예제를 통해 이론을 공부할 수 있어,

이론과 실무 두가지를 동시에 잡을 수 있습니다.

 

 

또 다음 챕터로 갈수록 의존성 역전, 저장소 패턴 등 다양한 방면에서 설명해주어

애플리케이션의 복잡성, 의존성을 낮추고 효율적으로 개발할 수 있는 방법을 배우게 됩니다.

 

 


이 책에서는 자바나 C#보다 간단하고 우아한 파이썬 코드의 장점을 잘 살려 각 패턴을 설명해 줍니다.

 

 

부록에서는 파이썬 웹 프레임워크 중 하나인 Django를 이용하여 설명을 해 주는데요.

최근 Django를 공부하고 있던 저에게 정말 큰 도움이 되었습니다.

제가 사용하던 분야에 활용하여 생각하니 더 심층적인 이해를 할 수 있었습니다.

 

 

이 책은 효율을 찾는 오늘의 개발자들에게 훌륭한 바이블이 될 것이라고 생각합니다.

본격적으로 개발 공부를 시작해보고싶으신 분들께 추천드려요!

 

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

 

버마비단뱀 (Python Bivittatus) 이 그려진 이 책은 일단 책 표지부터 정말 파이썬 책이다. 책 제목과 내용과 딱 맞는 동물이 그려진 것은 내가 본 것 중에 처음이 아닌가 싶다. 사설이지만, O'RELLY 표지에 그려진 동물들은 대부분 멸종 위기종이라고 하는데, 파이썬이 엄청 잘 나가듯이 이 버마비단뱀 친구들도 잘 버텨줬으면 좋겠다. 

 

옮긴이 오현석님의 말과 같이 파이썬은 빅데이터부터 시작해서 데이터 사이언스, 머신러닝 분야에 관심이 많아지면서 큰 붐이 일었고 다른 프로그래밍 언어에 비해 배우기 쉬운  (나는 다른 언어부터 배워서인지 진짜 그런가 잘 모르겠다만 그렇다고들 함) 덕분에 정말 많은 사람들이 프로그래밍을 입문하고 활용하게 되었다.

 

나 역시도 같은 이유로 파이썬을 입문해서 머신러닝 해보는 척도 좀 해보고 간단한 서버나 툴을 만들어 쓰기도 한다. 다른 프로그래밍 언어도 마찬가지이긴 하지만 유독 내가 느끼는 문제는, 생산성이 좋고 필요한 기능만을 빠르게 개발할 수 있다는 이유때문인지 몰라도 소위 말해 지맘대로 막 개발하고 있다 라는 느낌을 스스로가 받는 코드를 짜는 경우가 많은 것 같다. 그리고 일단 잘 되긴 되니까 그냥 넘어간다. 당연히 테스트 따위는 제대로 하지도 않다보니 습관도 좀 더럽게 들었던 것 같다. 나와 같이 이렇게 스스로 코드를 더럽게 짜고 있다고 생각하거나 만족스럽지 못하는 사람들이 꼭 필요로 하는 부분이 이 책에서 말하는 아키텍처 패턴들인 것 같다. 사실 주변을 보면 모두가 알면서도 안하고 적용을 안하는 경우가 더 많은 것 같기도 하다. 귀찮으니까


이름만 들어도 해야될 것 같은데 너무 귀찮은 테스트 주도 개발 TDD (Test Driven Development) 부터 시작해서 도메인 주도 개발 DDD (Domain Driven Design), 이벤트 기반 아키텍처 EDA (Event Driven Architecture) 에 대해 차례로 설명하고 자세히 이런 패턴들이 파이썬에서 파이썬답게 어떻게 지원되고 있는지 자세하게 설명하고 있다. 책을 안보더라도 이 단어들이 어떤 것을 말하는지 알고 있다면 정말 필요한데 읽기 싫다하는 느낌이 들 수도 있겠다 생각은 든다만 개인적으로 파이썬 개발에 본격적으로 뛰어든 사람이라면 꼭 한번은 거쳐가야될 관문이 아닌가 싶다. 

 

특히 이 책에서는 여러 아키텍처들을 테스트해보기 위해서 플라스크, SQLAlchemy, Pytest, Docker, Redis 등을 포함해 파이썬 프레임워크 기술을 가져다 쓰고 있다. 책 저자들은 이 기술들을 몰라도 읽는데 불편함은 없을 것이라 하는데 (옮긴이는 이 목표를 잘 만족했다고 하시긴 하지만), 그래도 알고 나서 공부하면 더 좋지 않을까라고 개인적으로 생각한다. 아키텍처를 알고 나서 프레임워크들을 보면 원리가 쏙쏙 들어와서 좋을 것 같긴하지만 아마도 재미가 없을거다.

 

최근 쏟아져 나오는 파이썬 책들 중 이 책이 단연코 Pythonic 한 코드를 작성하는데 도움을 줄 수 있는 가장 좋은 책 중 하나가 아닐까 싶다. 유독 잘 되어있는 모듈화, 캡슐화 그리고 간단한 프레임워크들을 사용하다보면 도대체 왜 되는지 왜 안되는지도 모르는 상황을 만나기도 하고 해결하기도 힘든 경우가 많다. 사실 이 문제들을 해결하는데 필요한 가장 중요한 기술이 그 프레임워크가 어떻게 개발되었는지를 알고 어떤 패턴이 사용되었는지를 아는 것이 아닐까. 몇 년전 Spring Framework 를 한창 시작할 때 느꼈던 답답함과 공부하면서 느낀 속시원함을 파이썬에서 다시 한번 느끼게 해주는 좋은 책이다. 

파이썬의 기초가 끝났다면, 이제 "어떻게" 설계를 해야할지 고민을 해야 한다. 그때 이 책이 가장 많은 도움이 될 것이다.

TDD, DDD, EDA 등등 이벤트나 서비스에 관하여 어느정도 레벨에서 다루어야 하는지 풍부한 예제와 알기 쉽게 도표를 제공해준다.

 

개인적으로 도움이 되었던 부분은 파트2의 이벤트 기반 아키텍쳐였다. "수 많은 작은 컴포넌트를 합성해 동기적으로 메시지를 서로 전달하면서 상호작용하는 큰 시스템을 만드는 방법" 이 바로 EDA(Event-Driven Architecture)인 것이다.

결국 아키텍처라는 것은 코드를 알아보기 쉽게, 유지보수를 쉽게, 기능 추가를 쉽게 하기 위해서 이다.

이를 위하여 처음에 어렵게 가는 것 처럼 보이지만, 나중에 코드 전체를 뒤엎는 것 보다 훨씬 절약이 될 것이다.

이 책은 파이썬을 이용해 엔터프라이즈 환경에서 개발할 때 사용할 수 있는 아키텍처 패턴에 대해 설명해 준다. 파이썬을 이용해 시스템을 구성하면서 점점 복잡해진 구조를 어떻게 설계하면 좋을지 설명해 준다. 그렇다고 해서 지나치게 이론에 집중해서 설명하는 것이 아닌 실제 예제 코드들을 보여주면서 실용적인 관점에서 학습할 수 있는 책이다.

한국에서의 Back-end 개발은 타국가와 다르게 Spring 프레임워크에 굉장히 의존적인 것이 특이사항이라고 볼 수 있다. 전자정부프레임워크를 위시한 Java Spring 기반의 엔지니어가 2000년대 초반부터 많았기 때문에 유지보수도 용이하고 성능 측면에서도 나쁘지 않은 Spring 프레임워크가 대세가 될 수 밖에 없었다고 생각한다. 당연히 그에 대한 영향으로 각종 기술서적 역시 Java와 Spring 기반으로 한 책들이 많을 수 밖에 없었다. 위 책의 아키텍처나 TDD, DDD와 같은 책도 현재 한국에서 출간된 서적 중 많은 비율은 Java와 Spring을 대상으로 설명하고 있다.

그러나 2021년 기준, 스타트업처럼 빠르게 프로덕트를 만들어야하거나 규모가 있는 회사에서도 린하게 움직이기 위해 Spring이 아닌 Python, Node JS 등 다른 생태계의 언어와 프레임워크를 도입하기 시작했다. 이런 흐름에 따라 입문 수준의 Python Flask, Django 도서는 그동안 꽤 출간이 됐었지만, 아키텍처 레벨에서 어떻게 시스템을 디자인하고 테스팅을 할 지에 대한 책은 거의 없거나 많지 않았다.

본 도서는 Python의 Flask를 기반으로 스텝별로 Hands-on 실습을 통해서 어떻게 아키텍처를 개선하고 어떤 점을 신경써야하는 지 잘 기술되어 있는 서적이다. Spring Framework 의 빈출 질문인 Select N+1 이슈나 ORM 관련 엔지니어가 신경써야할 부분 등 Python 기반의 백엔드 개발을 한다면 여러 가지 시행 착오를 겪지않고 대비할 수 있게 책 구성이 되어있는 점이 장점이라고 생각한다.

다만, 도서의 기대 독자가 입문자보다는 어느 정도 Back-end 개발 경험이 있는 엔지니어이므로 여러 가지 기본적인 내용은 생략하고 있으므로 시스템 디자인을 일정 수준 이상 구성해본 엔지니어가 도서를 봤을 때 더욱 가려운 부분을 잘 긁어줄 수 있을 것이라고 보인다. 책의 두께 대비 난이도가 꽤 있기 때문에 여러 번 읽어서 체화하는 것을 추천한다!

1210620.jpg

 

 

아키텍처 패턴을 아시나요?

이 패턴은 문제점을 해결하기 위한 재사용 가능한 솔루션을 말합니다.

 

소프트웨어의 전체적인 그림을 만드는 솔루션이라 할 수 있습니다.

 

아키텍처 패턴은 디자인패턴보다 더 넓은 범주를 갖고 있습니다.

 

예시로 컴퓨터 하드웨어 성능 제한, 비즈니스 위험 최소화를 생각해 볼 수 있습니다.

 

개발자들은 비즈니스 프로세스를 개선하거나 자동화하기 위해 일합니다.

 

도메인 주도 개발 설계하는 과정을 알려주는 책이 나왔습니다.

 

책 제목은 ‘파이썬으로 살펴보는 아키텍처 패턴'입니다.

 

파이썬을 활용한 실전 예제를 통해 도메인 주도 개발을 이해할 수 있습니다.

 

도메인은 프로세스가 지원하는 활동을 말합니다.

 

파이썬으로 아키텍처 패턴을 활용하는 방법을 배우는 시간이 되시길 바랍니다.

 

2210620.jpg

 

 

◆ 도메인 모델링 아키텍처

도메인 모델링 아키텍처는 4가지 핵심패턴이 있는데요.

저장소 패턴, 서비스 계층 패턴, 작업단위 패턴, 애그리게이트 패턴이 있습니다.

 

저장소 패턴은 영속적인 저장소에 대한 추상화를 다룹니다.

 

서비스 계층 패턴은 유스 케이스의 시작과 끝을 명확하게 정의하기 위한 패턴입니다.

 

작업단위 패턴은 원자적 연산을 제공합니다.

 

마지막으로애그리게이트 패턴은 데이터 정합성을 강화하기 위한 패턴입니다.

 

4가지 핵심패턴이 어떻게 동작하는지 처음엔 알기 어려울 수 있습니다.

 

하지만 차례대로 학습하고 반복하시면 도메인 모델링에 대해 이해하게 될 것입니다.

 

3210620.jpg

 

 

◆ 저장소 패턴

저장소 패턴은 데이터 저장소를 더 간단히 추상화 한 것으로 이 패턴을 사용하면 모델 계층과 데이터 계층을 분리할 수 있습니다.

 

계층을 분리하면 3가지로 분리 할 수 있는데요.

표현 계층(UI), 비즈니스 로직, 데이터베이스 계층으로 나눌 수 있습니다.

 

장고를 배우게 되면 배우는 패턴으로 MVC 패턴이 이 계층을 의미합니다.

 

하지만 도메인 모델에서는 어떤 의존성도 없기를 바람을 알고 있어야 합니다.

 

저장소 패턴은 영속적 저장소에 대한 단순한 추상화로 만드는 겁니다.

 

데이터를 접근할 때 최소한의 필요한 것만 남기고 나머지 관련 사항을 감출 수 있어야 합니다.

 

 

4210620.jpg

 

 

끝으로 파이썬은 아키텍처 패턴의 기초부터 활용하는 법을 알려줍니다.

 

이 책은 비즈니스 관련 대화로부터 모델을 구축하는 방법을 배울 수 있습니다.

 

도메인 주도 설계를 배워야 할 내용이 많습니다.

 

도메인 주도 설계 관련 추천할만 한 책 2권을 말씀드리겠습니다.

 

첫 번째는 더 깊게 파고 싶은 분들에게는 위키북스 ‘도메인 주도 설계’ 책 입니다.

 

두 번째는 에이콘 출판사의 ‘도메인 주도 설계 핵심' 빨간책을 추천합니다.

 

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

 

 

SE-50728706-fa7c-4a45-95b4-d3837e82eb01.jpg

 

 

 

개체지향 프로그래밍에서 디자인 패턴은 특정 문제에 대해 재사용 가능한 해결책이다. 즉, 코드를 효율적으로 설계하여 비슷한 문제가 발생했을 때 해결하기 위함이다. 아키텍처 패턴은 이보다 상위 수준을 뜻한다. 하드웨어의 성능 제한, 소프트웨어 설계의 비용 및 위험성 등을 들 수 있다. 프로그래밍을 해본 사람이라면 디자인패턴 한두개쯤은 알고 있을 것이다. 중복되는 코드를 최대한 줄이고 재사용성을 높이기 위해서라도 필수일 것이다. 아키텍처 패턴은 필수라고 한다면 필수이지만 당장은 아니다.

프로젝트의 규모가 커질수록 혼자서만 코드를 작성하는게 아니기 때문에 여러가지 상황을 고려해야 한다. 주니어 프로그래머 단계에서는 당장 공부해야할 내용은 아니지만 언젠가는 해야될 내용이기에 천천히 봐두면 좋다. 나 역시, 실무 프로그래밍을 접한지 얼마되지 않았지만 팀내에 아키텍처 설계하시는 분도 있으며 그분들이 작성한 코드를 이해하기 위해 최소한 단어라도 알아두자는 마음에서 이 책을 접했다.

이 책은 '도메인 주도 설계', '엔터프라이즈 애플리케이션 아키텍처 패턴' - 2권의 책을 자주 인용하여 작성하였다. 예전 문헌 코드들은 자바, C++, C#으로 작성되어 있으며 파이썬다운 방식으로 이런 기법들을 구현할 때 참고서가 되었으면 한다는 바램으로 파이썬으로 작성했다고 한다. 개인적으로 '**다운'을 굉장히 싫어한다. 'C++ 스럽지 않다.', '자바는 그렇게 안해' 등등. 아니, 문제 해결을 효율적으로 하기 위한 목표를 가지고 언어의 철학을 들이미는건 뭔 경우지... 개인적인 느낌은 그냥 파이썬으로 아키텍처 패턴을 설명한 책이 없으니 한번 집필해보자가 전부인것 같다.

책에서 말하는 핵심 설계 4가지 패턴은 다음과 같다. 1) 저장소 패턴, 2) 서비스 계층 패턴, 3) 작업 단위 패턴, 4) 애그리게이트 패턴. 한마디로 먼저 행동하고 저장에 대한 요구 사항은 해동에 맞춰 정해져야 한다는 것인데, 개념이 확 와닿지는 않는다. 책의 내용은 대략적으로 알겠으나 주니어 단계에서는 아직 벅찬 느낌이 있다. 파이썬으로 아키텍처를 설계할 정도의 사람들이라면 한번쯤은 봐도 괜찮을 것 같다.

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

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

내가 최근에 꽤나 인상 깊게 읽은 기사가 있다. 개발자에게 공부란 평생 따라오는 것인데, 과연 어느 방향으로 공부를 할 것이냐는 것이다. 최신 트렌드를 공부를 할 것이나, 현재 하고 있는 기술스텍을 더욱 더 깊게 공부할 것이냐였다. 나는 그동안 전자를 많이 따랐던 것 같다. 새로운 기술에 대해 놀라고, 이걸 어떻게 적응할지 생각을 했던 것 같다. 하지만 회사의 입장에서는 후자가 더 안정적인 사업을 가져다 줄 것이라고 칼럼 저자는 말한다. 이 칼럼을 보고서 내가 그나마 할 수 있는 것들 중 더욱 더 열심히 해야 할 것들에 대해서 생각을 했다. 

http://naver.me/FtvLHEnE

 

따라서 내가 제일 처음 배웠던 개발 언어인 '파이썬'에 집중하기로 했다. 파이썬을 쓸 수 있지만, 제대로 쓰는 것인가에 대해선 항상 의문을 가지고 있기 때문이다. 또한, 이전에 읽었던 <클린 아키텍쳐>를 직접 파이썬에 적용을 할 수 있지 않는가 싶었다. 책은 난이도가 꽤 있다. 기본적으로 어려운 용어들이 난무를 했고, 아키텍쳐에 대해 어느 정도 이해가 있어야 술술 읽지 않는가 싶다. 책은 얇지만 결코 내용은 쉽지가 않다. 하지만 파이썬을 더 깊게 공부하고, 제대로 써 먹으려면 반드시 읽고 넘어가야 하는 책이다.

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

 

- 큰 규모의 프로그램을 작성하다 보면 코드 구조가 점점 복잡해져 기능 추가와 같은 개선 작업이 어려워지는 경우가 많습니다.

- 많은 개발자가 고통받는 시간이 길어지자, 사람들은 스스로 답을 찾아 나섰고 그 결과 디자인 패턴이라는 체계를 만들었습니다.

- 이처럼 패턴은 프로그래밍에서 많은 사람들이 공통적으로 느꼈던 단점을 해결하고자 구조적 개선과 정형화된 구조를 의미합니다. 그렇기 때문에 정답은 없으며 꾸준히 발전되는 분야입니다.

 

 

## 아키텍처 패턴?

 

- 객체지향 프로그래밍에서 잘 만들어진 클래스의 설계와 관계를 디자인 패턴이라고 부릅니다. 대표적으로 GoF(Gang of Four)의 디자인 패턴이 있습니다.

- 아키텍처 패턴은 디자인 패턴과 비슷하지만 더 넓은 범위의 구조를 다룹니다. 디자인 패턴은 주로 소프트웨어 프로그래밍에서의 문제를 다루고 있다면, 아키텍처 패턴은 소프트웨어의 다양한 문제를 다루고 있습니다.

 

 

## 아키텍처 패턴을 공부할 필요가 있을까?

 

- 프로젝트의 규모가 커지다 보면 자신의 비즈니스 로직에만 집중하기가 힘들어 집니다. 아무런 설계 없이 작성된 코드들은 서로 복잡한 의존성을 갖고 되고 지속적인 개발과 개선 작업을 진행하기 힘들어집니다.

- 일반적인 경우 이런 상황이 발생하게 되면 설계를 다시 검토하고 프로젝트의 구조를 개선하는 작업을 진행하게 됩니다. 아키텍처 패턴은 이러한 경우 큰 도움이 됩니다.

  - 패턴 그 자체의 지식을 활용하여 프로젝트의 복잡성을 낮추는 작업을 가능하게 한다.

  - 패턴이 정의하고 있는 기술적 용어의 이해를 바탕으로 의사소통에 비용이 들지 않으며, 추상화된 작업 흐름을 이해할 수 있다.

- 이러한 이유로 소프트웨어 공학이 다루는 다양한 지식들을 반드시 공부할 필요가 있다고 생각합니다.

 

 

## 왜 파이썬인가?

 

- 프로그래밍 언어 중 파이썬만큼 다양한 분야에서 활용되는 언어는 없다고 생각합니다. C++, JAVA 등 각 언어마다 주로 사용되는 분야가 있지만, 파이썬은 거의 모든 분야에서 사용 가능하다는 장점이 있습니다.

- 따라서 많은 사람들이 파이썬 언어를 사용하고 있으며, 현업 환경에서도 그 영역을 넓혀가고 있습니다. 많은 사람들이 처음 배우는 프로그래밍 언어로 파이썬을 선택하고 있는 지금, 아키텍처를 처음 공부하려는 사람에게는 적절한 선택이라 생각합니다.

 

 

## 주요 내용

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

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

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

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

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

 

 

- 책이 다루고 있는 범위가 매우 넓고 방대해서 처음 읽기에는 다소 어려운 느낌을 많이 받았습니다. 어떻게 이 방대한 분량을 이렇게 얇은 책으로 만들었을까? 싶은 생각이 들기도 하고, 반드시 알아둬야 할 내용이라 생각이 들어 책을 놓지도 못하게 만드는 마법 같은 책입니다.

- 첫 번째 읽을 때는 이게 뭐지? 싶은 순간도 있습니다. 반드시 책의 흐름을 따라가며 코드로 작성해보며 학습하기를 추천합니다. 눈으로 코드를 보는 것과 같은 코드를 손으로 따라 하며 직접 해보는 것은 큰 차이가 있습니다.

 

 

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

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

 

파이썬은 쉽게 간결하며 빠르게 배우고 개발하는데 사용할수 있는 언어로, 

점점 사용자가 늘어나고 있고 많은 프로젝트에 사용하게 되고 있지만, 

아직까지도 대형 프로젝트에서는 많이 사용하지 않고 있는듯하다.

 

'파이썬으로 살펴보는 아키텍처 패턴' 책은 파이썬을 가지고, 

어떻게 하면 대형 프로젝트에 사용할수 있는지를 고민해보고 

프로젝트 규모가 커질수록 요구사항과 복잡성들을 해결하는데 

자료를 찾기 힘들었던 분들에게 단비와 같은 책이 될것이다.

 

 

 

 

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

 

이 책에서는 DDD, TDD 에 대해서 기본적인 내용들은 소개를 하고 있지만, 

입문서로서는 다소 부족할수 있고, 파이썬으로 다양한 프로젝트를 경험해 보면서, 

엔터프라이즈 프로젝트에 설계부터 진행해 보고 싶은 개발자분에게 큰 도움이 될것이다.

 

  

 

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

 

 

1300.jpg

 

파이썬은 머신러닝과 데이터 과학으로 인해 인기가 있는 언어이지만, 엔터프라이즈 환경에서는 아직 관련 자료가 많지 않다. 하지만 이 부족함을 메워줄 책이 등장했다.

'파이썬으로 살펴보는 아키텍처 패턴' 이 책은 실질적인 예제를 통해 DDD를 설명하고, DDD의 핵심 요소 이해하기 쉬운 모델과 소프트웨어를 설계하는 과정을 알려준다. 이 책의 주 독자인 파이썬 프로그래머는 복잡하 엔터프라이즈 시스템을 파이썬으로 작성하는 방법을 배울 수 있고, 다른 개발자들도 DDD에 대해 쉽게 입문할 수 있을 것이다.

 

1301.jpg

 

엔터프라이즈 소프트웨어를 개발하는 언어는 많은데 왜 굳이 파이썬일까? 하는 궁금증이 생겼는데, 파이썬은 세계에서 가장 빠르게 성장하는 프로그래밍 언어이오, 웹 앱과 스크립트를 사용한 자동화는 엔터프라이즈 소프트웨어처럼 거대해지고 있기 때문이다.

 

1302.jpg

 

이 책은 고전적인 아키텍처 패턴을 소개하고, 이 패턴들이 어떻게 테스트 주도 개발(TDD), 도메인 주도 개발(DDD), 이벤트 주도 마이크로서비스(EDA)를 지원하는지 보여준다.

1부는 도메인 모델링을 지원하는 아키텍처 구축이고, 2부는 이벤트 기반 아키텍처에 대한 설명을 담고 있다.

예제코드는 아래 url에서 확인할 수 있다.

https://github.com/cosmicpython/code/brances/all

 

개인적으로 파이썬이라는 언어에 대해 조금 알고 있는 상태이고, 엔터프라이즈 시스템에 대해서는 아는 바가 많지 않다. 그러다보다 이 책의 내용이 잘 이해될까 걱정이 앞서긴 했는데, 아키텍처 디자인 패턴에 대해 전혀 지식이 없던터라 이 책을 통해서 어떤 것인지 잘 알 수 있었다.

 

1303.jpg

 

​디자인 패턴을 적용하면 어플리케이션의 복잡성과 의존성을 낮추고, test suite를 최대한 활용할 수 있는 점이 마음에 든다. 그리고 이 책에서는 아키텍처 패턴을 제시할 때마다 이로 인해 얻는 지식은 무엇이고, 또 이 패턴을 채택하면 어떤 댓가를 치뤄야 하는지에 대한 질문을 던지는데, 책 내용을 읽다보면 마지막 부분에서 그 해답을 자연스럽게 찾을 수 있다. 그리고 아키텍쳐 모델의 장단점을 잘 설명이 되어 있어서 실무에서 적용시 참고가 많이 될 것 같다.

 

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

 

#파이썬으로살펴보는아키텍쳐패턴 #테스트주도개발 #도메인주도개발 #이벤트주도마이크로서비스 #파이썬 #아키텍쳐패턴

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

아키텍처, 정답이 있다기보다 해답을 찾아가는 과정에 가깝다고 생각합니다.
그렇다 보니 이게 정답이라는 식으로 풀어나가면 다양한 상황과 여러 계층에서 대응할 수 있는데 과연 정답이라고 할 수 있는지 의문을 제기할 수밖에 없습니다. 많은 생각과 다양한 시도를 필요로 하는 부분은 필연적으로 여러 제안과 방식이 나타나기 때문입니다.
책은 제목 그대로 아키텍처를 살펴보고 있습니다. 무질서를 벗어나고자.

아키텍처를 얘기할 때 만나는 개념들이 내용 안에 자연스럽게 녹아있습니다. 아는 만큼 보인다고 하는 것처럼 고민한 만큼 얻는다는 느낌을 책에서 받습니다.

일반적인 생성, 조회, 수정, 삭제를 넘어 생각해 보아야 할 화두를 던집니다.
책의 물리적인 분량은 많지 않습니다. 하지만, 다루는 내용은 책의 분량을 넘어섭니다. 그렇기에 같이 보면 좋은 글을 알려주는 링크가 곳곳에 있습니다. 테스트를 만들고 기능을 구현하고 보완하기를 반복합니다.
 

도메인 모델링을 어떻게 풀어나가는지 보여줍니다. 책임을 나누고 집중하는 형태로 만들어 나가다 보면 결국 이벤트 기반 아키텍처에 도달합니다.
여러 가지 아키텍처를 생각해 볼 수 있습니다. 저자의 선택은 도메인 모델을 이용한 이벤트 기반 아키텍처입니다.
지저분해지는 코드를 막기 위해 이벤트를 이용합니다. 이벤트를 발생시켜서 메시지 버스에 알려줍니다.
누가 이벤트를 발생시킬지 살펴보는 내용을 여과 없이 보여줍니다.
 

내가 해보니 이게 가장 좋은 결과를 얻었다고 결론을 알려주는, 과정은 건너뛰고 알려주는 결론을 따라오라는 방식과 거리를 두고 있습니다.
과정을 건너뛰지 않습니다. 각 주제마다 여러 가지 많은 시도가 있었겠지만, 그 가운데 몇 가지 주요 선택지를 골라 풀어내고자 하는 아이디어와 주어진 상황에 어떻게 적용할 수 있는지 보여줍니다.
그리고 어떤 결론에 도달했는지 알려줍니다. 물론, 도달한 결론이 정답이라고 말하지도 않습니다. 다만 좋은 점과 도움이 되는 부분, 장단점을 알려주며 마무리합니다.

부록까지 모두 살펴보기를 권합니다. 본문에서 간단히 언급하고 다루지 못했거나 아키텍처라는 주제와 거리가 있지만 실무에 적용할 때 생각해 볼 만한 내용을 넣어 놓았습니다. 부록의 내용 가운데 한 문장으로 이 책을 얘기할 수 있습니다.


여러분의 앱이 더 이상 간단한 앱이 아닐 때 무엇을 해야 하는지에 대한 내용을 다룹니다.


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

KakaoTalk_Photo_2021-06-18-15-34-20.jpeg

 

 
이 리뷰는 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.
 
이것저것 어플리케이션을 개발하다 보면 클린아키텍처, DDD, Onion 아키텍처 등등 많은 개발 아키텍처 패턴에 대해 관심을 가지게 된다. 하지만 개인적으로 읽었었던 글 중에서는 MS docs 에 있는 .NET 마이크로 서비스: 컨테이너화된 .NET 애플리케이션을 위한 아키텍처 가 가장 쉽게 와닿았었던 것 같다. 이 책 또한 .Net 문서와 비슷한 아미텍처 패턴에 대해서 알려주고 있는 책이다. 문서와 다른 점은 일단 이 책은 마이크로서비스에 관한 이야기는 아니고 파이썬으로 되어 있다는 점이 아닐까 싶다.
 
머리속에는 DDD, TDD, EDA, CQRS, UOW, 등등 패턴과 아키텍처가 섞여서 이해하게 되고, 이걸 적용할 때는 어떤 방식으로 적용해야 하나 항상 고민했었는데 책을 읽고난 후에는 이렇게 머리에 난잡하게 있던 개념들이 정리되는 느낌을 받았다. 결로적으로는 실제로 어떻게 적용하는지가 중요한데 이 책에서는 직접적으로 예시를 들면서, 리펙토링을 해가며 개념들을 하나씩 적용해 나가는 부분이 마음에 들었다.
 
이 책은 목차만 보아도 무엇을 이야기하는지 정확하게 적혀 있다. Part1 에서는 1장의 도메인 모델링, 2장의 Repository 패턴, 4장의 Application Service 계층, 5장에서 테스트는 어떻게 하는 것이 좋을지, 6장의 UOW 패턴 등 어디선가 들어봤고 적용하고 있는 부분들에 대해서 알려주고 있다. 마지막에는 Aggregate 과 Bounded Context 에 대해서 간단하게 알려주면서 끝이 난다.
 
그 뒤 Part2 에서는 EDA 와 관련해서 알려주는데 8, 9장은 domain event 와 관련된 이야기, 10장은 command event, 11장은 Integration Event, 12장은 CQRS 관련해서 이야기한다. 그리고 이렇게 이벤트 핸들러들이 늘어났을 경우 의존성 주입을 하지 않으면 불편한 점들이 야기되는데 이를 위한 DI 에 대해서 알려주고 있다.
 
특히 부록도 마음에 들었었는데 부록B 에서는 초반에 개발할때 고민하게 되는 프로젝트 구조를 어떻게 짜면 좋을지에 대한 이야기로 시작, 부록C 는 추상화를 할 경우 infrastructure 를 어떻게 쉽게 갈아끼울 수 있는지에 대한 이야기, 부록D 는 장고와 같은 full framework 에서 어떤 방식으로 domain 모델을 프레임워크에 종속적이지 않게 만들 것인지에 대해 이야기해준다. 그리고 부록E 는 처음접해봤었는데 작성자의 경우에도 궁금했던 부분들에 대한 이야기였다. 검증을 어디서 해야하고 이는 어떤 layer 에 들어갈까 하는 부분이다.
 
이 책은 어려운 개념이 많이 들어있기 보다는 실무에서 어떻게 사용하면 좋을지에 대한 실무에 가까운 책인 것 같다. 하지만 개인적으로 생각해 보았을 때 DDD, EDA, TDD 등을 완전히 처음 접해본다 하면 개념을 좀 더 찾아보고 읽기를 권유하고 싶다. 개념에 대해서 간단하게 이해할 수 있을 정도로만 설명하고 넘어가고 코드 위주로 설명하기 때문에 개념을 이해하지 못한다면 왜 이렇게 사용하는지 이해가 잘 안될수도 있을 것 같았기 때문이다.
 
결론적으로 전체적으로 어플리케이션 아키텍처 패턴을 정리하고 싶은 분들은 이 책을 구매해서 읽어보는 것을 추천하고 싶다.

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

 

- 빅데이터에 의해 이륙한 파이썬은 이제 머신러닝과 데이터 과학으로 인해 계속 고공비행중이다 -

 

 

 

1.jpg

 

2.jpg

 

3.jpg

 

 

 

 

왜 파이썬 커뮤니티에 이런 책이 필요할까?

 

 

= 파이썬의 사용자 수와 성숙도이다. 파이썬은 세계에서 가장 빠르게 성장하는 프로그래밍 언어다.

 

이제 겨우 C#이나 자바에서 여러 해 동안 다룬 유형의 문제를 처리하기 시작했지만 사용 인구 면에서 거의 최상위를 차지한다.

 

스타트업은 실제 비즈니스로 성장하고 있고, 웹 앱과 스크립트를 사용한 자동화는 엔터프라이즈 소프트웨어가

 

되고 있다.

 

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

 

 

 

 

이 책의 목적은 여러가지 고전적인 아키텍처 패턴을 소개하고 이런 패턴들이 어떻게 DDD, TDD, 이벤트 기반 서비스를 지원하는지 보여주는 것이다.

 

 

 

 

DAY 1, 2, 3

 

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

 

파트 1

 

 

도메인 모델링부터 애그리게이트와 일관성 경계까지

 

 

4.jpg

 

5.jpg

 

6.jpg

 

7.jpg

 

8.jpg

 

9.jpg

 

10.jpg

 

 

 

 

이 서적은 1부 : 도메인 모델링을 지원하는 아키텍처 구축과 2부 : 이벤트 기반 아키텍처로 나누어 설명합니다.

 

여러분은 카오스라는 단어를 들으면 어떤 것이 떠오르세요? 아마 지금 제 기분과도 같은데요, 아마도 시끄러운 증권 거래소나 혼란스러운 상황이 생각 날 것입니다. 제가 0챕터 도입부를 보는 것과 같은 느낌이겠네요!

 

책장 첫 페이지부터 설계가 왜 잘못되었는지를 설명해줍니다. 그리고 캡슐화, 추상화, 계층화, 의존성 역전 원칙까지 이야기하며 예를 보여줍니다. 너무 마음에 드는 서적을 만난 것 같습니다.

 

1장에서는 도메인 모델 패턴으로 비즈니스 계층을 만드는 방법을 보여줍니다. 그리고 2 ~ 7장에서는 올바른 추상화를 선택하고 지속적으로 DIP를 적용하여 이 도메인 모델을 변경하기 쉽고 저수준 관심사로부터 자유롭게 유지하는 방법을 살펴봅니다.

 

도메인 모델링부터 저장소패턴, 그리고 애그리게이트와 일관성 경계까지 많은 어려운 내용을 설명하고 있습니다.

 

특히 데이터 모델에 특화된 개발자 분들에게는 굉장히 심오하고 어려운 내용으로 다가 올 것 같네요. 저 역시 마찬가지입니다 ^^;;

 

하지만 이 책은 DDD 책은 아닙니다, 도메인 모델을 개발하는 프로세스, 도구, 테크닉이나 DDD에 대해 배워야 할 내용이 많습니다.

 

DDD책을 따로 같이 보시는 것을 권해 드립니다.

 

 

 

 

 

DAY 4, 5, 6

 

이벤트 기반 아키텍처 I

 

파트 2-1

 

 

이벤트와 메시지 버스

 

 

11.jpg

 

13.jpg

 

14.jpg

 

15.jpg

 

16.jpg

 

 

6장은 작업 단위 패턴부터 시작합니다. 제가 많은 어려움을 느꼈던 7장 - 애그리게이트도 나오네요!

 

1부에서는 높은 수준의 단위 테스트를 통해 검증된 도메인 모델을 만드는 방법을 살펴봤습니다.

 

테스트는 살아있는 문서입니다. 즉, 테스트는 시스템의 행동 방식을 읽기 좋은 멋진 코드로 기술합니다.

 

비즈니스 요구 사항이 바뀌더라도 테스트가 새로운 기능을 검증할 때 도움이 되리라 확신합니다.

 

그리고 프로젝트에 합류한 새로운 개발자도 테스트 코드를 읽고 시스템이 어떻게 작동하는지 이해할 수 있습니다.

 

데이터베이스나 API 핸들러 등의 시스템 하부구조를 분리해서, 애플리케이션 외부에서 이런 하부 구조를 끼워넣을 수 있게 만들어 봤습니다. 이로 인해 코드베이스를 더 잘 조직화하고 애플리케이션이 내부를 파악할 수 없을 정도로 복잡해지지 않게 할 수 있습니다.

 

의존성 역전 원칙을 적용하고, 포트와 어댑터에서 영감을 얻은 저장소나 작업 단위 패턴을 사용하여 TDD를 높은 기어비와 낮은 기어비 양쪽으로 수행할 수 있게 됐고, 건강한 테스트 피라미드를 구축하고 유지할 수 있습니다.

 

시스템을 한쪽 끝에서 다른쪽 끝까지 테스트할 수 있어서, 엔드투엔드 테스트나 통합 테스트의 필요성을 최소화할 수 있습니다.

 

마지막으로는 일관성 경계라는 개념에 대한 설명에 나왔습니다. 변경이 필요할 때마다 전체 시스템을 잠그고 싶지 않아서 어떤 부분이 다른 부분과 일관성이 있어야 하는지 선택해야 했습니다.

 

이렇게 7장까지 마무리하면서 어느덧 1부가 끝났습니다. 굉장히 내용 정리하기도 어려운 내용이 매우 많이 들어있네요 ^^;;

 

일단 속독을 하며 읽고 코드를 이해하고 있지만, 아무래도 정독을 몇번이나 다시 하면서 공부해야 될 분야인 것 같습니다!

 

이제, 2부에서는 이벤트 기반 아키텍처에 대한 내용을 다룹니다.

 

2부에서는 1부에서 배운 기법을 확장해 분산 시스템에 적용하는 방법이 주를 이룹니다. 수많은 작업 컴포넌트를 합성해 동기적으로 메시지를 서로 전달하면서 상호작용하는 큰 시스템을 만드는 방법에 대해 자세히 살펴봅니다.

 

서비스 계층과 작업 단위 패턴을 사용해 어떻게 하면 앱을 비동기적인 메시지 처리기로 재설정할 수 있는지를 살펴보고, 이벤트 기반 아키텍처를 통해 애그리게이트와 애플리케이션을 서로 분리하는 방법까지 살펴봅니다.

 

8장에서는 도메인 이벤트, 9장에서는 더 복잡한 워크플로를 메시지 시스템에 구축하면서 이벤트와 메시지 버스라는 개념을 더 자세히 살펴보고 이후에 이벤트와 커맨드의 개념, 이벤트를 통합 패턴으로 사용하는 방법에 대하여 다룹니다.

 

너무 많은 내용이 있어, 다 설명해드리지 못하는 점 양해 부탁드립니다 ^^;; 꼭 서적을 구매해서 읽어보시길 추천해드립니다.

 

 

 

 

DAY 7, 8, 9

 

이벤트 기반 아키텍처 II

 

파트 2-2

 

 

이벤트 기반 아키텍처, 명령-질의 책임 분리, 의존성 주입

 

 

17.jpg

 

18.jpg

 

19.jpg

 

20.jpg

 

 

 

 

이벤트는 외부에서 들어올 수 있다. 하지만 이벤트를 외부로 발행할 수도 있다. 우리가 만든 publish 핸들러는 이벤트를 레디스 메시지 채널의 메시지로 변환한다. 우리는 이벤트를 사용해 외부 세계와 이야기한다. 이런 종류의 시간적인 결합을 사용하면 애플리케이션 통합 시 상당한 유연성을 얻을 수 있다.

 

하지만 언제나 그렇듯이 다른 대가를 치르게 될 것이다.

 

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

 

 

 

11장에서는 이벤트를 통합 패턴으로 사용하는 방법에 대해서 다루고, 12장에서는 명령-책임 분리에 대하여 살펴봅니다.

 

그리고 13장에서는 의존성 주입에 대하여 이야기하며 막을 내립니다.

 

마지막 13장 의존성 주입 같은 경우에는 매우 생소한 내용이 많았습니다.

 

파이썬에서? 라는 생각이 들게 만드는 챕터였지만 부트스트랩 스크립트가 하는 역할에 대해서 어느정도 감을 잡은 후 이해가 되기 시작했습니다.

 

어댑터가 하나 이상 존재하면 직접 여기저기 의존성을 전달하는 과정이 고통스럽게 느껴지기 시작하는데 이때 의존성 주입을 사용하면 편리해집니다.

 

의존성 주입을 설정하는 것은 앱을 시작할 때 한 번만 수행하면 되는 전형적인 설정/초기화 홀동의 일부이며, 이 모두를 부트스트랩 스크립트에 넣는 것이 좋습니다.

 

그렇게 13장은 최종 암시적/간단한 의존성을 ABC로 분리하고, 분리한 ABC의 실제와 가짜 구현을 정의하고, 단위 테스트와 통합 테스트를 거쳐서 '적절한' 어댑터로 바꾸는 실제 사례까지 살펴본 후 종료합니다.

 

휴, 생각보다 어려운 내용이 많은 서적이네요 ^^;;

 

이해 안되는 부분도 상당히 있어 다시 정독을 해야 될 것 같습니다!

 

 

 

 

 

DAY 10

 

후기

 

왜 지금인가?

 

 

스스로 밑바닥부터 무언가를 작성할 수 있을 수 있을때까지 훈련!

 

 

 

 

 

21.jpg

 

22.jpg

 

 

23.jpg

 

24.jpg

 

 

 

 

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

 

 

 

참 생소한 내용이 많았던 서적입니다.

 

역시 사람은 겸손하며 항상 끊임없이 배워야 되는 것 같네요 ^^;;

 

확실히 책만으로 전문가가 되는 건 어렵다는 것을 알 수 있습니다.

 

무언가를 스스로 밑바닥부터 작성해서 적용한다는 것이 어렵지만,

 

적당한 정도의 코드를 제공하고 있기 때문에 계속 읽고 적용한다면 실력이 일취월장하리라 믿습니다.

 

그리고 14챕터 마지막 맺음말에서는

 

지침과 같은 내용도 설명해주고 있어, 다시한번 좋은 서적이라는 것을 느낍니다.

 

파이썬으로 아키텍처를 공부하려는 모든 분께 강력히 추천해 드립니다.

 

 

 

★★★★★

 

 

 

리뷰를 마치며!

 



Architecture Patterns with Python

 

 

아직 한국에서는 엔터프라이즈 환경에서 파이썬을 다루는 곳은 흔하지 않다. 서비스가 궤도에 오르기 전이거나 MSA의 일부분으로 선택되는 경우는 종종 봤지만 말이다. 아 물론, 여기서 이야기하는 부분은 서비스의 백엔드이다. 데이터 엔지니어링이나 머신러닝을 다루는 분야에서는 단연 파이썬은 독보적인 언어니까. 아무튼, 이런 시국에 한빛미디어에서 아주 묵직한 책이 나왔다. 무려 "Architecture Patterns with Python"

TDD, DDD, EDM까지 적용한단다. 1부는 비교적 가볍다. 도메인 모델링을 지원하는 아키텍처 구축이라는 제목 아래 저장소 패턴과 추상화, 작업 단위 패턴을 이야기한다. 가볍지만 익숙하지 않다면 호락호락하지 않다. 파이썬 문법이야 당연히 아주 잘 알고 있다는 전제로 내용이 전개되며 ORM으로는 SQLAlchemy을 다룬다. 개념을 숙지하고 있다면 조금은 더 잘 읽힐거다. 책의 1부가 끝나면 아주 재밌는 내용이 기다린다. 2부는 이벤트 기반 아키텍처. 그게 뭐지? 할 수 있는데 event-driven architecture 라고 표현하면 익숙하게 들릴 수 있겠다. MSA가 유행처럼 번지면서 자연스럽게 같이 각광받은 아키텍처라고 볼 수 있다. 이벤트 처리와 관련된 심도 있는 내용이 다뤄지기 때문에 어느 것 하나 소홀하게 읽을거리가 없다.

앞에서도 이야기했지만 이 책은 절대 가벼운 책이 아니다. 또한 책을 덮는다고 해서 당장 아키텍처 패턴을 그려낼수도 없다. effective python 처럼 항상 책상 옆에 두고 가까이하면서 온전히 내 것으로 만들어야 하는 책이다. 책의 모든 내용을 완벽히 이해하고 나면 상당한 고수 반열에 오를 수 있겠지만, 비교적 얇은 책이기 때문에 주요 개념은 인터넷이나 다른 서적을 통해 지식을 보충하기를 바란다!

 


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

 



[주요 내용]

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

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

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

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

-명령-질의 책임 분리(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, 이벤트 기반 서비스를 지원하는지 궁금한 독자

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

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

 

 

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

 



결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

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

닫기

리뷰쓰기

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

* 리뷰 작성시 유의사항

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

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

오탈자 등록

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

도서 인증

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

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

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

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

닫기

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

자료실