tee***
2021-02-21

파이썬 고수가 되고 싶은 개발자를 위한 실전 프로그래밍 지침서. 파이썬의 기능과 능력을 제대로 활용해 프로그램을 체계적으로 구축하는 방법을 소개한다. 문서화, 버전 관리, 시간대 설정 방법, 패키징, 테스트, 배포 등 개발에 필요한 필수 지식뿐 아니라 유명 파이썬 개발자들의 경험담까지 담았다.
[들어가며]
파이썬을 개발하면서
실제로 부딪히는 문제들에 대해
훌륭한 해결책을 제시하는 책이다.
시간대, 문서화, DB, 성능, 아키텍처 등
다양한 주제에 대해
실제로 프로젝트를 진행하기 위해서
고려해야하는 사항과 해결책을 알려준다.
단순히 파이썬 내부 구조나
표준 Built-in 라이브러리에 대한 해설이 아니라,
각 상황별 문제를 해결할 수 있는
추가 패키지를 적절히 제시해주는데,
문제를 바로 해결할 수 있다는 측면에서
무척 편리하고 아름다운 해결책이 많다.
[저자]
저자인 쥘리앵 당주는
파이썬 쪽에서 가장 큰 프로젝트인
'오픈스택'의 프로젝트 팀 리더로
파이썬 계에서는 매우 잘 알려진 인물이다.
(오픈스택은 250만줄이 넘는 코드가
파이썬으로 작성된 대형 프로젝트로
파이썬의 모든 가능성과 기능을 점검하기
무리가 없는 프로젝트이다.)
[역자]
역자는 김영하 님으로,
이미 이분이 번역하신 도서를
다수 읽었었고, 큰 도움을 받았기 때문에
의심없이 공부할 수 있었다.
[결론]
훌륭한 저자, 역자, 내용의
삼박자가 갖추어진 책으로
파이썬 중급/고급을 꿈꾸는 개발자라면
큰 도움을 받을만한 책이다.
실제로 책 본문에는
어떤 내용이 등장하는지 소개하기 위해
개인적으로 공부하면서 정리했던 자료 중
일부를 첨부한다.
[CHAPTER 1 프로젝트 시작하기]
* 파이썬3를 사용
* 프로젝트 구조를 단순하게 설계
* README.rst/txt로 프로젝트 정보를 제공
* 패키지 문서를 reStructuredText 형식으로 작성해서 저장
* PEP 440 의 패키지 버전관리 구조를 준수
* pycodestyle 을 사용해서 PEP 8 의 코딩 스타일을 준수
* flake8 을 사용해서 코딩 오류를 검사
[CHAPTER 2 모듈, 라이브러리, 프레임워크]
* import 는 내부적으로 __import__ 를 호출
* sys.modules 는 OS의 변수/함수 액세스 제공
* sys.path 로 모듈 경로 위치 검색
* PEP 302 의 사용자 정의 지정 불러오기 사용
* sys.meta_path 또는 sys.path_hooks 를 통해 경로 항목 파인더 사용
* 메타 경로 파인더는 .py 외 .Hy 등 다른 사용자 지정 객체 로딩 가능
* 유용한 표준 라이브러리 목록
* 외부 라이브러리를 사용할 때 먼저 확인할 체크리스트
* pip 를 통한 패키지 설치와 관리
* 프레임워크 사용 및 선택 시 고려사항
- 프레임워크의 기능이 적을수록 문제가 덜 발생
- 프레임워크의 기능이 적을수록 기능이 부족해서 불편함
[CHAPTER 3 문서화와 모범 API 사례]
* 스핑크스를 사용해서 프로젝트를 문서화를 자동화
* API를 변경할 때 관리하고 문서화하는 방법
* 소스코드와 문서의 분리가 심할 수록 문서를 적절하게 유지 관리하기가 어려워짐
* 파이썬 문서의 일반 형식은 reStructuredText(reST, 마크다운과 비슷)
* sphinx.net.autodoc 을 통해 모듈에서 .rst 를 자동 생성
* sphinx.ext.autosummary 로 목차 제작 자동화
* 파이썬 doctext 모듈로 문서 생성 시 자동으로 문서명세 vs 소스구현 점검
* 공개 API 와 다르게 내부 API 는 언더바(_)로 시작
* API 버전 관리
- 메이저 버전 = 이전과 큰 변화로 호환 불가 = 1, 2, ...
- 마이너 버전 = 일부 기능 추가 = 1.1, 1.2, ...
- 메인터넌스 버전 = 버그 수정 = 1.1.1, 1.1.2, ...
* API 변경 사항에 대해 문서화
- 추가 요소
- 제거 요소
- 신규 API로 변경하는 절차
* warnings 모듈로 사용자가 권장하지 않는 함수를 호출할 때 경고를 출력
[CHAPTER 4 시간 정보와 시간대 다루기]
* 시간대는 UTC +- 12 가 전부가 아니라, 15분 단위도 존재
- 15분 단위의 시간대, 1년에 시간대 2번 변경, 서머타임등의 변수도 고려
- 시간대가 없는 timestamp 는 무쓸모
* 시간대는 항상 UTC로 변환해서 저장
* datetime.datetime.utcnow() 로 UTC 현재 일시 획득 가능
* dateutil로 시간대 정보가 있는 시간 정보 생성
- pip install python-dateutil
- from dateutil import tz
- tz.gettz("Asia/Seoul")
- tz.gettz("GMT+8")
* datetime.datetime.isoformat() 으로 시간대 정보가 있는 datetime 객체 직렬화
- pip install iso8601
- ISO 8601 방식으로 시간 정보 반환
* dateutil 의 is_ambiguous() 사용해서 애매한 시간 정보 확인 가능
- 예) 서머타임이 2시 -> 3시 해제될 때
- 2:30 데이터가 해제 전 2:30 인지 아니면 해제 후 2:30 인지 확인 가능
* datetime 객체의 fold 속성으로 소속 시간정보 확인 가능
- PEP 495 를 적용한 Python 3.6 부터 수행
[CHAPTER 5 개발한 소프트웨어 배포하기]
(생략)
[CHAPTER 6 단위 테스트]
(생략)
[CHAPTER 7 메서드와 데커레이터]
(생략)
[CHAPTER 8 함수형 프로그래밍]
(생략)
[CHAPTER 9 AST, Hy, 리스프 계열 속성]
(생략)
[CHAPTER 10 성능과 최적화]
(생략)
[CHAPTER 11 확장과 구조]
(생략)
[CHAPTER 12 관계형 데이터베이스 관리]
(생략)
[CHAPTER 13 효율적으로 코딩하기]
(생략)
출판사에서 책을 보내주셔서,
읽어본 느낌을 솔직하게 작성한 리뷰입니다.
도서 1부 외 다른 의뢰/대가/보상이
없었음을 명시합니다.