파이썬으로 살펴보는 아키텍처 패턴
- 빅데이터에 의해 이륙한 파이썬은 이제 머신러닝과 데이터 과학으로 인해 계속 고공비행중이다 -
왜 파이썬 커뮤니티에 이런 책이 필요할까?
= 파이썬의 사용자 수와 성숙도이다. 파이썬은 세계에서 가장 빠르게 성장하는 프로그래밍 언어다.
이제 겨우 C#이나 자바에서 여러 해 동안 다룬 유형의 문제를 처리하기 시작했지만 사용 인구 면에서 거의 최상위를 차지한다.
스타트업은 실제 비즈니스로 성장하고 있고, 웹 앱과 스크립트를 사용한 자동화는 엔터프라이즈 소프트웨어가
되고 있다.
- 파이썬으로 살펴보는 아키텍처 패턴 中 -
이 책의 목적은 여러가지 고전적인 아키텍처 패턴을 소개하고 이런 패턴들이 어떻게 DDD, TDD, 이벤트 기반 서비스를 지원하는지 보여주는 것이다.
DAY 1, 2, 3
도메인 모델링을 지원하는 아키텍처 구축
파트 1
도메인 모델링부터 애그리게이트와 일관성 경계까지
이 서적은 1부 : 도메인 모델링을 지원하는 아키텍처 구축과 2부 : 이벤트 기반 아키텍처로 나누어 설명합니다.
여러분은 카오스라는 단어를 들으면 어떤 것이 떠오르세요? 아마 지금 제 기분과도 같은데요, 아마도 시끄러운 증권 거래소나 혼란스러운 상황이 생각 날 것입니다. 제가 0챕터 도입부를 보는 것과 같은 느낌이겠네요!
책장 첫 페이지부터 설계가 왜 잘못되었는지를 설명해줍니다. 그리고 캡슐화, 추상화, 계층화, 의존성 역전 원칙까지 이야기하며 예를 보여줍니다. 너무 마음에 드는 서적을 만난 것 같습니다.
1장에서는 도메인 모델 패턴으로 비즈니스 계층을 만드는 방법을 보여줍니다. 그리고 2 ~ 7장에서는 올바른 추상화를 선택하고 지속적으로 DIP를 적용하여 이 도메인 모델을 변경하기 쉽고 저수준 관심사로부터 자유롭게 유지하는 방법을 살펴봅니다.
도메인 모델링부터 저장소패턴, 그리고 애그리게이트와 일관성 경계까지 많은 어려운 내용을 설명하고 있습니다.
특히 데이터 모델에 특화된 개발자 분들에게는 굉장히 심오하고 어려운 내용으로 다가 올 것 같네요. 저 역시 마찬가지입니다 ^^;;
하지만 이 책은 DDD 책은 아닙니다, 도메인 모델을 개발하는 프로세스, 도구, 테크닉이나 DDD에 대해 배워야 할 내용이 많습니다.
DDD책을 따로 같이 보시는 것을 권해 드립니다.
DAY 4, 5, 6
이벤트 기반 아키텍처 I
파트 2-1
이벤트와 메시지 버스
6장은 작업 단위 패턴부터 시작합니다. 제가 많은 어려움을 느꼈던 7장 - 애그리게이트도 나오네요!
1부에서는 높은 수준의 단위 테스트를 통해 검증된 도메인 모델을 만드는 방법을 살펴봤습니다.
테스트는 살아있는 문서입니다. 즉, 테스트는 시스템의 행동 방식을 읽기 좋은 멋진 코드로 기술합니다.
비즈니스 요구 사항이 바뀌더라도 테스트가 새로운 기능을 검증할 때 도움이 되리라 확신합니다.
그리고 프로젝트에 합류한 새로운 개발자도 테스트 코드를 읽고 시스템이 어떻게 작동하는지 이해할 수 있습니다.
데이터베이스나 API 핸들러 등의 시스템 하부구조를 분리해서, 애플리케이션 외부에서 이런 하부 구조를 끼워넣을 수 있게 만들어 봤습니다. 이로 인해 코드베이스를 더 잘 조직화하고 애플리케이션이 내부를 파악할 수 없을 정도로 복잡해지지 않게 할 수 있습니다.
의존성 역전 원칙을 적용하고, 포트와 어댑터에서 영감을 얻은 저장소나 작업 단위 패턴을 사용하여 TDD를 높은 기어비와 낮은 기어비 양쪽으로 수행할 수 있게 됐고, 건강한 테스트 피라미드를 구축하고 유지할 수 있습니다.
시스템을 한쪽 끝에서 다른쪽 끝까지 테스트할 수 있어서, 엔드투엔드 테스트나 통합 테스트의 필요성을 최소화할 수 있습니다.
마지막으로는 일관성 경계라는 개념에 대한 설명에 나왔습니다. 변경이 필요할 때마다 전체 시스템을 잠그고 싶지 않아서 어떤 부분이 다른 부분과 일관성이 있어야 하는지 선택해야 했습니다.
이렇게 7장까지 마무리하면서 어느덧 1부가 끝났습니다. 굉장히 내용 정리하기도 어려운 내용이 매우 많이 들어있네요 ^^;;
일단 속독을 하며 읽고 코드를 이해하고 있지만, 아무래도 정독을 몇번이나 다시 하면서 공부해야 될 분야인 것 같습니다!
이제, 2부에서는 이벤트 기반 아키텍처에 대한 내용을 다룹니다.
2부에서는 1부에서 배운 기법을 확장해 분산 시스템에 적용하는 방법이 주를 이룹니다. 수많은 작업 컴포넌트를 합성해 동기적으로 메시지를 서로 전달하면서 상호작용하는 큰 시스템을 만드는 방법에 대해 자세히 살펴봅니다.
서비스 계층과 작업 단위 패턴을 사용해 어떻게 하면 앱을 비동기적인 메시지 처리기로 재설정할 수 있는지를 살펴보고, 이벤트 기반 아키텍처를 통해 애그리게이트와 애플리케이션을 서로 분리하는 방법까지 살펴봅니다.
8장에서는 도메인 이벤트, 9장에서는 더 복잡한 워크플로를 메시지 시스템에 구축하면서 이벤트와 메시지 버스라는 개념을 더 자세히 살펴보고 이후에 이벤트와 커맨드의 개념, 이벤트를 통합 패턴으로 사용하는 방법에 대하여 다룹니다.
너무 많은 내용이 있어, 다 설명해드리지 못하는 점 양해 부탁드립니다 ^^;; 꼭 서적을 구매해서 읽어보시길 추천해드립니다.
DAY 7, 8, 9
이벤트 기반 아키텍처 II
파트 2-2
이벤트 기반 아키텍처, 명령-질의 책임 분리, 의존성 주입
이벤트는 외부에서 들어올 수 있다. 하지만 이벤트를 외부로 발행할 수도 있다. 우리가 만든 publish 핸들러는 이벤트를 레디스 메시지 채널의 메시지로 변환한다. 우리는 이벤트를 사용해 외부 세계와 이야기한다. 이런 종류의 시간적인 결합을 사용하면 애플리케이션 통합 시 상당한 유연성을 얻을 수 있다.
하지만 언제나 그렇듯이 다른 대가를 치르게 될 것이다.
- 파이썬으로 살펴보는 아키텍처 패턴 中 -
11장에서는 이벤트를 통합 패턴으로 사용하는 방법에 대해서 다루고, 12장에서는 명령-책임 분리에 대하여 살펴봅니다.
그리고 13장에서는 의존성 주입에 대하여 이야기하며 막을 내립니다.
마지막 13장 의존성 주입 같은 경우에는 매우 생소한 내용이 많았습니다.
파이썬에서? 라는 생각이 들게 만드는 챕터였지만 부트스트랩 스크립트가 하는 역할에 대해서 어느정도 감을 잡은 후 이해가 되기 시작했습니다.
어댑터가 하나 이상 존재하면 직접 여기저기 의존성을 전달하는 과정이 고통스럽게 느껴지기 시작하는데 이때 의존성 주입을 사용하면 편리해집니다.
의존성 주입을 설정하는 것은 앱을 시작할 때 한 번만 수행하면 되는 전형적인 설정/초기화 홀동의 일부이며, 이 모두를 부트스트랩 스크립트에 넣는 것이 좋습니다.
그렇게 13장은 최종 암시적/간단한 의존성을 ABC로 분리하고, 분리한 ABC의 실제와 가짜 구현을 정의하고, 단위 테스트와 통합 테스트를 거쳐서 '적절한' 어댑터로 바꾸는 실제 사례까지 살펴본 후 종료합니다.
휴, 생각보다 어려운 내용이 많은 서적이네요 ^^;;
이해 안되는 부분도 상당히 있어 다시 정독을 해야 될 것 같습니다!
DAY 10
후기
왜 지금인가?
스스로 밑바닥부터 무언가를 작성할 수 있을 수 있을때까지 훈련!
후기 : 아키텍처 패턴의 기초부터 활용까지 다루는 실전 가이드
참 생소한 내용이 많았던 서적입니다.
역시 사람은 겸손하며 항상 끊임없이 배워야 되는 것 같네요 ^^;;
확실히 책만으로 전문가가 되는 건 어렵다는 것을 알 수 있습니다.
무언가를 스스로 밑바닥부터 작성해서 적용한다는 것이 어렵지만,
적당한 정도의 코드를 제공하고 있기 때문에 계속 읽고 적용한다면 실력이 일취월장하리라 믿습니다.
그리고 14챕터 마지막 맺음말에서는
지침과 같은 내용도 설명해주고 있어, 다시한번 좋은 서적이라는 것을 느낍니다.
파이썬으로 아키텍처를 공부하려는 모든 분께 강력히 추천해 드립니다.
★★★★★
리뷰를 마치며!