-
-
파이썬으로 살펴보는 아키텍처 패턴 - TDD, DDD, EDM 적용하기
해리 J.W. 퍼시벌 & 밥 그레고리 지음, 오현석 옮김 / 한빛미디어 / 2021년 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.노력을 적게 하고 싶은 독자를 위해 장마다 ‘연습 문제’를 풀면서 책에서 다룬 패턴을 예제 프로젝트로 작업하는 것이 안전하게 연습할 수있는 좋은 방법입니다. 꼭 직접 코드를 작성하는 과정을 통해서 경험을 쌓기를 바랍니다.
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."