전문가를 위한 파이썬 프로그래밍
2022년 09월 27일 출간
국내도서 : 2022년 08월 12일 출간
- eBook 상품 정보
- 파일 정보 pdf (11.10MB)
- ISBN 9791192469355
- 지원기기 교보eBook App, PC e서재, 리더기, 웹뷰어
-
교보eBook App
듣기(TTS) 가능
TTS 란?텍스트를 음성으로 읽어주는 기술입니다.
- 전자책의 편집 상태에 따라 본문의 흐름과 다르게 텍스트를 읽을 수 있습니다.
- 이미지 형태로 제작된 전자책 (예 : ZIP 파일)은 TTS 기능을 지원하지 않습니다.
PDF 필기가능 (Android, iOS)
쿠폰적용가 23,940원
10% 할인 | 5%P 적립이 상품은 배송되지 않는 디지털 상품이며,
교보eBook앱이나 웹뷰어에서 바로 이용가능합니다.
카드&결제 혜택
- 5만원 이상 구매 시 추가 2,000P
- 3만원 이상 구매 시, 등급별 2~4% 추가 최대 416P
- 리뷰 작성 시, e교환권 추가 최대 200원
작품소개
이 상품이 속한 분야
기술 감수자 소개 xii
옮긴이 머리말 xiii
베타리더 후기 xv
감사의 글 xvii
이 책에 대하여 xviii
CHAPTER 1 파이썬의 현재 1
1.1 파이썬의 현재와 진행 상황 2
1.2 파이썬 2의 현재와 미래 3
1.3 최신 정보의 확인과 습득 5
__1.3.1 PEP 문서 6
__1.3.2 활성화된 커뮤니티 8
__1.3.3 기타 자료들 10
1.4 요약 12
CHAPTER 2 모던 파이썬 개발 환경 13
2.1 기술적 요구 사항 14
2.2 파이썬 패키징 생태계 15
__2.2.1 pip를 이용한 파이썬 패키지 설치하기 15
2.3 런타임 환경 격리 17
__2.3.1 애플리케이션 레벨 격리 vs. 시스템 레벨 격리 20
2.4 애플리케이션 레벨 환경 격리 22
__2.4.1 포어트리: 디펜던시 관리 시스템 24
2.5 시스템 레벨 환경 격리 29
__2.5.1 컨테이너화 vs. 가상화 31
__2.5.2 도커를 이용한 가상 환경 33
__2.5.3 베이그런트를 이용한 가상 개발 환경 52
2.6 유명한 생산성 도구들 54
__2.6.1 커스텀 파이썬 셸 55
__2.6.2 IPython 이용하기 56
__2.6.3 커스텀 스크립트 및 프로그램과 셸 연동하기 59
__2.6.4 인터랙티브 디버거 60
__2.6.5 기타 생산성 향상 도구 62
2.7 요약 64
CHAPTER 3 파이썬의 새로운 기능 65
3.1 기술 요구 사항 66
3.2 최근의 언어 추가 사항 66
__3.2.1 딕셔너리 병합 및 업데이트 연산자 67
__3.2.2 할당 표현식 72
__3.2.3 타입 힌팅 제네릭 76
__3.2.4 위치 전달만 가능한 매개변수 78
__3.2.5 zoneinfo 모듈 81
__3.2.6 graphlib 모듈 82
3.3 그다지 새롭지는 않지만 여전히 멋진 요소들 86
__3.3.1 breakpoint() 함수 86
__3.3.2 개발 모드 88
__3.3.3 모듈 레벨 __getattr__() 및 __dir__() 함수 90
__3.3.4 f-string을 이용한 문자열 서식 지정 91
__3.3.5 숫자 리터럴의 언더스코어 93
__3.3.6 secrets 모듈 93
3.4 미래에 관한 예상 95
__3.4.1 | 연산자를 이용한 유니언 타입 95
__3.4.2 구조적 패턴 매칭 96
3.5 요약 101
CHAPTER 4 파이썬과 다른 언어와의 비교 103
4.1 기술적 요구 사항 104
4.2 클래스 모델과 객체 지향 프로그래밍 104
__4.2.1 슈퍼클래스로의 접근 105
__4.2.2 다중 상속과 메서드 결정 순서 107
__4.2.3 클래스 인스턴스 초기화 113
__4.2.4 속성 접근 패턴 117
__4.2.5 디스크립터 118
__4.2.6 프로퍼티 125
4.3 동적 다형성 131
__4.3.1 연산자 오버로딩 132
__4.3.2 함수 및 메서드 오버로딩 139
4.4 데이터 클래스 143
4.5 함수형 프로그래밍 147
__4.5.1 람다 함수 149
__4.5.2 map(), filter(), reduce() 함수 151
__4.5.3 부분 객체와 부분 함수 154
__4.5.4 제너레이터 155
__4.5.5 제너레이터 표현식 156
__4.5.6 데커레이터 157
4.6 열거형 159
4.7 요약 162
CHAPTER 5 인터페이스, 패턴, 모듈성 163
5.1 기술적 요구 사항 164
5.2 인터페이스 165
__5.2.1 간단한 역사: zope.interface 167
__5.2.2 함수 애너테이션과 추상 베이스 클래스 이용하기 175
__5.2.3 타입 애너테이션을 통한 인터페이스 181
5.3 제어 반전과 디펜던시 주입 184
__5.3.1 애플리케이션의 통제 반전 186
__5.3.2 디펜던시 주입 프레임워크 사용하기 194
5.4 요약 200
CHAPTER 6 동시성 201
6.1 기술적 요구 사항 202
6.2 동시성이란 무엇인가? 202
6.3 멀티스레딩 204
__6.3.1 멀티스레딩이란? 205
__6.3.2 파이썬의 스레드 처리 방식 209
__6.3.3 언제 멀티스레딩을 사용해야 하는가? 210
__6.3.4 멀티스레드 애플리케이션 예시 213
6.4 멀티프로세싱 230
__6.4.1 내장 multiprocessing 모듈 233
__6.4.2 프로세스 풀 이용하기 237
__6.4.3 multiprocessing.dummy를 멀티스레딩 인터페이스로 이용하기 239
6.5 비동기 프로그래밍 240
__6.5.1 협력적 멀티태스킹과 비동기 I/O 241
__6.5.2 파이썬의 async/await 키워드 242
__6.5.3 비동기 프로그래밍의 실질적 예 247
__6.5.4 비동기가 아닌 코드와 async/future 통합하기 250
6.6 요약 254
CHAPTER 7 이벤트 주도 프로그래밍 255
7.1 기술적 요구 사항 256
7.2 이벤트 주도 프로그래밍이란 무엇인가? 256
__7.2.1 이벤트 주도 != 비동기 257
__7.2.2 GUI에서의 이벤트 주도 프로그래밍 258
__7.2.3 이벤트 주도 통신 261
7.3 이벤트 주도 프로그래밍의 다양한 스타일 263
__7.3.1 콜백 기반 스타일 263
__7.3.2 주체 기반 스타일 265
__7.3.3 토픽 기반 스타일 270
7.4 이벤트 주도 아키텍처 272
__7.4.1 이벤트와 메시지 큐 273
7.5 요약 276
CHAPTER 8 메타프로그래밍 요소들 277
8.1 기술적 요구 사항 278
8.2 메타프로그래밍이란 무엇인가? 278
8.3 데커레이터를 이용해 함수의 행동을 사용 전 수정하기 279
__8.3.1 한 단계 더: 클래스 데커레이터 281
8.4 클래스 인스턴스 생성 프로세스 가로채기 286
8.5 메타클래스 289
__8.5.1 일반적인 구문 290
__8.5.2 메타클래스 사용 예시 293
__8.5.3 메타클래스의 함정 297
__8.5.4 메타클래스의 대안으로 __init_subclass__() 메서드 이용하기 298
8.6 코드 생성 300
__8.6.1 exec, eval, compile 301
__8.6.2 추상 구문 트리 302
__8.6.3 임포트 훅 304
__8.6.4 파이썬에서의 유명한 코드 생성 사례 304
8.7 요약 307
CHAPTER 9 파이썬에 C와 C++ 연결하기 309
9.1 기술적 요구 사항 311
9.2 파이썬 확장 기능의 핵심인 C/C++ 311
9.3 파이썬 C 확장 기능 컴파일 및 로딩 312
9.4 확장 기능 이용의 필요성 314
__9.4.1 크리티컬 코드 섹션의 성능 개선 315
__9.4.2 다른 언어로 작성된 기존 코드 통합 316
__9.4.3 서드파티 다이내믹 라이브러리 통합 316
__9.4.4 효율적인 커스텀 데이터 타입 생성 317
9.5 확장 기능 작성 317
__9.5.1 순수한 C 확장 기능 319
__9.5.2 Cython을 이용한 확장 기능 작성 337
9.6 확장 기능 사용의 단점 343
__9.6.1 추가적인 복잡성 344
__9.6.2 보다 어려운 디버깅 345
9.7 확장 기능 없이 다이내믹 라이브러리와 인터페이싱하기 345
__9.7.1 ctypes 모듈 346
__9.7.2 CFFI 353
9.8 요약 355
CHAPTER 10 테스팅과 품질 자동화 357
10.1 기술적 요구 사항 358
10.2 테스트 주도 개발 원칙 359
10.3 pytest를 이용해 테스트 작성하기 362
__10.3.1 테스트 매개변수화 369
__10.3.2 pytest의 픽스처 372
__10.3.3 페이크 이용하기 381
__10.3.4 목과 unittest.mock 모듈 385
10.4 품질 자동화 389
__10.4.1 테스트 커버리지 390
__10.4.2 스타일 픽서와 코드 린터 394
__10.4.3 정적 타입 분석 397
10.5 돌연변이 테스팅 399
10.6 유용한 테스팅 유틸리티 406
__10.6.1 실제적인 데이터값 조작하기 406
__10.6.2 시간값 조작하기 407
10.7 요약 409
CHAPTER 11 파이썬 코드 패키징과 배포 411
11.1 기술적 요구 사항 412
11.2 라이브러리 패키징 및 배포 412
__11.2.1 파이썬 패키지 구조 413
__11.2.2 패키지 배포 유형 422
__11.2.3 패키지 등록 및 공개 427
__11.2.4 패키지 버저닝과 디펜던시 관리 429
__11.2.5 커스텀 패키지 설치 433
__11.2.6 네임스페이스 패키지 435
__11.2.7 패키지 스크립트와 엔트리 포인트 437
11.3 웹용 애플리케이션 및 서비스 패키징 441
__11.3.1 12요소 앱 방법론 442
__11.3.2 도커 활용하기 444
__11.3.3 환경 변수 다루기 446
__11.3.4 애플리케이션 프레임워크에서 환경 변수의 역할 450
11.4 스탠드얼론 실행 파일 생성 454
__11.4.1 스탠드얼론 실행 파일이 유용한 경우 455
__11.4.2 널리 알려진 도구들 456
__11.4.3 실행 파일 패키지에서 파이썬 코드의 보안 464
11.5 요약 465
CHAPTER 12 애플리케이션 동작과 성능 관측 467
12.1 기술적 요구 사항 468
12.2 에러와 로그 캡처 468
__12.2.1 파이썬 로깅 기초 469
__12.2.2 좋은 로깅 프랙티스 482
__12.2.3 분산 로깅 484
__12.2.4 사후 리뷰를 위한 에러 캡처 487
12.3 코드와 커스텀 지표 조사 490
__12.3.1 프로메테우스 이용 492
12.4 분산 애플리케이션 트레이싱 502
__12.4.1 Jaeger를 이용한 분산 트레이싱 505
12.5 요약 511
CHAPTER 13 코드 최적화 513
13.1 기술적 요구 사항 514
13.2 나쁜 성능을 발생시키는 일반적인 요소들 514
__13.2.1 코드 복잡도 515
__13.2.2 과도한 리소스 할당과 누수 519
__13.2.3 과도한 I/O와 블로킹 520
13.3 코드 프로파일링 521
__13.3.1 CPU 사용량 프로파일링 522
__13.3.2 메모리 사용량 프로파일링 530
13.4 적절한 데이터 구조를 선택하여 복잡도 줄이기 541
__13.4.1 리스트 검색하기 541
__13.4.2 집합 이용하기 542
__13.4.3 collections 모듈 이용하기 543
13.5 아키텍처 트레이드오프 활용하기 548
__13.5.1 휴리스틱과 근사 알고리즘 이용하기 548
__13.5.2 태스크 큐와 지연된 처리 이용하기 550
__13.5.3 확률적 데이터 구조 이용하기 553
__13.5.4 캐싱 555
13.6 요약 563
찾아보기 565
대규모 패키징 생태계는 하루 아침에 만들어지지 않는다. 모던 애플리케이션들은 PyPI의 여러 패키지를 활용해 만들어지며, 패키지들도 저마다 디펜던시를 가진다. 대규모 애플리케이션의 디펜던시는 꼬리에 꼬리를 문다. 어떤 패키지들은 다른 패키지의 특정 버전에 의존한다는 사실까지 더해지면 디펜던시 지옥dependency hell(버전 요구 사항의 충돌을 수작업으로 해결하기 거의 불가능한 상황)에 빠지기 십상이다. / 그래서 PyPI에서 제공하는 패키지들을 다루는 데 도움을 주는 도구들의 사용법을 반드시 숙지해야 한다. (15쪽)
도커와 도커 컴포즈는 재현 가능한 격리된 개발 환경을 만들 수 있는 훌륭한 기반을 제공하지만, 때로는 실제 가상 머신이 더 나은(혹은 유일한) 선택일 수도 있다. 이런 상황에서는 리눅스가 아닌 다른 운영체제를 위한 약간의 시스템 프로그래밍을 해야 한다. / 베이그런트는 로컬 개발을 목적으로 가상 환경을 관리하는 가장 유명한 수단으로 간주된다. 모든 시스템 디펜던시를 포함한 개발 환경을 기술하는 간단하고 편리한 방법을 제공하며 이를 프로젝트 코드와 직접적으로 연결해준다. 윈도우, macOS는 물론 몇 가지 유명한 리눅스 배포판에서도 사용할 수 있다. (52쪽)
타입 힌팅 애너테이션type-hinting annotation은 선택 사항이지만 파이썬에서 점점 유명해지고 있는 피처다. 타입 힌팅 제네릭을 이용하면 변수, 인수, 함수 반환 타입을 타입 정의와 함께 애너테이션할 수 있다. 이 타입 애너테이션은 문서화 측면에서의 목적을 지원하기 위한 것이지만, 외부 도구를 활용해 코드를 검증하는 목적으로도 사용할 수 있다. 많은 프로그래밍 IDE는 타입 힌팅 애너테이션을 인식하며 잠재적인 타입 관련 문제를 시각적으로 강조한다. mypy 또는 pyright와 같은 정적 타입 체커static type checker를 이용하면 코드 베이스 전체를 스캔하고 애너테이션을 사용한 코드 유닛의 모든 타이핑 에러를 보고한다. (76쪽)
다른 몇몇 언어들과 달리 파이썬은 다중 커널 레벨 스레드kernel-level thread를 사용해 모든 인터프리터 레벨 스레드interpreter-level thread를 실행한다. 커널 레벨 스레드는 OS 커널에 의해 운영 및 스케줄링된다. CPython은 OS별 시스템 콜을 이용해 스레드를 생성하고 조인하며, 스레드 실행 시점과 스레드를 실행할 CPU 코어에 대한 완전한 통제를 갖지 않는다. 이 책임은 온전히 시스템 커널에게 일임한다. 시스템 커널은 우선도가 더 높은 스레드를 실행하기 위해 실행 중인 스레드를 언제든 선점할 수 있다. (209쪽)
한 단계 더 진행해보자. 일반적인 C 예시에서 순수한 C 함수를 호출하는 동안 GIL을 해제하는 방법을 확인했다. 결과적으로 이 확장 기능은 멀티스레드 애플리케이션에 조금 더 적합하게 되었다. 이전 예시에서 Python/C API 헤더로부터 Py_BEGIN_ALLOW_THREADS와 Py_BEGIN_ALLOW_THREADS 전처리 매크로를 이용해서 특정 코드 영역을 파이썬 호출에서 자유롭도록 나타냈다. Cython 구문은 더욱 간결하고 기억하기 쉽다. 해당 코드 영역 주위에서 with nogil 문장을 사용하면 GIL을 해제할 수 있다. (342쪽)
베테랑에게 배우는 파이써닉한 애플리케이션 구축, 유지보수, 패키징 기법
파이썬 코드를 작성하기는 쉽지만, 유지보수하기 좋은 환경을 갖추고 가독성 높은 코드를 만들기는 쉽지 않다. 이 책은 수년간 다양한 파이썬 애플리케이션을 구현한 전문 경험을 담아, 프로덕션 레벨에서 파이썬을 파이썬답게 쓰기 위해 알아야 할 모든 것을 망라한 지침서다. 전문 파이썬 프로그래머라면 꼭 알아야 할 애플리케이션 구축, 유지보수, 패키징, 배포 방법을 자세히 살펴보고, 베스트 프랙티스, 유용한 도구, 표준을 배울 수 있다.
1~4장에서는 파이썬 프로그래머들이 이용하는 도구의 기본적인 요소들에 초점을 맞춘다. 생산성 도구, 현대적인 환경, 최신 파이썬 릴리스에서 도입된 새로운 구문 요소들을 살펴본다. 서로 다른 디펜던시들로 구성된 복잡한 환경을 세팅하는 우아한 방법부터 딕셔너리 병합, zoneinfo, 구조적 패턴 매칭 등 최신 파이썬 피처까지, 특히 다른 언어에서 파이썬으로 전향하는 개발자가 모던 파이썬 개발의 세계에 안착하는 데 도움을 준다.
5~9장에서는 디자인 패턴, 프로그래밍 패러다임, 메타프로그래밍 기법에 관해 살펴본다. 작은 규모의 예제 프로그램을 구현해보고 애플리케이션 아키텍처에 대해서도 깊이 다룬다. 인터페이스, 동시성, 이벤트 주도 프로그래밍/아키텍처 등 현대 애플리케이션 구축에서 반드시 고려해야 하는 요소를 파이써닉하게 구현하는 방법을 배운다. 파이썬의 태생적 성능 한계를 극복하기 위해 C/C++ 코드를 파이썬에 통합하는 방법도 살펴본다.
10~13장에서는 애플리케이션을 구축한 이후 쉽게 유지보수하는 데 도움이 되는 도구와 기법들을 살펴본다. 테스팅, 패키징 및 배포, 로깅 및 모니터링, 코드 최적화 등 개발 수명주기의 마지막 단계에 대해서도 다른 곳에서는 찾아보기 어려운 인사이트를 얻을 수 있다.
베테랑 개발자가 엄선한 베스트 프랙티스, 유용한 도구, 표준을 익힘으로써 파이썬 전문가에 한 걸음 더 가까워질 수 있다. 모던 파이썬 개발의 가장 깊은 곳으로 뛰어들자.
주요 내용
■ 반복 가능하고 일관된 파이썬 개발 환경을 세팅하는 최신 방법들
■ 커뮤니티 및 프로덕션 사용을 위해 파이썬 코드를 효과적으로 패키징하는 법
■ f-string, enum, lambda 함수 등 모던 파이썬 구문 학습
■ 메타클래스를 이용해 복잡한 파이썬 메타프로그래밍 쉽게 익히기
■ 파이썬 동시성 코드 작성
■ C/C++ 코드와 파이썬 코드의 통합
작가정보
대학 졸업 후 소프트웨어 엔지니어, 소프트웨어 품질 엔지니어, 애자일 코치 등 다양한 부문에서 소프트웨어 개발에 참여했다. 재미있는 일, 나와 조직이 성장하고 성과를 내도록 돕는 일에 보람을 느끼며 나 자신에게 도전하고 더 나은 사람이 되기 위해 항상 노력하고 있다. 저서로 《코드 품질 시각화의 정석》(지앤선, 2015)이 있고, 옮긴 책으로는 《제대로 배우는 수학적 최적화》(한빛미디어, 2021), 《그림으로 배우는 TCP/IP》, 《파이썬 머신러닝 실무 테크닉 100》, 《라라벨 실전 웹 애플리케이션 개발》(이상 제이펍, 2021) 등이 있다.
이 상품의 총서
Klover리뷰 (0)
- - e교환권은 적립일로부터 180일 동안 사용 가능합니다.
- - 리워드는 1,000원 이상 eBook, 오디오북, 동영상에 한해 다운로드 완료 후 리뷰 작성 시 익일 제공됩니다. (5,000원 이상 상품으로 변경 예정, 2024년 9월 30일부터 적용)
- - 리워드는 한 상품에 최초 1회만 제공됩니다.
- - sam 이용권 구매 상품 / 선물받은 eBook은 리워드 대상에서 제외됩니다.
- 도서나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 리뷰
- 도서와 무관한 내용의 리뷰
- 인신공격이나 욕설, 비속어, 혐오 발언이 개재된 리뷰
- 의성어나 의태어 등 내용의 의미가 없는 리뷰
구매 후 리뷰 작성 시, e교환권 100원 적립
문장수집
- 구매 후 90일 이내에 문장 수집 등록 시 e교환권 100원을 적립해 드립니다.
- e교환권은 적립일로부터 180일 동안 사용 가능합니다.
- 리워드는 1,000원 이상 eBook에 한해 다운로드 완료 후 문장수집 등록 시 제공됩니다. (5,000원 이상 eBook으로 변경 예정, 2024년 9월 30일부터 적용)
- 리워드는 한 상품에 최초 1회만 제공됩니다.
- sam 이용권 구매 상품 / 선물받은 eBook / 오디오북·동영상 상품/주문취소/환불 시 리워드 대상에서 제외됩니다.
구매 후 문장수집 작성 시, e교환권 100원 적립
신규가입 혜택 지급이 완료 되었습니다.
바로 사용 가능한 교보e캐시 1,000원 (유효기간 7일)
지금 바로 교보eBook의 다양한 콘텐츠를 이용해 보세요!
- 구매 후 90일 이내 작성 시, e교환권 100원 (최초1회)
- 리워드 제외 상품 : 마이 > 라이브러리 > Klover리뷰 > 리워드 안내 참고
- 콘텐츠 다운로드 또는 바로보기 완료 후 리뷰 작성 시 익일 제공
가장 와 닿는 하나의 키워드를 선택해주세요.
총 5MB 이하로 jpg,jpeg,png 파일만 업로드 가능합니다.
신고 사유를 선택해주세요.
신고 내용은 이용약관 및 정책에 의해 처리됩니다.
허위 신고일 경우, 신고자의 서비스 활동이 제한될 수
있으니 유의하시어 신중하게 신고해주세요.
이 글을 작성한 작성자의 모든 글은 블라인드 처리 됩니다.
구매 후 90일 이내 작성 시, e교환권 100원 적립
eBook 문장수집은 웹에서 직접 타이핑 가능하나, 모바일 앱에서 도서를 열람하여 문장을 드래그하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다.
차감하실 sam이용권을 선택하세요.
차감하실 sam이용권을 선택하세요.
선물하실 sam이용권을 선택하세요.
-
보유 권수 / 선물할 권수0권 / 1권
-
받는사람 이름받는사람 휴대전화
- 구매한 이용권의 대한 잔여권수를 선물할 수 있습니다.
- 열람권은 1인당 1권씩 선물 가능합니다.
- 선물한 열람권이 ‘미등록’ 상태일 경우에만 ‘열람권 선물내역’화면에서 선물취소 가능합니다.
- 선물한 열람권의 등록유효기간은 14일 입니다.
(상대방이 기한내에 등록하지 않을 경우 소멸됩니다.) - 무제한 이용권일 경우 열람권 선물이 불가합니다.
첫 구매 시 교보e캐시 지급해 드립니다.
- 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
- 한 ID당 최초 1회 지급 / sam 이용권 제외
- 구글바이액션을 통해 교보eBook 구매 이력이 없는 회원 대상
- 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)