메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

고성능 파이썬(2판)

파이썬 성능 잠재력을 끌어내는 실용적인 개발 전략서

한빛미디어

번역서

판매중

  • 저자 : 미샤 고렐릭 , 이안 오스발트
  • 번역 : 오현석
  • 출간 : 2021-05-10
  • 페이지 : 528 쪽
  • ISBN : 9791162244210
  • 물류코드 :10421
  • 구판정보 :이 도서는 <고성능 파이썬>의 개정판입니다. 구판 정보 보기
  • 초급 초중급 중급 중고급 고급
4.9점 (27명)
좋아요 : 14

파이썬의 성능을 제대로 올려주는 코드 작성법

 

파이썬 코드가 제대로 동작하더라도 더 빠르게 실행되도록 해야 할 때가 있다. 이 책은 파이썬 3에 맞춰 내용을 보강한 개정판으로, 처리할 데이터 용량이 큰 프로그램의 병목현상을 찾고, 이를 해결해 성능을 향상하는 방법을 알려준다. 프로그램 설계 시 여러 선택 사항의 기반이 되는 자세한 설명 덕분에 파이썬 구현을 더 깊이 이해할 수 있다. 멀티 코어 아키텍처나 클러스터를 어떻게 활용할 수 있을까? 신뢰성을 잃지 않으면서 규모를 쉽게 확장하고 축소할 수 있는 시스템을 어떻게 구축할 수 있을까? 경험이 많은 파이썬 프로그래머라면 이 책을 통해 다양한 문제에 대한 구체적인 해결 방법을 배울 수 있고 소셜 미디어 분석, 프로덕션 수준의 머신러닝 분야에서 여러 기업이 겪은 무용담도 엿볼 수 있다.

 

 

대상 독자

파이썬을 충분히 사용해보았고 특정 부분이 왜 느린지 생각해본 적이 있으며, 이를 위한 해법으로 거론되는 사이썬, 넘파이, PyPy 같은 기술을 들어본 독자가 대상이다. 또한 다른 언어로 프로그래밍해본 경험이 있어서 성능을 개선하는 방법이 여러 가지임을 아는 독자를 대상으로 한다. 또한 데이터 이동 문제를 포함하여 손쉽게 성능을 높일 수 있는 JIT 컴파일러(예컨대 PyPy)와 비동기 I/O를 사용하는 방법 등 웹 개발자가 직면할 수 있는 문제도 다룬다.

이 책은 중고급 파이썬 프로그래머를 위한 책이다. 의욕이 넘치는 초보 파이썬 프로그래머도 잘 따라올 수 있겠지만, 이 책을 읽기 전에 파이썬 기초를 먼저 다지기를 추천한다.

 

 

주요 내용 

  • 넘파이, 사이썬, 프로파일러 더 잘 이해하기
  • 파이썬이 하부의 컴퓨터 아키텍처 추상화 방법 배우기
  • 프로파일링을 통해 CPU 소비 시간이나 메모리 사용량에서 병목 찾기
  • 적절한 데이터 구조를 선택해 효율적인 프로그램 작성하기
  • 행렬과 벡터 계산의 속도 높이기
  • 파이썬을 기계어로 번역하는 도구 사용하기
  • 다양한 입출력과 계산 연산을 동시 실행하고 관리하기
  • 다중 프로세싱 코드를 지역, 원격 클러스터에서 실행하도록 변환하기
  • 도커 등의 도구를 사용해 빠르게 프로그램 배치하기   

 

추천사

 

우리는 효율적이고, 이해하기 쉽고, 성능 좋은 시스템을 만들고 싶어 한다. 이 책은 세 가지 모두를 달성하려는 사람을 위한 안내서로, 여러분이 프로그래밍 실무를 대하는 방식을 바꿔줄 것이다.

미샤 고렐릭 저자

미샤 고렐릭

2033년 화성에 착륙한 최초의 인류이자 시간 여행에 기여한 공로로 2056년 노벨상을 수상했다. 그가 개발한 신기술이 악용되는 데 분노하여 2012년으로 돌아와서 시간 여행 연구를 그만두고 데이터와 사랑에 빠졌다. 그 후 머신러닝 응용 연구 실험실인 패스트 포워드 랩을 공동 창업하고, 도덕적 컴퓨팅에 관한 논문을 여러 편 저술하고, 윌킨스버그에 포괄적 공동체 공간인 커뮤니티 포지를 세우도록 도왔다. 2019년 도덕적 머신러닝 그룹인 프로버블 모델즈를 공동 설립하여 대화형 몰입형 연극인 프로젝트 아멜리아를 만들었다. 2020년 프랑스에서는 OCCRP의 기자들이 데이터에서 기삿거리를 찾도록 도왔다. 1857년 센트럴 파크에 그의 생을 기리는 기념비가 세워졌다.

 

이안 오스발트 저자

이안 오스발트

수석 데이터 과학자이자 코치이다. 700명 이상이 참석하는 연례 콘퍼런스인 PyData 런던과 회원이 1만 명 이상인 월례 미팅을 공동 설립했다. 런던의 모 컨설팅 데이터 과학을 운영하고, 국제 콘퍼런스에서 강사로 활동하며 종종 기조연설을 한다. 수석 데이터 과학자이자 트레이너, 팀 코치로 17년 이상 경력을 쌓았다. 취미로는 에너지 넘치는 스프링어 스파니엘과 함께 산책을 하고, 코니시 해변에서 서핑을 하며, 커피를 즐긴다. ianozsvald.com에서 그의 지난 강의와 글을 찾아볼 수 있다.

 

오현석 역자

오현석

모빌리티42 이사로 일하면서 매일 고객의 요청에 따라 코드를 만드는 현업 개발자다. 어릴 때 처음 접한 컴퓨터에 매료된 후 경기과학고등학교, KAIST 전산학 학사와 프로그래밍 언어 전공 석사를 취득하며 계속 컴퓨터를 사용했다. 직장에서는 주로 코틀린이나 자바를 사용한 서버 프로그래밍을 하고, 주말이나 빈 시간에는 번역을 하거나 공부하면서 즐거움을 찾는다. 『코어 파이썬 애플리케이션 프로그래밍』(에이콘, 2014)을 시작으로 『배워서 바로 쓰는 스프링 프레임워크』(2020), 『러닝 리액트(2판)』(2021), 『고성능 파이썬(2판)』(이상 한빛미디어, 2021) 등 30권 이상의 책을 번역했다.

 

 

CHAPTER 1 고성능 파이썬 이해하기

1.1 기본 컴퓨터 시스템

1.2 기본 요소 조합하기

1.3 파이썬을 쓰는 이유

1.4 뛰어난 성과를 거두는 파이썬 프로그래머가 되는 방법

 

CHAPTER 2 프로파일링으로 병목 지점 찾기

2.1 효과적으로 프로파일하기

2.2 줄리아 집합

2.3 전체 줄리아 집합 계산하기

2.4 시간을 측정하는 간단한 방법: print와 데커레이터

2.5 유닉스 time 명령어를 이용한 간단한 시간 측정

2.6 cProfile 모듈 사용하기

2.7 SnakeViz로 cProfile 결과 시각화하기

2.8 line_profiler로 한 줄씩 측정하기

2.9 memory_profiler로 메모리 사용량 진단하기

2.10 PySpy로 기존 프로세스 살펴보기

2.11 바이트코드: 내부 작동

2.12 최적화 중에 단위 테스트하기

2.13 성공적인 코드 프로파일링 전략

2.14 마치며

 

CHAPTER 3 리스트와 튜플

3.1 더 효율적인 탐색

3.2 리스트와 튜플

3.3 마치며

 

CHAPTER 4 사전과 셋

4.1 사전과 셋의 동작 원리

4.2 사전과 네임스페이스

4.3 마치며

 

CHAPTER 5 이터레이터와 제너레이터

5.1 이터레이터로 무한급수 표현하기

5.2 제너레이터의 지연 계산

5.3 마치며

 

CHAPTER 6 행렬과 벡터 계산

6.1 문제 소개

6.2 파이썬의 리스트만으로 충분할까?

6.3 메모리 단편화

6.4 넘파이를 이용한 확산 방정식 해법

6.5 numexpr: 제자리 연산을 더 빠르고 간편하게 쓰기

6.6 경고: ‘최적화’ 검증(사이파이)

6.7 행렬 최적화에서 얻은 교훈

6.8 팬더스

6.9 마치며

 

CHAPTER 7 C 언어로 컴파일하기

7.1 가능한 속도 개선의 종류

7.2 JIT 대 AOT 컴파일러

7.3 타입 정보가 실행 속도에 영향을 주는 이유

7.4 C 컴파일러 사용하기

7.5 줄리아 집합 예제 다시 보기

7.6 사이썬

7.7 pyximport

7.8 사이썬과 넘파이

7.9 Numba

7.10 PyPy

7.11 속도 향상 결과 정리

7.12 각 기술의 사용 시점

7.13 GPU

7.14 외부 함수 인터페이스

7.15 마치며

 

CHAPTER 8 비동기 I/O

8.1 비동기 프로그래밍 소개

8.2 async/await의 동작 방식

8.3 CPU 공유: I/O 부하

8.4 마치며

 

CHAPTER 9 multiprocessing 모듈

9.1 multiprocessing 모듈 소개

9.2 몬테 카를로 방식을 사용해 원주율 추정하기

9.3 프로세스와 스레드를 사용해 원주율 추정하기

9.4 소수 찾기

9.5 프로세스 간 통신을 사용해 소수 검증하기

9.6 multiprocessing과 넘파이 데이터 공유하기

9.7 파일과 변수 접근 동기화하기

9.8 마치며

 

CHAPTER 10 클러스터와 작업 큐

10.1 클러스터링의 이점

10.2 클러스터링의 단점

10.3 일반적인 클러스터 설계

10.4 클러스터화한 해법을 시작하는 방법

10.5 클러스터 사용 시 고통을 피하는 방법

10.6 두 가지 클러스터링 솔루션

10.7 강건한 프로덕션 클러스터링을 위한 NSQ

10.8 살펴볼 만한 다른 클러스터링 도구들

10.9 도커

10.10 마치며

 

CHAPTER 11 RAMM 덜 사용하기

11.1 값비싼 원시 타입 객체

11.2 컬렉션이 사용하는 RAM 이해하기

11.3 바이트와 유니코드

11.4 RAM에 많은 텍스트를 효율적으로 저장하기

11.5 사이킷런의 FeatureHasher를 사용해 더 많은 텍스트 모델링하기

11.6 DictVectorizer와 FeatureHasher

11.7 사이파이의 희소 행렬

11.8 RAM을 덜 사용하기 위한 팁

11.9 확률적 자료구조

 

CHAPTER 12 현장에서 얻은 교훈

12.1 특성 엔진으로 피처 엔지니어링 파이프라인 흐름 만들기

12.2 고성과 데이터 사이언스 팀

12.3 Numba

12.4 최적화 vs. 생각

12.5 어댑티브 랩의 소셜 미디어 분석, 소마(2014)

12.6 RadimRehurek.com의 딥러닝 플라이 만들기(2014)

12.7 Lyst.com의 대규모 머신러닝(2014)

12.8 스메시에서의 대규모 소셜 미디어 분석(2014)

12.9 성공적인 웹과 데이터 처리 시스템을 위한 PyPy(2014)

12.10 Lanyrd.com의 작업 큐(2014)

파이썬 성능을 시원하게 올리는 사이다 코드 공개

 

누군가는 순차 프로세스를 빠르게 실행해야 하고, 다른 누군가는 멀티 코어 아키텍처, 클러스터, GPU를 제대로 활용하지 못해 애를 먹는다. 또 다른 누군가는 신뢰성을 잃지 않으면서도 주어진 예산 안에서 필요한 만큼의 프로세스를 사용할 수 있는 확장 가능한 시스템을 원한다. 어떤 사람은 코딩 실력이 부족함을 느끼기도 한다. 종종 다른 언어에서 차용한 기법이 예제에서 본 것만큼 자연스럽지 않기도 하다.

이 책은 이러한 파이썬의 성능 향상에 필요한 기법과 해결책을 다룬다. 성능상의 병목을 인지하여 더 빠르고 확장성이 뛰어난 해법을 구하는 실용적인 지침을 제공한다. 독자보다 먼저 문제에 직면했던 사람들이 고군분투했던 이야기를 통해 같은 문제로 힘 빼지 않도록 도와준다.

 

▶ 파이썬 3 대응!

▶ 사전 지식

- 파이썬 중급

▶ 먼저 보면 좋은 책

- 『혼자 공부하는 파이썬』

- 『처음 시작하는 파이썬(2판)』

- 『나의 첫 파이썬(2판)』

- 『파이썬 정복』

Python 입문서나 Python 머신러닝/딥러닝(Tensorflow, PyTorch 등) 입문서를 떼고, 소소한 과제가 아닌 경진대회나 실제 업무를 접하면 필연코 한계를 절감합니다. 성능, 속도 같은 한계에 부딪히기도 하지만, 이 코드가 돌아가는데 왜 돌아가는지 이 방법과 저 방법의 차이가 무엇인지 모르는 답답함도 정말 사람 속을 뒤집어 놓습니다.

이런 때에 읽어 보길 권합니다. 이 책을 입문서를 떼기 전에 봤다면 그냥 미리 사 둬도 좋습니다. 어차피 겪을 문제라서 구글 검색부터 하느라 시간을 많이 보내기 보다는, 구글 검색을 하더라도 이 책으로 시작하면 필요한 결과를 더욱 빨리 찾을 겁니다.

우리나라는 특히 많은 Java 개발자가 파이썬을 익힐 때에도 이 책은 쓸 만합니다. 파이썬이 어떤 특장점으로 인기가 있는지 설명하며 목차를 훑어 봐도 Java에서 했던 개발작업에 상응하는 부분이나 파이썬스럽게 할 수 있는 방법을 알려 줍니다. 저도 Python은 나중에 배웠는데 기본 함수보다 Numpy를 많이 쓰는 이유를 몰랐던 기간이 길었습니다. 물론 이 책을 보고 안 것은 아니지만(검색을 했죠.) 더 빨리 알았다면 쓸 데 없는 고집을 부리지 않고 더 효과적으로 개발할 수 있었겠다는 생각은 듭니다. Cython이나 다른 성능향상 방안도 소개가 잘 되어 있습니다. 용기내어 해볼 만하겠습니다.

더불어 비동기 I/O나 multiprocessing을 다룬 장도 고개가 끄덕여졌습니다. 팀원들이 실제로 개발할 때에 꼭 신경쓰거나 적용해야 했던 모듈입니다. 알고 입사했던 팀원도 있지만, 들어와서 열심히 익힌 팀원도 있었습니다. GPU와 docker를 다룬 장도 흥미로웠습니다. 분량이 많지는 않은데, 이 책을 통해 존재를 알았다면 필요한 주제를 검색해내기가 더 쉬워질 거라 봅니다. 이런 식으로 파이썬 요소 요소에서 성능을 높힐 팁이 빼곡합니다. 1판부터 더 일찍 만났으면 좋았겠습니다.

[대상 독자]

파이썬을 충분히 사용해보았고 특정 부분이 왜 느린지 생각해본 적이 있으며, 이를 위한 해법으로 거론되는 사이썬, 넘파이, PyPy 같은 기술을 들어본 독자가 대상이다. 또한 다른 언어로 프로그래밍해본 경험이 있어서 성능을 개선하는 방법이 여러 가지임을 아는 독자를 대상으로 한다. 또한 데이터 이동 문제를 포함하여 손쉽게 성능을 높일 수 있는 JIT 컴파일러(예컨대 PyPy)와 비동기 I/O를 사용하는 방법 등 웹 개발자가 직면할 수 있는 문제도 다룬다. 이 책은 중고급 파이썬 프로그래머를 위한 책이다. 의욕이 넘치는 초보 파이썬 프로그래머도 잘 따라올 수 있겠지만, 이 책을 읽기 전에 파이썬 기초를 먼저 다지기를 추천한다.


[주요 내용]

-넘파이, 사이썬, 프로파일러 더 잘 이해하기

-파이썬이 하부의 컴퓨터 아키텍처 추상화 방법 배우기

-프로파일링을 통해 CPU 소비 시간이나 메모리 사용량에서 병목 찾기

-적절한 데이터 구조를 선택해 효율적인 프로그램 작성하기

-행렬과 벡터 계산의 속도 높이기

-파이썬을 기계어로 번역하는 도구 사용하기

-다양한 입출력과 계산 연산을 동시 실행하고 관리하기

-다중 프로세싱 코드를 지역, 원격 클러스터에서 실행하도록 변환하기

-도커 등의 도구를 사용해 빠르게 프로그램 배치하기



[서평]

이책은 성능이라는 주제를 가지고 세가지 측면에서 다루고 있다.

첫째, 이 책은 프로그래머를 대상으로 쓰였다. 성능 개선을 기대하며 어떤 선택을 할 때 이해해야 하는 모든 맥락이 있다.

둘째, 고렐릭과 오스발트는 이 맥락을 뒷받침하는 데 필요한 이론을 잘 설명 한다.

마지막으로 성능을 높이는 접근 방법에 대해서 구현하는데 필요한 라이브러리들을 구체적으로 설명한다.

이책으로 현업에서 코딩을 하는 방식을 바꿜수 있을 것입니다.

꼭 파이썬이 아니더라도 이책에서 학습한 지식으로 더나는 프로그래머가 될것이라 생각합니다.

 

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


고성능 파이썬 리뷰

이번에 리뷰해 볼 책은 High Performance Python 2판의 번역서인 고성능 파이썬: 파이썬 성능 잠재력을 끌어내는 실용적인 개발 전략서이다. 파이썬은 최근에 엄청나게 많이 쓰이고 있는 언어이다. 프로그래밍 언어 커뮤니티 인덱스인 TIOBE [1] 에 따르면, 이 리뷰를 작성하는 시점 (2021. 05) 기준, C언어에 이어 가장 많이 사용되는 언어 2위를 차지하고 있다. 많은 사람들이 파이썬을 만능 언어처럼 생각하는 경우가 많지만, 실제로 한계점 또한 명확한 언어이다. 실제로 리뷰를 쓰는 본인도 무분별하게 파이썬을 남용하여 프로젝트를 진행하다가 다시 처음부터 뒤집어 엎은 경우도 꽤 있었다. 그렇기 때문에, 이번 리뷰에 앞서서 파이썬의 인기 요인, 태생적 한계점을 배경지식으로 이야기 해보고자 한다. 그런 이후에, 이 책이 제시하는 방법들이 어떠한 파이썬의 한계점들을 완화하는지 보면서 이 책이 독자들에게 줄 수 있는 가치에 대해 이야기 하면 좋을 것 같다.

우선, 파이썬의 인기의 요인은 인터프리터 언어로써 초기 셋업과 학습이 매우 쉽고, 인터페이스 언어로써 다양한 DSL (Domain Specific Language) 들을 파이썬의 오픈소스 에코시스템에서 종합적으로 사용할 수 있게 하기 때문이라 생각한다. 그리고 파이썬이라는 호스트 언어를 통해 다양한 기술 스택들을 통합하여 결과물을 만들 수 있는 것이 가장 큰 장점이다. 예를 들어 머신러닝에 매우 널리 쓰이는 텐서플로우나 토치 등도 파이썬 API를 통해 쉽게 이용할 수 있으며, 웹 서비스를 위한 프레임워크 및 라이브러리들 역시 파이썬을 통하여 사용 가능하기 때문에, 매우 범용적으로 사용될 수 있다. 그렇기 때문에 일반적인 상황에서만 파이썬을 활용한다면, 파이썬이 거의 만능의 언어처럼 보일 것이다. 하지만, 항상 언급되는 파이썬의 한계점은 성능에 관련된 것이다. 단순히, 파이썬이 C보다 느려요 같은 1차원 적인 시각이 아닌, 파이썬의 언어적 특성으로 생기는 한계점들이 명확하게 존재한다. 대표적으로 예를 들면, 병렬 처리에서 병렬 처리에 의한 성능 향상이 아닌, 단순히 연산들의 동시성만 제공하며 실제 순차 처리와 성능이 같다거나, 실제 연산들에서 파이썬 오브젝트 관리를 위한 오버헤드로 인한 성능 저하등이 있다.

이 책에서는, 파이썬의 언어적 한계점을 어느정도 감추기 위한 방안으로, Chapter 3~5 에서 알고리즘/자료구조의 특성을 이용한 최적화, Chapter 7 에서 C 언어 바이너리를 파이썬에서 사용하여 성능 향상, Chapter 8 에서 비동기 I/O 통한 파이썬 런타임 성능 향상, Chapter 9 에서 Multiprocessing 을 통한 파이썬의 병렬 처리 한계점 완화, Chapter 10~11 에서 클러스터링과 메모리 사용에서 최적화 등을 소개하고 있다. 물론, 이책을 읽는 독자들이 성능향상을 하려는 환경에 따라, 챕터마다 중요성이 다르게 다가오겠지만, 개인적으로 Chapter 7~11 까지의 내용이 핵심적으로 느껴졌다. 컴파일된 C 언어 바이너리를 Python 인터페이스를 통해 이용할 수 있는 방법으로 CFFI, Cython, Ctypes 등이 존재하지만, 이 책에서는 Cython 을 소개하고 있다. 이 장을 통해 파이썬이 변수, 클래스 객체등을 어떻게 취급하는지, 그리고 파이썬의 편의성을 위해 희생하는 성능에 대해 독자들은 알게 될 것이다. 또한, Chapter 8 은 파이썬이 프로그램 런타임에서 작동을 해야할 부분과, 컴퓨터 시스템 I/O 에서 작업들을 위임하여 비동기 런타임으로 성능향상을 얻을 수 있는 부분에 대해 설명한다. Chapter 9 에서는 파이썬이 가지는 병렬 처리에서의 한계점을 극복하기 위한 Multiprocessing 을 소개하며, Chapter 10 으로 파이썬 클러스터의 구성, Chapter 11 에서 memory intensive 프로그램에서의 파이썬 최적화 방법을 소개한다.

각각의 챕터 내용들이 파이썬 언어의 디자인 철학/특성과 밀접하게 관련이 있어서, 단순히 이 책을 읽는 것 만으로 파이썬 내부에 대한 이해도를 많이 올릴 수 있다. 하지만, 일반적인 유저들은 실제로 이러한 한계점을 경험할 일이 많이 없기 때문에, 이 책의 대상 독자층은 파이썬으로 어느정도 성숙도 있는 프로젝트를 진행하는 개발자들이 될거라 생각한다. 또한, 이 책에서 소개하는 방법들은 파이썬의 한계점들을 '완화'하는 것이지 완전히 극복하는 것이 아니라는 점을 잊지 않았으면 좋겠다. 세상에는 다양한 프로그래밍 언어들이 존재하고, 이 언어들은 각자의 디자인 장/단점을 가진다. 그렇기 때문에 각각의 프로젝트 환경마다 적합한 언어들이 다르다. 많은 개발자들이 익숙한 언어를 기반으로 프로젝트를 진행하는 것을 선호한다. 또한, 언어의 익숙함때문에 프로젝트의 방향을 그에 맞게 바꾸기도 한다. 이 책을 통해 얻을 수 있는 또다른 교훈은, 단순히 파이썬의 성능 개선 방법의 학습뿐만 아니라 프로젝트의 기획 단계에서, 프로젝트를 성공적으로 이끌기 위한 다양한 고려 대상에 언어의 특성 역시 포함된다는 것을 알게되는 것이다. 단순히 쉽고 익숙한 언어를 좇는 것이 아닌, 자신이 사용하는 언어가 어떤 특성을 지니고 어떠한 프로젝트들에 적절한지 보다 더 성숙한 안목을 가지는데에 도움이 되는 책이라고 생각한다.

[1] TIOBE Index, https://www.tiobe.com/tiobe-index/

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

이 책은 파이썬의 성능 향상에 필요한 기법과 해결책을 다루고, 파이썬을 충분히 사용해보았고 특정 부분이 왜 느린지 생각해본 적이 있는 독자를 대상으로 한 책이다. CPU 성능 관련 문제를 겪는 독자가 이 책의 주요 대상이지만, 데이터 전송과 메모리 관련 해법도 제시한다.

 

이 책은 총 12장으로 구성되어 있다.

1장은 고성능 파이썬 이해하기,

2장은 프로파일링으로 병목 지점 찾기

3장은 리스트와 튜플

4장은 사전과 셋

5장은 이터레이터와 제너레이터

6장은 행렬과 벡터 계산

7장은 C언어로 컴파일하기

8장은 비동기 I/O

9장은 multiprocessing 모듈

10장은 클러스터와 작업 큐

11장은 RAM 덜 사용하기

12장은 현장에서 얻은 교훈에 대하여 소개하고 있다.

 

파이썬이 코드를 작성하기가 정말 간단하고, 수월한데, 그 만큼 성능은 좋지가 못하다. 하지만 이 책에서 그러한 부분들을 말끔히 해결해준다. 자기가 평소에 잘 못 코딩한 부분도 짚어준다.

 

 

 

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

 

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

 

 

표지.jpg

 

 

 

이 책은 중고급 파이썬 프로그래머를 위한 책이라고 안내가 되어있습니다. 챕터만 봐도 중급 이상 파이썬 레벨이 되지 않으면 읽을 엄두가 안나는 구성입니다.  이터레이터와 제너레이터 C언어 컴파일, 비동기 I/O, 멀티프로세싱 모듈, 클러스터와 작업 큐, RAM 사용 등 컴퓨터 과학 이론 수업에서 한 번쯤 들어봤을 내용들이 이 내용의 여러 챕터에서 소개되어 있습니다. 책의 제목처럼 성능을 올리기 위해선 내부적으로 깊게 알아야 합니다. 그래서 이 책은 상당량의 지식과 경험을 전제로 한 파이썬 개발자에게 '이해'를 하게끔 설명이 잘 나와있습니다. 개발 경력이 2년 이상은 되어야 전반적으로 모든 챕터가 조금씩 와닿지 않을까 싶습니다. 

 

 

 

내용1.jpg

 

 

 

 

 

4장의 사전과 셋에서 해시 테이블의 동작에 대한 한 케이스의 설명입니다. 

사전과 셋의 동작 원리를 설명하면서 사전 탐색 과정을 설명해주는대 쉽지 않습니다. 

기본적으로 알고리즘에 대한 어느정도 지식이 받쳐주지 않으면 많은 고민을 필요로 하는 부분입니다.

 

 

내용2.jpg

 

 

파이썬의 리스트와 튜플에서 시스템 메모리 블록에 어떻게 할당되는지 예시를 통해 설명하고 있습니다.

조금은 궁금했던 내용들인데 확실히 고성능을 위해 내용에 '깊이'를 느끼게 합니다.

 

 

 

파이썬의 입문서와 기본서들은 계속 나오지만 상대적으로 중고급서적은 수요가 많지 않다보니 많이 나오지 않는 것 같습니다. 그러던 중, 이러한 책의 등장은 굉장히 반갑습니다.  파이썬을 계속 사용하는 개발자 또는 데이터 분석가라면 이 책을 두고 보면서 필요한 챕터 등을 그때그때마다 열람해서 본다면 본인의 파이썬 실력을 더 업그레이드 할 수 있을 것 같습니다.

 

 

 

 

 

모두들 파이썬은 익히기 쉬운 언어라고 하지만 이 말이 잘 쓰기 쉽다는 것은 아니다.

파이썬은 여러 곳에 다양하게 활용되지만, 그 중에서도 pandas, numpy 와 같은 좋은 라이브러리들과 함께 데이터를 다루는 데 많이 쓰인다. 이는 메모리를 최적화 해야 할 일이 빈번하고 또한 실행 속도를 개선할 일이 많다는 것을 암시한다. 그리고 이 책은 정확히 이 부분을 다루고 있다. 

제일 처음 소개하는 컴퓨터 아키텍처는 많은 개발자들이 잘 모르는 내용일 것이다. 프로그램이 어떤 컴퓨터 부품을 통해 어떻게 실행되고, 어떻게 데이터를 저장하는지를 설명한 후 바로 이어서 프로파일링 방법에 대해 다룬다. 이 두 파트만 봐도 이 책의 주제에 대해 너무나 잘 알 수 있다.

이 책의 내용은 분명 중급 이상임이 분명하지만 파이썬을 조금 쓴다고 얘기하려면 이 정도는 잘 활용할 수 있어야 할 것이다.

 

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

파이썬 성능, 잠재력을 끌어내는 실용적인 개발 전략서

고성능 파이썬 2판 High Performance Python

(미샤 고렐릭, 이안 오스발트 지음, 오현석 옮김, 한빛미디어)

 

 

고성능파이썬1.jpg

 

파이썬을 비롯하여 프로그래밍 언어를 배운다는 건 컴퓨터를 이용해 무엇인가를 만들어보고 싶기 때문일 것입니다. 많은 언어들 중에서도 사람들이 파이썬을 선택하는 이유는 무엇일까요?

 

 

 

일단 저 같은 경우는 문법이 배우기 쉽다는 것이 가장 큰 매력이었고 또 다른 이유는 다양한 영역과 관련된 코딩을 직접 해볼 수 있는 것이 큰 장점이었지요. 이를테면 평소에 관심이 많았던 데이터 분석, 인공지능 같은 부분까지도 직접 경험해 볼 수 있다는 것이 큰 매력으로 다가왔습니다.

 

 

 

파이썬은 쉽게 배울 수 있는 언어인 반면에, 다시말해 고수준의 언어이기 때문에 이를 실행해주는 운영체제나 컴퓨터 시스템 전반을 이해할 필요가 거의 없습니다. 이것은 큰 장점이지만 또 어떻게 보면 시스템의 성능을 최대한 활용하지 못한다는 단점일 수도 있지요.

 

 

 

물론 저 같은 초보자의 경우는 시스템의 성능까지 걱정해가며 코딩을 할 필요는 없을 지도 모릅니다. 요즘 컴퓨터 성능이 워낙 좋으니까요. 그러나 데이터 분석이나 인공지능으르 공부하다보니 생각보다 훨씬 큰 사이즈의 데이터를 다루면서 컴퓨터가 생고생을 하는 것을 많이 봅니다. (기다리는 제가 더 고생을...) 

 

 

 

파이썬의 기초 문법을 공부하고 간단한 프로그램을 만드는 것을 넘어 성능까지 고려하는 멋진 프로그램을 만들어보고 싶다면 이 책을 읽어보면 어떨까요?

 

고성능파이썬2.jpg

 

 

일단 솔직하게 말하면 제 수준에 이 책은 매우 어려웠습니다. 제가 그동안 읽어보았던 파이썬 책들 중에 가장 어렵지 않았나 싶습니다. (제 수준을 탓해야지요!!)

 

 

 

저자가 밝히고 있듯이 이 책은 중고급 파이썬 프로그래머를 위한 책입니다. 내가 만든 프로그램이 잘 돌아가는 것을 넘어서서 더 빠르고 효율적으로 돌아갈 수 있는 방법에 대한 고민이 있는 분들이라면 충분히 읽어보실만 합니다. 진짜 찐 고수가 되는 것이지요!

 

 

 

예를 들면 저 같은 경우는 파이썬의 리스트나 튜플 중에 무엇을 쓸 것인가에 대해서는 그리 큰 고민을 하지 않습니다. 그냥 떠오르는 대로, 아니면 습관대로 선택해서 사용하는 경우가 많습니다. 제가 만드는 수준의 프로그램에서는 리스트냐 튜플이냐는 대세에 큰 지장을 주지 않기 때문입니다. 

 

 

 

 

고성능파이썬3.jpg

 

 

 

이 책에서는 리스트와 튜플(3장)을 비교하면서 자료구조, 용도, 복잡도, 차이점 들을 자세하게 설명하며 성능의 차이를 알려줍니다. 리스트는 동적배열이고 튜플은 정적 배열이라 어떤 차이가 발생하는 지를 저수준의 자료구조 단계에서 부터 설명합니다.

 

 

 

이 외에도 이터레이터와 제너레이터 C언어 컴파일, 비동기 I/O, 멀티프로세싱 모듈, 클러스터와 작업 큐, RAM 사용 등 성능개선을 위한 다양한 주제를 상세히 다루고 있습니다.

 

 

 

고성능파이썬4.jpg

 

 

솔직히 지금 저의 수준에서는 이해하기 어려운 부분이 더 많습니다. 파이썬에 대한 기초적인 수준의 코딩으로도 충분하다면 굳이 필요없는 책일 수는 있지만 보다 전문적인 코딩, 성능 개선까지도 중요한 기준으로 가지고 계신 분이라면 충분히 도움이 되는 책인 것 같습니다.

 

 

 

저도 지금 당장은 다 이해하지 못하였지만 파이썬을 계속 공부해가면서 틈틈히 이 책을 정독하며 성능 개선에 까지 관심을 갖는 코더가 되어야겠습니다!!

 

 

고성능파이썬5.jpg

 

 

 

어린 시절 C언어를 공부하며 포인터와 배열에서 좌절하던 때가 생각나네요. 그 당시에는 메모리를 아끼기 위해 변수형이 1바이트이냐, 2바이트이냐, 4바이트이냐까지 고려하며 코딩을 했었는데 말이지요.

 

 

 

https://blog.naver.com/vccsmath/222151169129

 

 

몇 달 전에 읽었던 이 책 기억도 떠오르네요. 컴퓨터 성능을 극대화하며 그 당시로서는 전혀 다른 수준의 게임을 만들었던 과정을 보여줍니다.(제가 쓴 글인데.. 다른 블로그에 올렸었네요..ㅋ)

 

 

 

https://it4edu.tistory.com/163 

 

그리고 이 책도! 이 책은 정말 강추합니다!! 오늘 서평을 작성한 책이 시스템적이니 성능 향상을 위한 책이었다면 이 책은 코드 작성의 최적화를 위한 책으로써 지금도 종종 꺼내서 보고 있는 책입니다. ^^

 

 

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

 

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

장점

1.     파이썬의 경우 고수준의 언어로 많은 추상화가 되어 있기 때문에 하드웨어 적인 관점에서 잘생각 하지 않아 생산성 높게 할 수 있다는 장점이 있으나 반대로 대부분 자동적으로 처리를 하도록 만들었기 때문에 속도가 느리다는 단점이 있다. 이 책에서는 대용량 데이터를 분석하고 이용을 하면서 이러한 속도 문제를 해결하기 위해 프로파일링으로 병목 지점을찾는 방법 및 문법의 동작 방법, 비동기, 병렬 처리, 클러스터링 방법을 이용하여 해결하는 방법을 제시해 준다.

2.     대용량 데이터를 이용하면 RAM의 용량을 많이차지하기 마련인데 이러한 데이터를 옮기거나 이용을 할수록 큰 비용이 발생하여 결국 속도에도 문제가 발생을 하게 된다. 이 책의 경우 데이터를 압축하는 방법과 효율적으로 계산하는 방법을 통해 보다 빨리 수행하는 방법, 클러스터링하는 방법 알려 주어 처리하는데 효율적인 방법을 알려준다.

후기

1.     ML/DL을 공부하다 보면 대용량 데이터를 분석하고학습을 하게 되는데 이를 진행하다 보면 RAM이 가득차서 메모리 부족으로 계산 결과를 얻지 못하는 경우가발생할 때도 있고 일단 처리하는데 너무 느리다는 생각이 종종 든다. 책을 보면서 효율적으로 데이터를처리하는 방법과 병렬화 처리하는 방법을 알게 되었으며 현장에서의 경험을 지필하여 파이썬을 전문적으로 할 의향이 있는 사람이 이 책을 보면 좋겠다고느꼈다.

 

20210523_235807.jpg

 

 

이 책은 파이썬의 성능 향상에 필요한 기법과 해결책을 다룬다. 성능상의 병목을 인지하여 더 빠르고 확장성이 뛰어난 해법을 구하는 실용적인 지침을 제공한다.

파이썬은 빠른 개발과 배포, 그리고 확장성 있는 시스템을 만드는 최적의 언어이다.

이 책의 대상독자는 파이썬을 충분히 사용해보았고, 특정 부분이 왜 느린지 생각해 본 적이 있으며, 이를 위한 해법으로 사이썬, 넘파이, PyPy 같은 기술들을 들어본 독자들이다 라고 한다. 그만큼 책의 내용이 상당히 어렵다.

 

이 책에서 다루는 내용은 다음과 같다.

 

· 컴퓨터의 저수준 동작 방식 : 내부적으로 어떤 일이 일어나는지 이해하기

· 리스트와 튜플 : 기본 자료구조인 리스트와 튜플의 미묘한 의미 차이와 속도 차이

· 사전과 셋 : 중요한 자료구조인 사전과 셋의 메모리 할당 전략과 접근 알고리즘

· 이터레이터 : 이터레이터를 통해 데이터를 스트리밍 하는 방법과 더 파이썬다운 코드를 작성하는 방법

· 순수 파이썬 방식의 접근 : 파이썬과 모듈을 효율적으로 사용하는 방법

· 행렬과 넘파이 : numpy 라이브러리를 고수처럼 사용하는 방법

· 컴파일과 JIT 컴퓨팅 : 기계어로 컴파일해 더 빠르게 처리하기, 프로파일링 결과에 따라 성능 개선 방향 정하기

· 동시성 : 데이터를 효과적으로 옮기는 방법

· 다중처리 : 병렬 컴퓨팅과 numpy 행렬을 효율적으로 공유하기 위해 기본 라이브러리인 mutiprocessing 모듈을 이용하는 다양한 방법, 프로세스 간 통신(IPC)의 비용과 장점

· 클러스터 컴퓨팅 : 연구나 프로덕션 시스템에서 다중 처리를 사용한 코드를 수정하여 로컬 또는 리모트 클러스터에서 실행하는 방법

· 메모리 아껴 쓰기 : 크고 비싼 컴퓨터를 구입하지 않고 대용량 문제를 해결하는 접근법

· 현업에서 얻은 교훈 : 현업에서 고군분투했던 문제에서 얻은 교훈을 통해 같은 문제를 겪지 않도록 예방하기

 

 

끝으로

이 책은 파이썬 3에 맞춰 내용을 보강한 개정판으로써, 처리할 데이터 용량이 큰 프로그램의 병목현상을 찾고 이를 해결해 성능을 향상시키는 다양한 방법을 알려준다. "현장에서 얻은 교훈"이라는 챕터는 대량의 데이터를 다루며 속도가 결정적인 상황에서 파이썬을 사용중인 여러 성공적인 기업의 사례들을 소개하면서 기술적인 선택뿐만이 아닌 그 과정에서 어렵게 얻은 지혜도 공유하여 여러가지 사례들을 통해 어떻게 성능을 개선하였고, 어떤 라이브러리들을 사용하였는지를 소개하였다

경험이 많은 파이썬 프로그래머라면 이 책을 통해 다양한 문제에 대한 구체적인 해결방법을 배울 수 있고, 머신러닝 분야에서 여러 기업이 겪은 이야기들도 엿볼수 있다.



최근 파이썬 창시자인 귀도 반 로섬은 파이썬 랭귀지 서밋 2021(Python Language Summit 2021)에서 매년 1.5배씩 속도를 향상시켜 4년간 최대 5배 향상시킬 것이라고 밝혀 화제가 되었는데, 반대로 이야기하자면 파이썬 언어는 무려 5배나 향상시킬 여지가 있을 만큼 현재 느리다는 의미도 되겠습니다. 파이썬의 낮은 진입장벽과 탁월한 생산성 이면의 느린 실행속도는 많은 파이써니스타(Pythonista)들의 개선을 위한 관심 분야이기도 했습니다.

 

이 책은 파이썬의 성능에 대해 단순한 타입 특성부터 동적 타입언어의 특성, GIL(Global Interpreter Lock)까지 광범위한 범위의 다양한 주제들을 폭넓게 다루며 단순히 '어떻게' 빠르게 동작하는 파이썬 코드를 작성하는가에 머물지 않고 "왜" 느리고, 빠르게 할 수 있는 지까지 로우 레벨(하드웨어) 단계까지 심도 있게 설명하고 있습니다. 2판이 나올 때까지 왜 이 책을 몰랐지 하는 생각이 들 정도로 재미있게 읽었으며 많은 걸 배울 수 있었습니다. 소소한 부분이지만 두 명의 저자가 특정 저자를 지칭하며 성향과 경험을 설명하는 방식도 신선했습니다.

 

다만 다양한 주제의 많은 내용을 한정된 지면에서 다루다 보니 조금 더 자세히 다뤄줬으면 하는 아쉬움이 남는 부분이 있었고, 컴퓨터 공학에 대한 충분한 기반 지식 및 프로그래밍 경험 없이는 이해하기 어렵겠다고 생각되는 난이도 체감이 있었습니다. 그럼에도 불구하고 굳이 파이썬에 한정하지 않더라도 "성능" 이라는 주제에 대해 잘 설명하고 있는 좋은 책이라 생각되며 이러한 주제에 관심있는 분들에게 강력히 추천 드리고 싶습니다.

 

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

 

 



#한빛리뷰단 5월의 책은 #고성능파이썬 입니다.

 

코딩과 알고리즘을 공부하다보면 어떻게 작성해야 훨씬 더 빠르고 안정적으로 코드가 동작할지 고민하게 됩니다. 또한 조금 더 깔끔하게 코드를 수정할 수는 없을까.. 고민하기도 하구요. 실제로 시험에서도 코딩 문제에 최대 실행시간이 언급되어 있습니다. 카카오와 삼성 입사시험 등에서 코딩 테스트를 치를 때도 수만개의 데이터를 처리하는 실행 시간이 무척 중요한데요, 가끔 파이썬은 맞는 코드를 작성하고도 실행 시간을 충족하지 못해 실패하는 사례가 종종 있다고 합니다. 또한 실행 시간 뿐 아니라 어떻게 해야 메모리를 효율적으로 사용할 수 있을지도 정말 중요한 문제인데요, 고성능 파이썬은 이러한 부분에 대해서 상세하게 배울 수 있는 책입니다. 코딩에 관한 기본 문법을 다루지 않기에 파이썬을 어느 정도 공부한 후에 읽으시면 좋습니다.

 

맨 처음에는 컴퓨터 시스템과 연산 장치, 메모리 장치 등의 동작 과정과 특징들을 배울 수 있습니다. 그리고 그에 근거한 파이썬의 효율적인 작업 절차와 좋은 프로그램을 작성하는 방법들을 알려줍니다. 첫 단원은 가볍고 흥미롭게 읽을 수 있는 부분입니다.

 

2장에서는 프로파일링으로 병목 지점을 찾는 방법을 다루고 있습니다. 프로파일링이란 프로그램이 실행되는 동안 CPU와 메모리 사용량 및 특정 함수의 실행 시간 등을 추적하는 것인데요, 이를 도와주는 프로파일링 툴이 있기도 합니다. 고성능 파이썬에서는 프로파일 하는 방법은 물론 최대한 실수하지 않고 효과적으로 프로파일하는 방법을 가르쳐줍니다. 일반적으로 많이 사용되는 time.time()과 데커레이터 등을 활용한 시간 측정 방법을 알려주고, 함수를 한 줄씩 프로파일하는 line_profiler를 활용하는 방법도 있고, CPU 캐시가 얼마나 효율적으로 활용되었는지 알 수 있는 perf stat 사용법도 알려줍니다. memory_profiler를 사용하면 RAM 사용내역을 차트로 확인할 수도 있습니다.

 

이렇게 프로파일링하는 방법을 배우고 나면 파이썬 코드에 대하여 어떻게 작성하는 것이 효율적이고 유사한 코드들의 차이점과 정확한 용도 등을 배울 수 있습니다. 리스트와 튜플, 딕셔너리와 집합인 set, 행렬과 벡터 계산 등을 비교 설명하는데요, 크게 고민하지 않고 썼던 코드들을 어떻게 사용해야 할지 정확하게 배울 수 있어 정말 좋았습니다. 코드를 빠르게 처리하기 위해 기계어로 컴파일하는 방법도 다루고 있습니다. 이를 위해 사이썬과 numba, pypy 등을 배워봅니다. 사이썬을 사용하기 위해서는 C언어를 일정 부분 다룰 줄 알아야 합니다. 또한 비동기 입출력과 멀티프로세싱 모듈을 배우고 RAM을 덜 사용하는 방법도 가르쳐 줍니다. 마지막엔 저자가 현장에서 직접 코딩하고 데이터를 다루며 알게 된 내용들을 이야기합니다.

 

어느 정도 파이썬 코드를 작성할 수 있다면 또는 현재 프로젝트 작업을 진행하고 있다면 고성능 파이썬을 꼭 읽어보시기를 추천드립니다. 우리가 일반적으로 배울 수 없었던 귀한 내용들이 가득하며 이 내용을 읽지 않고 코드를 작성했을 때는 얼마나 비효율적이었을지를 다시 돌아보게 하는 책입니다. 난이도가 있어 쉽게 읽을 책은 아니지만 그만큼 더 중요하고 소중한 책이 될 것 같습니다.



KakaoTalk_20210523_143350096.jpg

 

 

 

KakaoTalk_20210523_211630879.jpg

 

KakaoTalk_20210523_211630879_01.jpg

 

KakaoTalk_20210523_211630879_02.jpg

 

KakaoTalk_20210523_211630879_03.jpg

 

KakaoTalk_20210523_211630879_04.jpg

 

 

저는 초급이라 살짝... 이 아닌, 꽤 어려웠던 책입니다. 

중급 정도 되시는 분들은 자세한 설명 덕분에 파이썬 구현을 더 깊이 이해할 수 있다고 합니다. 

실력 향상을 원하시는 분들께 추천합니다. 

 

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

파이썬은 누구나 쉽게 데이터 전처리나 데이터 분석에 사용할 수 있다. 하지만 파이썬이 너무 고수준 언어이기 때문에 이를 실행해주는 운영체제나 컴퓨터 시스템 전반을 충분히 이해하지 못할 때가 많다고 한다. 데이터 과학 즉 머신러닝 분야에서 다루는 데이터의 양이 일반 개발자가 다루는 데이터의 양보다 훨씬 많으므로 대용량 자료구조를 처리하는 과정에서 병렬 처리의 어려움이나 메모리 장법, 성능 저하등을 더 자주 겪게 된다. 따라서 저수준의 최적화 기법이나 시스템을 이해하는 것이 필요한데, 그 부분을 메꿔줄 수 있는 방법이 바로 고성능 파이썬책이다. 
 
그러므로 이 책의 대상 독자는 파이썬을 충분히 사용해보았으며, 특정 부분이 왜 느린지 생각해 본적이 있는 독자들을 대상으로 한다. 또한 CPU 성능 관련 문제를 겪는 독자가 이 책의 주요 대상이다. 책에서 주요 다루는 내용은 컴퓨터의 저수준 동작 방식, 리스트와 튜플, 사전과 셋, 이터레이터 등이 있다.
 
나같은 경우에도 파이썬 코드를 작성하다가 리스트와 튜플의 미묘한 속도 차이를 겪었었어서 이 부분이 굉장히 궁금해서 보았더니 리스트는 동적인 배열이고, 튜플은 정적인 배열이기 때문에 튜플은 파이썬 런타임에서 캐시하게 되어 사용할 때마다 커널에 메모리를 요청하지 않아도 된다고 한다. 이 책을 통해 오래전에 그냥 지나쳤던(?) 호기심을 해결해볼 수 있었다. 
 
또한 마지막 장에서는 '현장에서 얻은 교훈'을 통해 대량의 데이터를 다루며 속도가 결정적인 상황에서 파이썬을 사용 중인 여러 성공적인 기업의 사례를 소개하고 있는데, 이 사례들은 해당 기업에서 다년간 근무한 핵심 인물들이 사례를 작성하였다. 따라서 이들은 자신의 기술적인 선택뿐만 아니라 그 과정에서 어렵게 얻은 지혜도 공유하고 있기 때문에, 파이썬 고수들에게 조언 받는 기분을 느낄 수 있었다. 

 

 

 

고성능 파이썬

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다

 

 

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

 

파이썬을 쓰는 이유는 배우기 쉽다. 그리고 처음에 뭔가 해보기 좋다. 금방 뚝딱 뭔가 보이니까.

어려운 기능이 아니라면 빠르게 프로토타이핑도 가능해서 이것저것 해볼 수 있다.

그래서 잠시 자만하고 '나 파이썬 좀 하지!'라고 생각 했더란다..

그렇다고 파이썬 기본서만 계속 보면 나도 모르게 착각에 빠지게 된다. '나 좀 하지.'라고.

그런 의미에서 초보자에서 이제 한 걸음 더 나아갈 수 있도록 도움을 주는 책이라 생각한다.

 

최근에 개발을 하다보면 예전엔 단순히 프로그램 실행 시간만 체크했었다. 그런데 요즘에 CPU나 메모리 체크가 말이 나오고 있었다.

특히 큰 데이터를 처리할 때 그만큼 잡아먹는 게 많으니 단순하게 기능 수행에 대한 시간체크만으로는 부족하지 않나 생각이 들게 될 때라 생각한다.

이 책에선 좀 더 효과적인 프로파일링을 할 수 있는 방법을 알려준다.

 

7장 c언어로 컴파일하기 이 장에서는 파이썬을 사용하면서 다른 언어에서의 장점(속도) 을 이용할 수 있게 한다는 점이 흥미로운 부분이었다.

 

책에서는 중고급 파이썬 프로그래머를 위한 책이라고는 하는데 초보자에서 넘어가려면 뭔가 계기가 있어야지 않겠나 싶다. 내가 이 책을 완전하게 이해했다고 보기는 어렵다. 내가 중고급 수준은 아니기 때문에. 다만 내가 이런 걸 겪을 수 있겠구나 정도의 간접 경험과 미리 겪어본 사람들의 경험을 담은 책을 통해서 완전 동일한 해법은 아니어도 어느 정도 도움을 받을 수 있을 것이라 생각한다.

 

(근데 그래프가 흑백인 건 도대체..? 라벨이 4개인가 되는데 색이 동일하다.)



 

Author: 미샤 고렐릭, 이안 오스발트 지음 | 오현석 옮김

출판사: 한빛미디어

 Score /5: ⭐️⭐️⭐️⭐️⭐️

 

파이썬에 대해 왜? 어떻게? 원리가 궁금하다면 이 책을 통해서

개발자들이 언어를 완벽하게 이해하고 코딩하지는 않습니다. 하지만 언어의 특성을 이해하고 이를 잘 활용하는 것이 중요한 부분이 되는 업무도 있습니다. 또는 그동안 Ctrl + c -> Ctrl + v 를 하면서 왜 이렇게 되는지 이해가 어렵고 원리가 궁금했던 분들을 위한 책이 이 고성능 파이썬 2판이 아닐까 합니다.

그림 1. 항목 추가에 대한 리스트의 변경과정을 상세하게 보여줍니다.

 

목차는 각각의 자료형에 대한 부분 부터 멀티 프로세싱에 관한 것까지 다양하게 주제를 제공하고 성능을 향상 시킬 수 있는 부분을 조목조목 짚어 줍니다.
일종의 과외 선생님이 옆에 붙어서 얘기해 주는 느낌이랄까? 상당히 친절한 부분을 보여줍니다.

 

누구에게 적합한 책일까?

이 책은 적어도 중급자 이상이 봐야하는 책입니다.
파이썬 문법도 어려운데 이 책을 보는 것은 걷지도 못하는 아기가 뛰려고 하는 것과 같습니다.
따라서 파이썬에 익숙한 중급자, 그리고 고급 사용자 분들이 보시길 추천드립니다.

물론 초보자분들도 같이 보실 순 있습니다만, 시간은 어느정도 소요될 수 있다는 점 감안하시기 바랍니다.
(제가 초급과 중급 사이인데 시간이 상당히 오래 걸렸고 완벽히 이해하지는 못했습니다.)

 

어떤식으로 읽어야 할까?

개인적으로는 처음부터 끝까지 쭈욱 읽는 방식보다는 본인이 흥미있는 파트 부분을 따로 읽어보는 것을 추천합니다.
책 범위가 약 500 페이지로 상당한 양인데다가 한번에 모든것을 이해하기란 정말 쉽지 않기 때문입니다.

반복해서 보거나 레퍼런스 형태로 참고하는 것이 이 책을 좀 더 효율적으로 활용할 수 있는 방법이 아닌가 합니다.

 

그래서 추천하나요?

네! 저는 100퍼센트 여러분들에게 추천드리고 싶은 파이썬 책입니다.
지금 이해가 안되도 계속해서 읽다보면 답이 보일 겁니다.

※ 이 책은 한빛미디어의 지원아래 제공되는 리뷰입니다.

고성능 파이썬 메인페이지.PNG

이 책은 파이썬을 충분히 사용해보았고 특정 부분이 왜 느린지 생각해본 적이 있으며, 이를 위한 해법을 위한 기술들을 들어본 적이 있는 독자를 대상으로 하고 있다. 또 다른 언어로 프로그래밍을 해본 경험이 있어서 성능을 개선하는 방법이 여러 가지임을 아는 독자가 그 대상이다. 그러므로 초보자를 위한 책은 아니다.


이 책의 구성


 

1부 : 고성능 파이썬 이해하기

2부 : 프로파일링으로 병목 지점 찾기

3부 : 리스트와 튜플

4부 : 사전과 셋

5부: 이터레이터와 제너레이터

6부 : 행렬과 벡터 계산

7부 : C 언어로 컴파일하기

8부 : 비동기 I/O

9부 : multiprocessing 모듈

10부 : 클러스터와 작업 큐

11부 : RAM 덜 사용하기

12부 : 현장에서 얻은 교훈


으로 구성이 되어있습니다.

 

이렇게 고성능 파이썬 책을 읽고 보니 다양한 생각이 교차한다. 먼저 어떠한 상황에서 빠르게 가능한 많은 것을 처리할 지 이에 대한 고민을 이 책을 통하여 해결할 수 있을것이다. 더 나은 품질의 파이썬 프로그래밍을 위한 최고의 책인 듯 하다. 물론 파이썬 뿐만 아니라 다양한 프로그래밍 작업에 있어서 한번쯤 고민해 볼만한 내용들로 꽉 차 있어서 곁에 소장해야할 책이 한권 더 생겼다.


 

 

 

 

물론 내용이 쉬운 편이 절대로 아니다. 끊임없이 읽고 또 읽어 봐야겠다

고성능 파이썬 리뷰

 

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

 

고성능 파이썬.jpeg

 

 

  C/C++와 같은 언어로 프로그램을 작성하다가, Python이나 Ruby와 같은 Script 언어를 사용해 보면, 복잡한 기능을 몇 줄 안 되는 코딩 만으로도 수행할 수 있는 점에 놀라면서 여러가지 프로그램을 Script 언어로 작성해 보기 시작한다. 하지만, utility 수준의 프로그램을 벗어나서, 본격적으로 main 프로그래밍 언어로서 사용하려 했을 때, 성능 문제에 부닥치게 된다. 보통 Script 언어가 성능은 컴파일 언어들에 비해 떨어지지만, 개발 기간을 줄일 수 있기 때문에 더 이득이라고 하는 분들도 있지만, 이 역시 어떤 도메인에서 개발을 하느냐에 따라 달라질 수 있는 이야기이기 때문에 항상 맞는 이야기다 라고 할 수가 없다. 

  Python을 이용하는 분야가 다양해지고, 성능이 중요한 다양한 분야에서도 Python을 이용해 다양한 테스트를 수행하려는 시도가 늘어남에 따라, Numpy, Pandas, Pypy 등과 같은 사용하기 편리하면서도 빠른 성능을 제공하는 모듈이 생겨났고, 이러한 모듈들을 이용하여 성능에 대한 제약을 극복하는 경우들이 많아졌다.

  고성능 파이썬은 Python 언어를 이용하면서 성능에 문제가 생겼을 때, 체크해볼 수 있는 언어의 기본적인 특성부터 시작해, 병렬 처리(벡터)를 이용하는 법, Cython이나 Numba, Pypy와 같은 효율적인 모듈 이용법, 비동기 I/O 처리 및 멀티코어 이용방법, 클러스터 사용법 과 같은 성능 문제에 부닥쳤을 때 고려해볼만 한 다양한 부분을 예제를 하나하나 변경해가면서 경우에 따라 어떤 이용법을 이용하면 좋은 지 소개하고 상세히 설명하고 있다. 또 RAM을 덜 사용하기 위한 팁 및 마지막 챕터에 소개하는 일을 할 때 겪었던 경험에 대한 교훈은 지금 당장 필요하지 않을 지 몰라도, 또 성능과 관련된 문제에 부닥치지 않더라도 알고 있으면 많은 도움이 되는 훌륭한 내용들이다,

  성능 문제로 인해, L1, L2 cache miss를 어떻게 줄여야 할 지 고민해 본적이 있다면, 고성능 파이썬에서 설명하는 다양한 내용들이 처음보는 이야기는 아닐 것이라 생각된다. 다양한 책에서 소개하는 고성능 코딩 방법이라던지,  cache miss를 줄일 수 있는 다양한 방법들을 이용해 보면 간단히 책에서 이야기하는 것처럼 성능이 올라가지 않는 경우가 많다. 또 CPU의 상세 파악, Cache/RAM을 어떻게 효율적으로 이용해야 하는 지 고민을 하면서 많은 시간을 들이지만 생각만큼 잘 되지 않는 경우가 많다. 이는 Script언어나 컴파일 언어 모두에 해당하는 이야기이다. 이러한 고민을 가지고 있는 분들이라면, 고성능 파이썬이 파이썬에 대해서 언급하고 있는 책이지만, 다른 언어에도 충분한 힌트를 줄 만한 내용들을 포함하고 있어서 읽어보시길 권하고 싶다.

  책에 실려있는 잘못된 indentation 부분이라던지, 일부 어색한 번역투가 있기는 하지만, 이 책을 읽고 이해할 수 있는 분들에게는 별 문제가 되지 않을 것으로 생각된다.

  책을 읽으면서, 기존에 알고 있던 파이썬에 대한 언어의 이해가 깊어진 부분도 있고, 최적화 관련 내용도 상기해 있는 좋은 기회였다. 책을 리뷰할 기회를 주신 한빛미디어에도 감사의 말을 전하고 싶다.

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

파이썬 성능 잠재력을 끌어내는 실용적인 개발 전략서 이 책은 파이썬을 아주 깊게 다룬다.  이 책은 이터레이터와 팬더스와 같은 파이썬의 깊은 부분부터 시작해서 비동기 I/O 기본적이라고 할수 있는 부분까지 파이썬의 전체적인 부분까지 다루고 내가 생소했던 쓰레드 큐 클러스터 작업 등을 알려준다. 또한 이 책은 개정판이기 때문에 이전에 이 책을 읽어봤더라도 새로운 내용을 읽어보면 좋을 것 같다.

파이썬을 공부하며 기초에 대해 어느정도 다져 왔지만,

본격적으로 파이썬을 이용하기에는 성능 등의 측면에서 다소 아쉬움이 많았다.

 

그러다 '고성능 파이썬' 책을 접하면서, 숨겨진 파이썬의 기능, 성능등을 효율적으로 끌어올리는 방법을 알게 되었다.

여기에 파이썬의 장점인 다양한 라이브러리와 쉬운 학습을 극대화시킬 수 있었다.

 

특히 최근의 빅데이터 기반 대용량 프로그래밍 시에는 이러한 솔루션이 특히 도움이 될 수 있다.

코드를 프로그래밍 하면서 특히 고민했던 것은 코드 실행시의 오랜 시간이 걸리는 것이었다.

작성하면서 루프나 변수들을 크게 고려하지 않아 무거운 코드가 된 적이 많았다.

본 책에서는 이러한 코드들을 최적화하고, 슬림하게 만듦으로써 파이썬의 성능을 보다 끌어올리는 법들이 소개되어 있다.

 

파이썬에 대해 아직 기본적인 정도의 실력이라, 본 책에서 말하는 모든 전략들을 적용하기는 어려웠지만,

방향성 선정 및 향후 코드의 최적화 시에 충분히 참고해볼 만한 책이라 생각된다.

 

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

"대상이 아닌 독자

이 책은 중고급 파이썬 프로그래머를 위한 책이다. 의욕이 넘치는 초보 파이썬 프로그래머도 잘 따라올 수 있겠지만, 이 책을 읽기 전에 파이썬 기초를 먼저 다지기를 추천한다.(- 본문중 - )"

 

이 책은 서두에서 명확히 밝히고 있듯이, 파이썬의 성능 개선을 위해 몇가지 트릭을 나열해 놓은 수준의 책이 아니다. 적절한 프로파일링 도구를 선택해서 병목을 일으키는 부분을 찾고, 병목을 개선 하는 방법.

파이썬에서 많이 사용하는 리스트, 튜플, 사전과 셋 등을 효과적으로 사용할 수 있는 방법도 제시하고 있다.

가장 흥미로운 챕터는 7장이었다. C언어(사실 나는 파이썬보다 C/C++이 더 익숙하다)로 컴파일하여(그렇다고

무작정 C언어로 바꾸는 것이 아닌 C언어로 교체하면 성능을 얻을 수 있는 예시등도 상세히 알려주며...) 성능을 끌어 올리는 부분에서 부터, GPU 심지어 포트란(정말 오랫만에 들어본... ^^)을 이용한 I/F도 제시하고 있다.

한번에 모든 것을 내것으로 만들기는 힘들지만 책상위 한켠에 두고 오래오래 자세히 살펴보며 내것으로 만들고 싶은 내용들이 많이 기재되어 있었다.

이후, 비동기 I/O, 멀티프로세싱 등에대해서도 각각 한 챕터씩 할애하고 있으며, AI에서 문제가 많이 되는 RAM을 덜 사용하는 부분에 대해서도 한 챕터를 할애하고 있는 점이 흥미로웠다. 경험많은 고수에게서 전해 들을 수 있는 '현장에서 얻은 교훈'도 여러부분에서 도움을 받을 수 있다.

다소 퀵하게 전체 내용을 살펴보았으나 관심있는 챕터는 시간을 더 들여 상세히 보아야 할 것 같다. 단순히 파이썬을 사용하는 개발자를 넘어 한단계 도약하는 계기를 얻고자 하는 이에게 이 책을 강력히 추천하는 바이다.

 

아쉬운 점 : 

원서는 컬러판인 것에 비해 국내서의 경우 eBook 버전도 컬러로 제공되지 않는다.

'핸즈온 머신러닝 2판'처럼 많이 팔려(출판시점 부터 많이 팔릴것이 예상됨) 표지에 '전면 컬러판'을 내세우기는 힘들 것이다. 중간중간 차트나 그림이 흑백이라 알아 보기가 다소 힘든 부분이 있다. 그보다 난이도도 높고 다소 딱딱할 수 있는 책에서 좀더 컬러풀 했다면 그 딱딱함을 좀 줄여줄 수 있지 않았을까 생각해 본다.

 

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

서문

파이썬은 느린 언어입니다. 개발자가 타입 지정을 하지 않도록 하고, 메모리도 관리하지 않게 하며, 컴파일도 하지 않게 하는 대신 성능과 메모리 측면에서 많은 부분을 희생했습니다. 하지만 그러한 성능적인 이슈에도 불구하고 그 누구도 파이썬이 '좋지 않은' 언어라고 하지는 않을 것입니다. 성능을 약간 희생한 대신 생산성과 가독성, 그리고 편리함을 얻었기 때문입니다. 파이썬 덕분에 프로그래밍에 입문하여 개발을 시작하기도 하고 머신러닝과 딥러닝에 대한 접근성을 크게 높혀 누구나 데이터를 분석하고 인사이트를 얻을 수 있는 환경을 얻게 되었습니다.

하지만 개인적으로는, 정말 나이브하게 소스 코드를 작성한다면 그 어떤 프로그래밍 언어보다 느려질 수 있는 언어가 파이썬이라고 생각합니다. 특히 간단한 프로그램을 작성하다가 조금 더 복잡한 프로그래밍을 하는 경우에, 생각보다 느려진 나의 코드를 종종 마주하게 될 것입니다. 그리고 그 코드가 프로토타입이 아닌, 프로덕션 환경에서 작동하는 코드라면 발생하는 성능 이슈에 대응하기 위해 프로파일링을 하거나 다른 언어로 포팅할 것입니다. 이 책은 체계적이고 다양한 프로파일링 방법을 통해 파이썬의 성능을 극한으로 끌어내는 방법을 안내합니다. 그 뿐만 아니라 빅데이터 시대에서 파이썬을 통해 대용량 데이터를 다루고, RAM과 같은 한정된 리소스를 최소한으로 사용하기 위한 방법도 제시합니다. 개발을 하다가 파이썬 언어적 한계를 느껴보신 분들이라면 이 책을 읽어보시길 권장합니다.

 

이 책의 내용

고성능 파이썬은 컴퓨터 시스템에 대한 설명부터 시작합니다. CPU와 같은 연산장치의 특성과 RAM, 캐시 등의 메모리에 대한 설명, 그리고 통신 계층에 대한 설명을 하며 각 특성에 맞게 파이썬 코드를 최적화 하기 위한 전략을 언급합니다. 그 다음으로는 코드 프로파일링에 대한 설명과 활용 가능한 다양한 라이브러리들, 파이썬 자료구조의 특성, 비동기성, Multiprocessing 대해 다루는데, 읽으면서 다른 책들과 차별화 되는 두 가지 특징을 확인할 수 있었습니다.

 첫 번째는 책이 굉장히 꼼꼼하다는 것이었습니다. 꼼꼼하다라는 표현은 다양하게 해석할 수 있지만, 제가 이 책에서 꼼꼼하다고 느낀 부분은 각 방법론들 마다 세세한 설명을 덧붙이고, 소스코드와 도표를 꼭 첨부한다는 점이었습니다. 논문을 자주 보는 대학원생의 특성 상 굉장히 추상적이고 두루뭉실한 글을 읽다가 보아서인지는 모르겠지만, 소스 코드 한줄 한줄이 내부에서 어떻게 동작하는지 설명해주며, 그걸로도 모자라 역어셈블 결과까지 보여줍니다. 그 덕분에 효율적인 코드와 비효율적인 코드의 차이점이 명확하게 와닿았고 독학하며 군데군데 비어있던 지식의 공간을 가득 채워주는 느낌을 받았습니다. 또한 도표와 소스코드가 매우 가독성이 높기 때문에 결과가 한눈에 들어오며 코드를 수도코드처럼 읽을 수 있었습니다.

 두 번째는 과학적이고 체계적인 실험을 통해 성능 개선의 근거를 제시한다는 점이었습니다. 반복 실험은 물론이며, 코드를 변경했을 때 메모리 사용량의 변화, 소요시간, 향상된 정도 뿐 아니라 오차가 생길 수 있는 작은 오버헤드까지 설명하여 마치 바늘하나 들어갈 틈 없는 구성을 보여주었습니다. 저자가 물리학 박사 출신이라서 그런지 수치적 실험과 결과 분석에 많은 공을 쏟았다는 생각이 들었습니다. 아마 이 책을 읽으시는 분들도 저와 같은 생각을 하게 되실 것 같습니다.

 그 외에도 프로파일링 챕터에서는 비효율적인 코드를 먼저 제시하고 점점 개선해 나가는 과정을 보여준다던가, 파이썬만의 자료구조는 다른 언어와의 비교를 한 후 진행하는 등의 챕터 별 구조도 짜임새 있게 구성되어, 몰입감 있게 읽는데 도움을 주었습니다.

 

아쉬운점

많은 좋은 내용들을 가지고 있지만 몇가지 아쉬운점도 보였습니다.(여기서부터는 매우 개인적인 의견이 들어가 있음을 밝힙니다.) 먼저 번역의 문제인데, 전반적으로 훌륭한 번역이라고 생각하지만 몇몇 부분에서 원서의 영문장이 어땠는지 유추가 되는 문장들이 있었습니다. 그리고 전반적으로 딱딱한 느낌의 문체를 가지고 있기에 기술서로서는 읽기 좋았지만, 장시간 읽는데에는 조금 지루했습니다. 그래서 전체적으로 한번 읽어본 후, 편독을 하는 것도 좋은 방법인 것 같습니다.

대상 독자

파이썬의 성능을 극한으로 내기 위한 최적화 방법들을 설명하기 떄문에 아마도 파이썬을 처음 접하거나 컴퓨터 공학적인 베이스가 부족하신 분, 수리적 분석에 약하신 분들은 읽기 어려우실 수 있습니다.

 먼저 이 책을 읽기 전에 파이썬에 대한 기본문법을 당연히 이해해야 하고, 넘파이, 판다스, 사이파이 등의 라이브러리를 이용하여 자신이 원하는 기능을 파이썬을 통해 코드로 작성할 수 있으셔야 본 책의 내용을 따라갈 수 있습니다. 또한 이 책에는 메모리나 컴파일관련 내용들, 알고리즘 등 컴퓨터 공학적인 내용들도 다수 포함되어 있습니다. 이러한 내용들은 이미 알고 있다고 가정하는지 자세하게 설명을 하지 않습니다. 때문에 책을 읽으시면서 검색하고 공부하면서 읽다보면 아마 많은 것을 배우실 수 있을 것입니다. 마지막으로는 수리적인 내용인데, 생각보다 많은 수식들이 나옵니다. 그냥 넘어가셔도 크게 문제는 없지만 수식과 친하시다면 더 많은 내용을 가지고 가실 수 있을 것이라고 생각합니다.

 

추천합니다.

파이썬에 능숙하고 다음 레벨로 넘어가고 싶은 분

파이썬으로 대규모 개발을 진행하시는 분

파이썬의 성능적 한계를 느끼신 분

대용량 데이터 분석을 파이썬으로 하시는 분

 

추천하지 않습니다.

파이썬에 입문한지 얼마 되지 않으신 분

가볍게 파이썬에 대해 알고싶으신 분

 

사설

지난 달에 제가 작성한 코드가 한시간 넘게 동작해서 프로파일링을 진행한 적이 있습니다. 저는 코드 프로파일링을 거의 해본적이 없기 때문에 디버깅 모드를 켜고 한줄한줄 의심되는 코드를 돌려보기도 하고, 구글링을 통해 알게 된 cProfile을 통해 간단한 분석을 하기도 했습니다. 우여곡절 끝에 20여분까지 동작 시간을 줄인 후, 이 책을 읽게 되었는데, 프로파일링 챕터 가장 앞에 이러한 문장이 있더군요.

"프로파일링을 하지 않고 문제의 원인이라고 의심되는 코드를 수정할 수도 있다. 하지만 엉뚱한 코드를 고치는 일이 다반사임을 주의하자."

여러분들은 저같은 경험을 하지 않고 이 책을 미리 읽어보시고 프로파일링을 하여 좋은 코드를 작성하시면 좋겠습니다.

 

 

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

 

 


 


챕터1 고성능 파이썬 이해하기

마치 컴퓨터공학에 처음 입문하는 기분을 자아내는 챕터이다.

컴퓨터과학 측면에서 어떤 식으로 코드를 작성해야 하는지

어떤 식으로 전략을 짜야 하는지

어떤 프로그래머가 돼야 하는지를 알려주고 있다.


챕터7 C언어로 컴파일하기, C나 포트란으로 작성하는 방법을 알려준다.

C나 포트란으로 파이썬을 사용하는 건 상당히 흥미로운 발상이었다.


챕터11 램 덜 사용하기, 사실상 제일 중요한 부분이라 생각.

현업 개발자와 개발자가 되기 위해 배우는 자들의 가장 큰 차이는 효율성이라 생각한다.

현업 개발자들은 어떻게 하면 더 빠른 시간 내에 더 높은 효율을 끄집어 낼 수 있을까를 고민하지만

예비 개발자들은 코딩과 디버그 찾는데 급급하기 때문에 이러한 부분을 잘 캐치해 내기 쉽지 않다.


챕터12 현장에서 얻은 교훈


한 가지 아쉬운 점, 흑백이라 무엇이 무엇을 가리키는지 알 수 없다..


 

이 책은 프로그래밍을 처음 접하는 사람이나 초보 개발자들에게는 적합한 책은 아니다.

문제나 언급하고 있는 솔루션들이 중, 상급 개발자는 돼야 이해하기 수월한 책이라고 판단된다.

처음 시작은 언제나 쉽지 않다.

그리고 인내심을 가지고 버티는 것 또한 쉽지 않다.

프로그래밍이란 분야는 그러한 어려움들이 더욱 극명한 학문이라 생각한다.

하지만 견디고 노력하다 보면 분명 빛은 비칠 것이라 생각한다.

대한민국의 예비 개발자들.

모두 힘내길 바란다.

 

원글: https://techsignal.tistory.com/64

 

개발에 관심이 있는 분이라면 누구나 한번쯤 보거나/들어보셨을 O'REILLY 의 책입니다.

업무에 파이썬을 쓰기 시작해서 파이썬을 제대로 사용할 수 있도록 공부를 하고 있었는데

마침 고성능 파이썬 2판이 출간되어서, 이 책을 읽게 되었습니다!

 

목차를 보시면  프로파일링으로 병목 지점 찾기, RAMM 덜 사용하기, C 언어로 컴파일하기 등 부터 리스트와 튜플, 사전과 셋 등 파이썬의 자료구조를 활용해 고성능의 프로그램을 만들 수 있는 방법을 설명하고 있습니다.

 

 

 

파이썬이 가지는 기본 라이브러리들입니다. 파이썬 유저라면 한번쯤 들어보셨을 것 같습니다.

 

 

CHAPTER 3 리스트와 튜플

3.1 더 효율적인 탐색
3.2 리스트와 튜플
3.3 마치며

부분입니다. 

 

아직 초보라 뒷 부분이나 프로파일링 등은 시도해보지 못했지만,

데이터타입에 대해 설명해주는 부분은 읽어두니 업무할 때 있어

보다 더 적합한 자료형을 사용하는데 도움이 되었습니다. 

 

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

파이썬은 다른 프로그래밍 언어에 비해 비교적 초기 접근이 쉬운 언어라 최근 초중고생등 초심자들 에게도 인기가 많고 빅데이터를 다루는데도 사용자 커뮤니티가 많아 전문가 집단에게도 인기가 많은 언어이다.

 

본 책 '고성능 파이썬(2판)' 은 초급자를 위한 책은 아니고 제목과 같이 큰 데이터를 빠른 시간에 처리하기 위한 중급 이상의 개발자를 위한 책이라고 하겠다.

 

책의 내용을 살펴보면 기본적으로 C(C++ 또는 자바)언어에 관한 이야기를 다룬 챕터가 있으며(chapter7. C언어로 컴파일하기),

 

컴퓨터의 저수준 동작방식, 리스트와 튜플, 사전과 셋, 이터레이터, 행렬과 넘파이, 컴파일과 JIT 컴퓨팅, 동시성, 다중처리, 클러스터 컴퓨팅, 메모리 아껴쓰기, 현업에서 얻은 교훈등을 다루는데,

 

이는 기본적으로 컴퓨터과학(공학)과 커리큘럼 학습 내용(컴파일, 자료구조, 컴퓨터 구조론, 알고리즘, 운영체제등)을 사전 배경 지식으로 알고 있어야 이해가 쉬운 부분이 있어 초보자들이 보기에는 약간의 장벽이 있긴하다.

 

하지만 언제나 쉬운것만 배우게 되면 초보자에 수준에서 맴돌고 우물안 개구리고 새로운 세상을 볼 수 없는것은 인지상정 이므로 이 책을 책장에 오랜시간 두고 여유롭게 읽다 어렵다고 생각되는 부분이 나오면,

 

위에서 언급한 컴퓨터 과학 관련 도서를 구해 조금씩 공부하며 각 챕터를 정복해 나가는 것도 나쁘지 않아 보인다.

 

천리길도 한걸음 이라고 하는데 프로그래밍에는 왕도가 없어 보이며, 코드를 눈으로 보는 것이 아니라 일신우일신(日新又日新) 코드를 직접 손으로 쳐가면서 애기가 걸음마 하듯 나아가면 어느덧 정상에 올라가 있지 않을까 싶다.

 

<이 리뷰는 한빛미디어 도서협찬을 받아 작성하였습니다>

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

 

 
외관은 위와 같은 표지의 책이다.
 
책에 대한 평을 하기 전에...
대학에서 컴퓨터를 전공하고 J2ME, KVM이 존재하던 시절에 모바일 게임 개발을 시작으로 이런 저런 무선 서비스 개발 및 JAVA기반 서버 프로그램과 스마트폰 앱 개발 등을 해 왔고 지금도 서버쪽 일을 계속 하고 있으며, 대학에서 작년까지 7년간 강의도 해 왔었다.(그 덕에 리뷰어 선정된듯...)
 
개인적인 배경을 밝히는 이유는 이 책이 무척이나 마음에 들고 좋은 얘기만 주절주절 할거 같은데 학생이나 초급자가 보기엔 좀 어려운 책이라서다.
 
대학에서 파이썬도 강의를 했었는데 이 경우는 대상이 컴퓨터 전공이 아닌 타 학과 학생들을 대상으로 하는 경우였다.
처음 접해서 배우기 쉽고 라이브러리가 워낙 잘 되어 있기 때문에 처음 프로그래밍을 배우는 사람들에게 적합하기 때문이라고 개인적으로 생각한다.
 
하지만 이 책은 그런 파이썬에서 그 이상에 대한 이야기를 하고 있다.
파이썬도 C로 만들어 졌고 CPU와 메모리를 통해서 동작을 하고...
결국 스크립트 언어이지만 컴퓨터라는 하드웨어를 이해하고 그 위에서 동작하는 소프트웨어에 대해서 이해하고 이를 바탕으로 더 나은 성능의 프로그램을 만들어 내는 것에 대한 이야기를 하는 책이다.
 
그래서 난 이책이 무척 마음에 든다.
이런 저런 핑계로, 아니면 업무를 바쁘게 하다보니 언제부턴가 구현에 급급한 상황이 많았는데(솔직히 게을러서...) 책 내용을 훑어보며 개발에 불타오르던 시절을 떠올리게 되었다.
 
이런저런 핑계로 책에 대한 리뷰는 이렇게 간단하게 적...
 
책에서 마음에 들지 않는 부분이 있다.
너무 흑백이다. 차트나 그래프, 그림을 보면 원래는 컬러가 아니었을까 싶다.
흑백에다가 회색조로 구분도 잘 안되어서 차트나 그래프, 그림을 이해하거나 알아볼 수 없는 경우가 많다.
 
그 외에는 마음에 든다.
 
진지한 파이썬 이후로 재미있게 볼만한 책인것 같다.
 
좋은 그리고 마음에 드는 책으로 리뷰를 할 수 있게 해준 한빛 출판사에 감사의 말을 전한다.

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
고성능 파이썬(2판)
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
고성능 파이썬(2판)
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
고성능 파이썬(2판)
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실