본문 바로가기

Life/독서 노트

클린아키텍처 with 파이썬

728x90
반응형

 

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

 

개요

5월에 한빛미디어를 통해 읽게 된 책은 “클린 아키텍처 with 파이썬”이다.

 

그동안 파이썬 관련 서적들을 읽으며 느꼈던 점은, DTO, DAO, Value Object, Entity 같은 개념을 깊게 다루는 경우가 비교적 드물다는 것이었다. 아무래도 파이썬이 동적 언어이다 보니 이러한 개념들을 어떻게 적용하고 규정해야 하는지가 다소 모호하게 느껴졌고, 그래서인지 자연스럽게 “파이썬에서는 이런 구조적 개념이 덜 중요하게 여겨지는 걸까?”라는 생각을 하곤 했다. 다만 아키텍처나 개발 방법론을 다루는 책들을 접할 때마다, 실제로는 그렇지 않을 것 같다는 막연한 짐작만 가지고 있었을 뿐이었다.

 

또한 파이썬 프레임워크를 활용해 백엔드 웹 애플리케이션을 개발하다 보면, 어떤 아키텍처를 구성해야 하는지, 그리고 그 안에서 각 컴포넌트를 어떻게 분리하고 설계해야 하는지가 꽤 난해하게 느껴질 때가 많았다. 그래서인지 실제 프로젝트에서는 트랜잭션 스크립트 형태의 코드나, 급하게 구현된 함수들만 나열된 구조를 자주 보기도 했다.

 

반면 Java는 비교적 정형화된 아키텍처와 이를 뒷받침하는 이론서들이 풍부했다. 나 역시 그런 내용들을 학습하며 어떻게든 파이썬 코드에 녹여내려 노력했지만, 늘 어딘가 부족하다는 느낌이 남아 있었다. 이해한 개념을 코드로 표현하고, 기존 프로젝트들을 보며 어깨너머로 익히는 데에는 어느 정도 한계가 있었기 때문이다. 특히 복잡한 비즈니스 로직을 파이썬 코드로 어떻게 구현해야 하는지, 또 이를 주변 인프라와 어떻게 유연하게 엮고 추상화해야 하는지는 상당히 난이도가 높은 영역이었다. 게다가 이를 참고할 만한 자료 역시 많지 않았다.

 

결국 이러한 고민들은 “파이썬으로 아키텍처를 설계해 나가는 데에는 단순한 이론서만으로 한계가 있는 것이 아닐까?”라는 생각으로 이어졌다. 그리고 그렇게 시간이 흐르던 중, 이 책을 알게 되었고 직접 읽게 되었다.

 

 

책의 특징

지금까지 읽어본 책들 중에서 “클린 아키텍처”의 개념과 구현 방법을 함께 다룬 책으로는 이 책이 손에 꼽힐 정도라고 생각한다. 유독 파이썬 분야에서는 아키텍처에 대한 내용이 이론과 개념 중심으로만 나열되는 경우가 많았고, 제시되는 예시 또한 내가 학습하며 쌓아온 멘탈 모델과 잘 맞지 않는 경우가 많았다.

 

그 사례 중 하나가 파이썬으로 살펴보는 아키텍처 패턴 이다. 이 책은 Entity, Value Object, Repository, Service, UoW, Event Driven 같은 기본적인 개념들을 다루고 있지만, 아키텍처 이론 자체를 중심으로 설명하기보다는 저자만의 방식으로 구성된 구조 안에서 기술 개념들을 풀어내는 데 초점이 맞춰져 있었다. 그래서 개념 간의 연결 관계나 흐름을 이해하는 데 다소 어려움이 있었다.

 

반면 클린 아키텍처 with 파이썬 은 클린 아키텍처의 교과서적인 면모를 잘 보여준다. 또한 각 계층이 어떤 역할을 가지는지, 그리고 이를 실제 코드로 어떻게 단계적으로 구현해 나가는지를 예제와 함께 설명해준다는 점에서 이해하기 훨씬 수월했다.

 

교과서적인 면모라 함은 다음 이미지에 입각한 설명을 의미한다. (https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)

위의 동심원 구조를 하나씩 떼어놓고 바라봐도, 파이썬으로 클린 아키텍처를 구현하려고 하면 자연스럽게 수많은 질문이 떠오르게 된다. 실제로 클린 아키텍처와 관련된 코드 패턴을 잘 모르던 시절, 이 동심원 구조를 보며 가장 먼저 들었던 생각들은 다음과 같았다.

  • 파이썬에서는 Interface를 어떻게 정의해야 하는가? 그보다 애초에 Interface를 만드는 것이 정말 효과적인 방식인가? 오히려 작업 효율만 떨어지는 것은 아닐까?
  • 파이썬에서 Entities는 무엇으로 구현해야 하는가? object 상속을 사용해야 하는가, dataclass를 써야 하는가, 아니면 편의성을 위해 pydantic을 사용하는 게 맞는가? 혹은 그냥 ORM 모델 자체를 Entity로 사용해도 되는가? 그렇다면 Entities는 DB와 어떤 방식으로 연결되어야 하는가?
  • UseCase는 정확히 어떤 역할을 하는 계층인가? 결국 Entities의 동작을 조합해 사용하는 것이라면 Service 계층과는 무엇이 다른가?
  • Controllers는 프레임워크가 제공하는 View 계층으로 이해해도 되는가? 예를 들어 Django의 CBV나 FastAPI의 APIRouter 같은 구성 요소로 생각해도 되는 것인가?
  • 백엔드 관점에서 Presenter와 Controller는 본질적으로 어떤 차이가 있는가?
  • Controller 바깥 계층에 위치한 구성 요소들은 실제 프로젝트 코드에서 어떻게 연결되는가? 애초에 그것들을 프로젝트 내부 코드로 포함시키는 것이 맞는가?

이 외에도 수많은 질문과 고민들이 있었지만, 당시에는 이런 기본적인 의문들조차 명확하게 정리하기 어려웠다.

 

결론적으로 이 책의 가장 큰 특징은, 바로 이러한 질문들에 대한 방향성과 답을 얻어갈 수 있다는 점이었다. 클린 아키텍처 with 파이썬 은 클린 아키텍처의 개념과 구현 방법뿐만 아니라, DDD, Result Pattern, UseCase 조율 방식, 타입 힌트 활용 등 파이썬 환경에서 실제로 어떻게 구조를 설계하고 코드를 작성해야 하는지를 함께 보여준다. 만약 파이썬으로 구조적인 코드를 작성해보고 싶다면, 이 책을 하나의 출발점으로 삼아보는 것도 좋은 선택이 될 것 같다.

 

 

 

후문 : 클린 아키텍처.. 얼마나 중요한가 ?

코드를 작성하고 무언가를 개발하는 사람으로서 “클린 아키텍처”라는 워딩은 참 “마법의 단어” 같다는 생각이 든다. 마치 개발자에게 도덕성과 윤리의식만을 요구하는 엄격한 잣대처럼 느껴질 때도 있다. 그래서 요즘에는 클린 아키텍처를 조금은 반신반의한 시선으로 바라보게 된다. 또한 클린 아키텍처를 지키는 과정이 작업 효율성을 떨어뜨리거나, 알 수 없는 여러 문제를 야기한다면 과연 반드시 적용해야 하는가에 대한 의문도 남게 된다.

 

후문 : AI 시대의 클린 아키텍처 ?

AI의 발달로 인해 제품을 빨리 만들고, 빨리 부수는 것이 더 효율적이라는 이야기를 기사에서 본 적이 있다. 즉 유지보수가 잘 되는 코드를 작성하는 것보다, AI가 제품을 만들어내는 속도가 훨씬 빨라졌기 때문에 “무엇을 만들 것인가”를 명확하게 정의하는 일이 더 중요해지고 있다는 의미로 이해된다.

 

정말 그렇다면 클린 아키텍처는 고사하고, 코드에 아키텍처를 적용하려는 노력 자체가 필요할까 하는 의문도 들게 된다. 그러나 이에 대한 고민에 대해 책의 서두에서 베타리더분이 남긴 한 문장이 인상 깊게 다가왔다.

코드를 “작성”하는 비용은 극적으로 줄었지만, 그 코드를 “유지보수”하는 비용은 오히려 가파르게 늘어날 수 있는 역설적인 시대다.

 

이 문장을 읽고 나서 AI를 활용하는 사람들의 여러 의견이 떠올랐다. 대부분 “AI가 무언가를 꽤 잘 만들어내긴 하지만, 결국 한두 번은 사람이 직접 고쳐줘야 한다”는 결론으로 이어진다. 결국 아키텍처란 코드가 지켜야 할 가이드라인과 규범의 영역을 이해하고, 그것을 어떻게 잘 적용할지 고민하는 과정이 아닐까 싶다.

 

마치며

결국 이 책을 읽으며 가장 크게 느낀 점은, 클린 아키텍처가 단순히 “좋은 구조”를 이야기하는 개념이 아니라는 점이었다. 오히려 개발자가 코드를 어떤 기준과 사고방식으로 바라봐야 하는지에 대한 하나의 언어에 가깝다고 느껴졌다.

 

사실 AI의 발전으로 인해 코드를 작성하는 비용은 점점 낮아지고 있다. 이제는 단순한 기능 구현만 놓고 본다면, 이전보다 훨씬 빠르게 제품을 만들 수 있는 시대가 되었다. 하지만 아이러니하게도 그렇게 만들어진 코드를 이해하고, 수정하고, 유지보수하는 비용은 오히려 더 커지고 있다는 생각이 든다. 실제로 AI가 작성한 코드 역시 결국은 사람이 읽고, 고치고, 구조를 정리해야 하는 순간이 찾아오기 때문이다.

 

그런 관점에서 보면 아키텍처란 결국 “정답”을 강요하는 규칙이라기보다, 코드가 지켜야 할 가이드라인과 규범을 고민하는 과정에 더 가까운 것 같다. 그리고 클린 아키텍처 with 파이썬 은 그 과정 속에서 파이썬 개발자가 가질 수밖에 없는 수많은 질문들에 대해 방향성을 제시해주는 책이었다.

 

물론 책 한 권을 읽는다고 해서 클린 아키텍처를 완전히 이해하게 되는 것은 아닐 것이다. 오히려 읽고 나니 더 많은 고민과 질문들이 생겨났다. 하지만 적어도 “왜 이런 구조가 필요한가”, “파이썬에서는 이를 어떻게 현실적으로 구현할 수 있는가”에 대한 고민의 출발점을 만들어주었다는 점에서 의미 있는 경험이었다.

 

클린 아키텍처를 반드시 따라야 하는 절대적인 규칙으로 받아들이기보다는, 유지보수 가능한 코드를 만들기 위해 어떤 선택과 균형이 필요한지를 고민하게 만드는 하나의 사고 도구로 바라본다면, 이 책은 충분히 읽어볼 가치가 있는 책이라고 생각한다.

728x90
반응형