- "TDD with Python" 저자 Harry와 소프트웨어 아키텍트 Bob이 복잡한 소프트웨어 아키텍처를 이해하고 관리하는 방법을 설명한 책
- 이커머스 회사에서 실제 사용한 아키텍처 기법들을 정리하여 공유함
-
MADE.com은 유럽 기반의 온라인 가구 판매 회사로, 글로벌 공급망을 운영
- 물류 최적화를 통해 재고를 최소화하고, 소비자 주문과 동시에 물류가 도착하도록 조율하는 것이 목표임
- 하지만 실제 세계는 복잡하고 예측 불가능하므로, 이를 반영한 지능적인 소프트웨어를 구축하여 자동화하고 있음
- 이 책은 그런 실전 문제들을 해결하기 위해 고안된 아키텍처 패턴들을 다룸
왜 Python인가
- Python은 세계적으로 빠르게 성장하고 있는 언어이며 점점 더 복잡한 엔터프라이즈 문제에 도전하고 있음
- 기존의 아키텍처 책들은 대부분 Java나 C# 기반 예제를 사용하고 있어 Python 사용자에게는 접근이 어려움
- 이 책은 Python 커뮤니티에 적합한 방식으로 클래식 아키텍처 패턴들을 소개함
TDD, DDD, 이벤트 기반 아키텍처 소개
-
TDD (Test-Driven Development):
- 테스트 우선 개발은 안정적인 리팩토링과 기능 추가를 가능하게 함
- 빠르고 의존성 없는 단위 테스트를 우선하고, 느리고 불안정한 end-to-end 테스트는 최소화해야 함
-
DDD (Domain-Driven Design):
- 비즈니스 도메인 모델에 집중하지만, 인프라와 프레임워크 의존도를 줄이는 것이 중요함
-
이벤트 기반 아키텍처:
- 마이크로서비스 간 메시지 기반 통신으로 복잡성을 관리
- Flask, Django, Celery 등 기존 Python 도구들과 어떻게 통합할지에 대한 고민이 필요함
참고: 이 책에서 다루는 패턴 대부분은 모놀리식 아키텍처에도 적용 가능함
- 이 책의 목적은 Python에서 TDD, DDD, 이벤트 기반 서비스를 지원하는 아키텍처 패턴을 소개하고 적용 방법을 제시하는 것임
이 책의 대상 독자
- 복잡한 Python 애플리케이션을 다뤄 본 경험이 있는 개발자
- 아키텍처 패턴이나 DDD에 대한 배경 지식이 없어도 괜찮음
- 테스트를 먼저 작성하고 구현하는 TDD 스타일에 익숙하지 않아도 따라갈 수 있도록 구성함
- Flask, SQLAlchemy, pytest, Docker, Redis 등을 사용하지만 필수 지식은 아님
- 특정 기술이 아닌, 기술 독립적인 아키텍처 설계를 목표로 함
학습 내용 개요
Part 1
-
도메인 모델링과 DDD (1, 2, 7장)
- 도메인 모델을 외부 의존성 없이 구축하는 방법 소개
- 빠른 단위 테스트 작성법 및 데이터 무결성과의 관계 고려
- 적절한 Aggregate 선택 방법 설명
-
Repository, Service Layer, Unit of Work 패턴 (2, 4, 5장)
- 영속성 계층을 추상화하여 모델을 외부 의존성에서 분리
- 시스템 진입점으로서의 서비스 계층 설계
- Flask API나 CLI 같은 얇은 진입점 구축에 적합함
-
테스트와 추상화에 대한 고찰 (3, 5장)
- 적절한 추상화 계층을 선택하는 기준과 역할 탐구
- 높은 추상화 수준에서 단위 테스트를 작성해 테스트 피라미드 달성
Part 2
-
이벤트 기반 아키텍처 (8–11장)
- Domain Events, Message Bus, Handler 패턴 소개
- 이벤트를 통해 시스템 내 상호작용을 트리거함
- 이벤트를 이용한 마이크로서비스 간 통합 방법 설명
- 명령(command)과 이벤트(event)의 차이 구분
- 전체 애플리케이션이 메시지 처리 시스템으로 전환됨
-
CQRS (Command-Query Responsibility Segregation) (12장)
- 명령과 조회 책임 분리를 통한 구조적 효율성 소개
- 이벤트 사용 유무에 따른 구현 예시 포함
-
의존성 주입 (13장)
- 명시적/암시적 의존성 정리
- 간단한 의존성 주입 프레임워크 구현
부록 및 실습 가이드
-
기존 프로젝트에 적용하는 방법 (에필로그)
- 단순한 예제보다 기존 시스템에 패턴을 적용하는 것이 어려움
- 이를 위한 적용 전략과 참고 자료 제공
-
코드 실습 및 GitHub 예제
- 책의 모든 내용을 하나의 예제 프로젝트로 구성
- 각 장마다 GitHub 브랜치로 코드 제공
- 실습 방식:
- 직접 예제 앱을 따라 구현
- 자신의 프로젝트에 패턴을 적용해 보기
- 각 장의 "Exercise for the Reader" 활용하여 연습 코드 작성
팁: 각 장의 시작 부분에서 GitHub의 해당 브랜치를 checkout하여 실제 작동하는 코드와 함께 학습하는 것을 추천함