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

> Clean Markdown view of GeekNews topic #20020. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20020](https://news.hada.io/topic?id=20020)
- GeekNews Markdown: [https://news.hada.io/topic/20020.md](https://news.hada.io/topic/20020.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-03-29T09:40:50+09:00
- Updated: 2025-03-29T09:40:50+09:00
- Original source: [cosmicpython.com](https://www.cosmicpython.com/book/preface.html)
- Points: 5
- Comments: 2

## Summary

이 책은 "TDD with Python"의 저자 Harry와 소프트웨어 아키텍트 Bob이 복잡한 소프트웨어 아키텍처를 이해하고 관리하는 방법을 설명하며, Python을 사용하여 TDD, DDD, 이벤트 기반 아키텍처 패턴을 소개하고 적용 방법을 제시합니다. Python 커뮤니티에 적합한 방식으로 클래식 아키텍처 패턴들을 설명하며, 도메인 모델링, Repository, Service Layer, Unit of Work 패턴, 이벤트 기반 아키텍처, CQRS, 의존성 주입 등을 다룹니다. 또한, 기존 프로젝트에 이러한 패턴을 적용하는 방법과 실습 가이드를 제공하여 독자가 직접 자신의 프로젝트에 패턴을 적용해 볼 수 있도록 구성되어 있습니다.

## Topic Body

- "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하여 실제 작동하는 코드와 함께 학습하는 것을 추천함

## Comments



### Comment 36493

- Author: xguru
- Created: 2025-03-29T09:47:39+09:00
- Points: 2

한글판으로 나와있습니다 [파이썬으로 살펴보는 아키텍처 패턴](https://www.hanbit.co.kr/store/books/look.php?p_code=B9529701010)

### Comment 36490

- Author: neo
- Created: 2025-03-29T09:40:50+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43501989) 
- 이 책은 아키텍처 패턴에 대한 금광과 같음. 주제를 쉽게 이해할 수 있는 점이 마음에 듦
  - 하지만 실무적으로는 이러한 패턴들이 복잡성과 성능 문제를 야기할 수 있음. 특히 Django 같은 이미 의견이 강한 프레임워크를 사용할 때
  - 큰 회사와 작은 회사에서 Python을 사용해 본 경험이 있음. 엄격한 아키텍처 패턴을 사용하는 큰 회사들은 코드가 "깨끗"하지만 너무 복잡하고 느림
  - 반면, 패턴을 무시한 큰 회사들은 코드가 정말 지저분하지만 생산성이 높았음. 코드가 지저분해도 읽고 이해하고 수정할 수 있었음
  - 이는 나 자신에 대한 이야기일 수도 있지만, 나는 비정형 코드 회사에서 더 생산적이었음. 깨끗한 코드에 대한 논쟁을 피할 수 있었음

- 이 책의 일부는 매우 유용함. 특히 Python이나 특정 언어에 국한되지 않은 개념을 다룰 때
  - 하지만 다른 부분에서는 문제가 있음. 경험이 부족한 개발자가 모든 것을 한 번에 구현하려고 할 때 위험할 수 있음
  - 예를 들어, 리포지토리 패턴은 일반적으로 유용하지만, 책의 예시를 포함해 많은 경우에 복잡성을 더할 뿐임
  - 서비스 레이어와 작업 단위는 복잡한 애플리케이션에 유용하지만, 작은 서비스로 구성된 시스템에서는 과도하게 비대해질 수 있음
  - 디자인 패턴은 다른 도구와 마찬가지로 언제 사용해야 하고 언제 사용하지 말아야 하는지 이해해야 함. 이 책은 이에 대한 조언을 제공하지만, 더 강조되어야 함

- Python을 좋은 접착제 언어로 봄
  - 강제된 OOP 사고방식에 지침. 모든 것에 캡슐화와 상속을 강요하는 것에 지침
  - SOLID, 깨끗한 코딩, 깨끗한 아키텍처, GoF 패턴, Uncle Bob에 지침
  - 명령형 또는 함수형 흐름을 따르며 가능한 한 적은 OOP를 사용함
  - Python을 사용할 때 객체와 패턴이 없는 경험을 원함
  - 이 책이 가치가 없다는 것이 아님. 패턴을 배우는 데 유용함. 하지만 모든 것을 실제 프로그래밍에 맞추지 말아야 함

- 나는 Typescript 개발자지만 이 책은 내가 가장 좋아하는 아키텍처 책 중 하나임. 항상 참고함
  - 테스트를 위한 가짜 작업 단위/서비스 패턴을 종교적으로 사용함. 제3자 서비스를 가짜로 만드는 데 도움을 줌
  - 이벤트를 도메인에 특화된 방식으로 명명하는 것을 추천함. 이는 팀원에게 설명하기 번거로운 부분을 해결함
  - Cosmic Python이 온라인에 완전히 공개되어 있어 링크하기 쉬움. 전반적으로 훌륭하고 형성적인 자원임

- 몇 년 전부터 Python을 전문적으로 작성하기 시작함. Kotlin과 TypeScript에서 왔으며, 언어가 접근하기 쉬웠지만 느슨한 결합과 테스트 가능성을 달성하는 데 어려움을 겪었음
  - 동료의 추천으로 이 책을 구입하고 처음부터 끝까지 읽음. 복잡한 Python 코드베이스에서 복잡성을 관리하는 방법을 이해하는 데 도움이 되었음
  - 모든 패턴을 따르지는 않지만, 가능성과 다른 패러다임의 경험을 Python에 적용하는 방법을 알게 됨
  - 강력히 추천함. 가치가 있음

- 정말 훌륭한 Python 프로그래밍 책 중 하나임. 코드에 정적 타이핑이 없다는 점이 아쉬웠지만, 이는 저자의 의도적인 결정이었음

- 훌륭한 자료 공유에 감사함

- 이 책의 페이퍼백을 2년 반 또는 3년 전에 읽었음. 매우 즐거웠음. 테스트를 일급 주제로 유지하고 각 추가 사항과 함께 지속적으로 업데이트함
  - 테스트가 준비되고 작성하기 쉽고 업데이트하기 쉬운 것이 개발 과정을 더 즐겁게 만듦. 수동으로 코드를 실행하여 문제를 확인하는 것이 덜 필요함
  - 이벤트 지향 부분이 흥미로웠지만 현재 작업에서 구현하기에는 실용적이지 않았음

- Polylith에 대한 언급이 없음. 관련이 있는지 궁금함

- 이 책은 훌륭한 읽을거리였음. 3년 전 C#/.NET DDD 환경에서 일했으며, 이제 Python에서 이러한 개념을 다시 방문하면서 본질적인 부분을 정제함
  - 이와 같은 주제에 관심이 있다면 강력히 추천함
