[리뷰] 효율적 개발로 이끄는 파이썬 실천 기술
in Review on Review, Book, Python, 실전, 프로젝트, 실무, 테스트, 동시처리, 제너레이터, 데커레이터, 콘텍스트관리자, 디스크립터, 특수메서드
제이펍
출판사의"효율적 개발로 이끄는 파이썬 실천 기술(스야마 레이 저/김연수 역)"
를 읽고 작성한 리뷰입니다.
Python 실전 돌입을 위해 한 권의 책을 추천하라면 본 도서를 추천하고 싶다. Python을 익히고 싶은 사람 누구에게나 도움이 되겠지만 특히 추천하고 싶은 독자 유형은 다음과 같다.
- C, Java 등
타 언어에 능숙
하나 Python은 다뤄본 적이 없는 분 - 객체지향이나 비동기 메커니즘 등 프로그래밍에 자주 활용하는 개념을 잘 알고 있지만 당장의
실전 프로젝트가 막막한
분
독자 유형만으로 책의 내용을 짐작할 수 있듯이 실전 중심으로 구성되어 있다. 즉, 구구절절한 설명보다는 소스코드로 설명하는 책
이다. 몇가지 주목할 만한 장점들을 아래와 같이 정리해본다.
실전
중심의 구성
개념을 정리해주는 책도 좋지만 사람의 기억 용량에는 한계가 있고 실전에서 기본 개념이 기억이 나지 않는다고 일일이 찾아볼 시간도 없다. 객체 지향이나 파이썬만의 독특한 제너레이터, 데커레이터, 콘텍스트 관리자, 디스크립터, 특수메서드 등의 개념들은 미리 익혀야 하는 개념이지 실전 단계에서 들여다 볼 지식들은 아니다.그런점에서 본 도서가 마음에 드는 점은 실전에 필요한
뼈대
만을 일목 요연하게 정리하였다는 점과메타지식
을 찾아보기 쉽게 구성되었다는 점을 들 수 있다. 10장 동시처리 챕터를 예로 들 수 있겠는데 책을 검증해보고 싶다면 오프라인 서점에서 본 챕터를 읽어보길 권장한다. 동시처리는 제법 어려운 개념인데 이렇게 깔끔하고 알기 쉽게 딱 실전에 필요한 만큼만 언급한 책은 드물거라 생각한다.실전에서 필요로만 하는 핵심 개념만 언급하고 바로 소스코드로 설명하는 구성으로 이루어져 있어 명확한 이해가 가능하다는 점이 가장 눈에 띄는 장점이다.
완성된 프로젝트를 향한
유기적
인 구성
각 장에서 익힌 소스 코드들을 하나의 실전 프로젝트로 연결해나가는 구성으로 되어 있어 전체 프로젝트를 유기적으로 이해하는데 도움이 된다. Python 프로그래밍을 잘 하는 것과는 별개로 프로젝트 실무 기술이 부족하면 보통 아래와 같은 문제에 봉착한다.- venv 가상환경의 개념이 없어 여러 프로젝트 간 라이브러리 충돌 발생
- setup.py를 몰라 github에서 타인의 소스코드를 실행하지 못함. 혹은 스스로 프로젝트를 구성하지 못해 github 공유에 어려움을 겪음
- 테스트 케이스를 구현할 줄 몰라 커뮤니케이션에 어려움을 겪거나, 테스트 없이 실전에 배포하여 다양한 문제에 직면
- Mock의 개념을 몰라 비효율적인 코드를 개발
- 예외, 임계값, 콘텍스트 관리자 등 테스트를 적용하기 어려우면 무조건 건너뛰어 향후 예기치 않은 오류 발생
- Git 혹은 CI 도구와 프로젝트를 연동하는 방법을 몰라 팀 단위 커뮤니케이션에 차질 발생
만약 이런 유형들의 어려움을 겪은 적이 있다면 그리고 아직 해결책을 모른다면 이 책은 훌륭한 솔루션이 될 것이다. 이런 문제들이 어려운 이유는 하나 하나 자체 개념이 어려워서는 아닐 것이다. 전반적으로 경험 부족 혹은 다양한 기술들을 하나로 연결하는 프로젝트 스킬이 부족하기에 어렵게 느껴지는 것이다.
이런 유형들에 대비할 수 있도록 본 도서에서는 맨 마지막 챕터인 13장에서
심플하면서도 유기적으로 완성도 높은 프로젝트
를 개발하며 실무 능력을 향상시키는데 도움을 준다.
Pythonic
, 유연성
다른 언어 대비 Python의 유일한 특징 하나를 꼽으라면 개인적으로유연성
을 꼽고 싶다. Python은 어떤 실전에서도 비단뱀처럼 능수능란하게 빠져나가는 특수한 능력이 있다.C나 Java 프로젝트를 수행하며,
“이게 왜 안돼?”
라며 머리를 쥐어 뜯는 반면 Python 프로젝트에 참여하면,
“이게 왜 가능해?”
라며 머리를 쥐어 뜯곤 한다. 아마도 나만의 경험은 아닐 것이다. 선무당이 사람 잡는 것 처럼 기존 다른 언어를 아는 것이 되려 Python 활용에 독이 되는 아이러니한 상황이 벌어진다. 이런 특성 때문에 Python이 능숙하지 않다면 데이터 분석에는 범용 언어가 아닌 R이 편해지거나, 프로젝트 개발 시 명확한 패턴이 존재하는 Java를 선호하게 될지도 모른다. 대신 Python에 능숙해지기만 한다면 상황에 따라 불가능을 가능으로 만들 수도 있다. Python을 처음 익히며 황당했던 몇가지 유형은 다음과 같다.
- None vs Null : print()하면 아예 안나오는 것 부터 독특하다. 이런 특성 덕분에 인스턴스 인자 초기화나 가변 객체의 동작을 처리하는데 전략적으로 유연하게 활용할 수 있다.
- 특수메서드 : 예를 들어 new() 특수메서드를 이용하면 원본 클래스의 인스턴스가 되지 않도록 인스턴스화 할 수 있다.
- 언더스코어 : __로 시작하는 속성은 외부 참조시 별도의 변환 규칙을 활용한다. 함수나 iter() 기능의 특정 값을 무시하는데 사용하기도 한다.
- 모듈, 패키지, init() 개념이 명확하지 않으면 import문도 쉽지 않게 느껴질 것이다. 대신 알면 그 어떤 언어보다 깔끔하고 편리한 연동이 가능하다.
- 함수 vs 객체메서드 : x.sort() vs sorted(x)
- 다중 상속이 가능하며, 다이아몬드 문제를 해결하는 패턴을 알고 있어야 한다.
- LBYL과 EAFP 사이의 유연성 줄타기나 가변 인자 ** 등등..
너무 유형이 많아 기억나는 몇가지만 열거했다. 이러한 Python의 황당함(?)을 책에서는 유형별로 거의 빠짐없이 정리하고 있다. 초보시절부터 개인적으로 정리해왔던 내용들이 거의 다 등장하고 있고 미처 몰랐던 것도 알려주고 있어 책을 얼마나 체계적으로 저술했는지 정성이 느껴졌다.
이에 그치지 않고 좀 더 주의 깊게 살펴볼 유형들은 관련 PEP 레퍼런스를 참고할 수 있도록 안내하며, 함정 코너로 주의할 점을 알려주고, 때로는 무리한(?) 실험 정신 코드를 작성하며 Python의 유연성을 살펴보는 등 다각도로
Pythonic
에 도움을 준다는 점이 또 다른 장점이라 할 수 있다.
그 외 장점으로 번역 수준이 훌륭하고 소스 코드의 가독성도 좋아 구성도 훌륭하다고 평하고 싶다. 더불어 딱히 단점은 찾기 어려웠다. 다만 유의할 점은 프로그래밍의 기초 개념이 약한 분들은 입문서를 먼저 익히고 읽을 것을 권유한다. 실전 위주의 구성이 최고 장점이기에 어려운 개념들의 핵심은 잘 알려주지만 상세하고 자세히 설명하진 않기 때문이다.
서두에서 언급한 바와 같이 다른 언어 하나 쯤은 깊이 파본 분들에게 매우 적합한 실전서이다. 그 중에서도 Python 실전 프로젝트를 처음으로 임하는 분들께 강력히 추천하고 싶다.