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

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

고성능 파이썬

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

한빛미디어

집필서

절판

  • 저자 : 미샤 고렐릭 , 이안 오스발트
  • 번역 : 김영근 , 오현석
  • 출간 : 2016-08-10
  • 페이지 : 424 쪽
  • ISBN : 9788968484995
  • 물류코드 :2499
  • 개정판정보 :개정판이 새로 출간되었습니다. 개정판 보기
  • 초급 초중급 중급 중고급 고급
4점 (6명)
좋아요 : 58

파이썬의 생산성에 컴파일 언어의 성능을 더하다

 

파이썬은 느리다? 이 책은 파이썬의 단 하나의 약점, 성능 문제를 해결해주는 다양한 전략을 소개한다. 파이썬의 관점에서 바라보는 컴퓨터 아키텍처와 동작 원리를 기본으로 깔고, 각종 라이브러리의 올바른 활용법, 행렬과 벡터 연산 가속, 메모리를 효율적으로 쓰는 법, 병목을 찾는 습관과 도구, 네이티브 코드로 컴파일하기 등을 배우고, 파이썬을 성공적으로 도입한 업계 선배들의 경험담과 전략을 듣게 될 것이다. 특히 한국어판에서는 저자의 동의를 얻어 파이썬 2로 작성된 원서의 예제 코드를 파이썬 3에서 실행할 수 있도록 수정하였다.

 

미샤 고렐릭 저자

미샤 고렐릭

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

 

이안 오스발트 저자

이안 오스발트

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

 

오현석 역자

오현석

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

 

 

김영근 역자

김영근

애플 II에서 BASIC으로 처음 프로그래밍을 시작했고, 장래 희망은 항상 프로그래머라고 말하고 다니다 정신 차리고 보니 어느덧 20년 경력을 훌쩍 넘긴 개발자가 되었다. 리눅스 커뮤니티에서 오랫동안 활동했으며 임베디드 환경에서부터 미들웨어, 웹, 스마트폰 애플리케이션에 이르기까지 다양한 분야에서 개발했다. 아시아 최초의 파이썬 소프트웨어 재단의 이사로 활동했으며 2014년 ‘파이콘 한국(PyCon Korea)’을 처음 시작했다. 스타트업 CTO로 재직 중이며 소프트웨어 마에스트로의 기술 멘토이기도 하다. 현재의 장래 희망은 장학 재단 설립이다. 한빛미디어에서 『리눅스 시스템 프로그래밍(개정2판)』(2014), 『고성능 파이썬』(2016)을 번역했다.

 

1장. 고성능을 위한 파이썬 이해하기

__1.1 컴퓨터 시스템의 기본

__1.2 기본 구성 함께 보기

__1.3 파이썬을 쓰는 이유

 

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

__2.1 효과적으로 프로파일링하기

__2.2 쥘리아 집합

__2.3 전체 쥘리아 집합 계산하기

__2.4 시간을 측정하는 간단한 방법 - print와 데코레이터

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

__2.6 cProfile 모듈 사용하기

__2.7 line_profiler로 한 줄씩 측정하기

__2.8 memory_profiler로 메모리 사용량 진단하기

__2.9 heapy로 힙 메모리 살펴보기

__2.10 dowser로 변수 생성을 실시간으로 확인하기

__2.11 dis 모듈로 CPython의 바이트코드 조사하기

__2.12 최적화 중에 단위 테스트하기

__2.13 성공적인 코드 프로파일링 전략

__2.14 마치며

 

3장. 리스트와 튜플

__3.1 더 효율적인 탐색

__3.2 리스트와 튜플

__3.3 마치며

 

4장. 사전과 셋

__4.1 사전과 셋의 동작 원리

__4.2 사전과 네임스페이스

__4.3 마치며

 

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

__5.1 무한급수와 이터레이터

__5.2 제너레이터의 지연 실행

__5.3 마치며

 

6장. 행렬과 벡터 연산

__6.1 문제 소개

__6.2 파이썬의 리스트만으로 충분할까?

__6.3 메모리 단편화

__6.4 numpy를 이용한 확산 방정식 해법

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

__6.6 최적화 검증 scipy

__6.7 마치며

 

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

__7.1 가능한 속도 개선의 종류

__7.2 JIT 대 AOT 컴파일러

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

__7.4 C 컴파일러 사용하기

__7.5 쥘리아 집합 예제 다시 보기

__7.6 Cython

__7.7 Shed Skin

__7.8 Cython과 numpy

__7.9 Numba

__7.10 Pythran

__7.11 PyPy

__7.12 각 기술을 언제 사용할까?

__7.13 외부 함수 인터페이스

__7.14 마치며

 

8장. 동시성

__8.1 비동기 프로그래밍 소개

__8.2 순차적 크롤러

__8.3 gevent

__8.4 tornado

__8.5 AsyncIO

__8.6 데이터베이스 예제

__8.7 마치며

 

9장. multiprocessing 모듈

__9.1 multiprocessing 모듈 소개

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

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

__9.4 소수 찾기

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

__9.6 multiprocessing과 numpy 데이터 공유하기

__9.7 파일과 변수 접근 동기화하기

__9.8 마치며

 

10장. 클러스터와 작업 대기열

__10.1 클러스터링의 이점

__10.2 클러스터링의 단점

__10.3 일반적인 클러스터 설계

__10.4 클러스터화한 해법을 어떻게 시작할 것인가?

__10.5 클러스터 사용 시 고통을 피하는 방법

__10.6 세 가지 클러스터링 솔루션

__10.7 강건한 프로덕션 클러스터링을 위한 NSQ

__10.8 살펴볼 만한 다른 클러스터링 도구들

__10.9 마치며

 

11장. RAM 아껴 쓰기

__11.1 원시 타입 객체는 비싸다

__11.2 컬렉션이 사용하는 RAM 이해하기

__11.3 바이트와 유니코드

__11.4 RAM에 수많은 텍스트를 효율적으로 저장하기

__11.5 RAM을 덜 사용하기 위한 팁

__11.6 확률적 자료구조

 

12장. 현장에서 얻는 교훈

__12.1 어댑티브랩의 소셜 미디어 분석, 소마(SoMA)

__12.2 RadimRehurek.com의 딥 러닝, 플라이(Fly)

__12.3 Lyst.com의 대규모 기계 학습

__12.4 스메시에서의 대규모 소셜 미디어 분석

__12.5 성공적인 웹과 데이터 처리 시스템을 위한 PyPy

__12.7 Lanyrd.com의 작업 대기열

프로토타이핑에서 실무 운영까지 살아가는 파이썬 코드의 비밀

아이디어 무한경쟁이 펼쳐지는 대(大)스타트업 시대! 높은 생산성으로 유명한 파이썬은 최우선 고려사항이다. 한 가지, 컴파일 언어 대비 느린 성능 때문에 성공한 서비스나 성능이 중요한 기능은 컴파일 언어로 다시 작성하곤 한다. 하지만 실무 운영까지 파이썬 코드를 계속 이어가는 방법이 있다면?

 

이 책은 파이썬을 둘러싼 설계와 작동 원리를 설명하고 이에 기반한 실용적인 구현 전략을 소개한다. 멀티코어 아키텍처와 클러스터의 이점을 활용하려면 어떻게 해야 하는가? 안정성을 잃지 않고 확장하는 방법은 무엇인가? 여러분은 이에 대한 명확한 해법을 찾고 방대한 소셜 데이터까지도 눈부신 속도로 처리해내는 파이썬 코드를 얻게 될 것이다.

 

 

주요 내용

  • numpy, Cython, 프로파일러 활용하기
  • 파이썬의 시선으로 바라보는 컴퓨터 아키텍처 이해하기
  • CPU 시간과 메모리 사용량을 프로파일링하여 병목 지점 찾기
  • 상황에 맞는 컬렉션으로 효율적인 프로그램 작성하기
  • 행렬과 벡터 연산 가속하기
  • 네이티브 코드로 컴파일하기
  • 대량의 I/O와 연산 동시 수행하기
  • 원격 클러스터로 병렬 처리하기
  • 적은 메모리로 대규모 데이터 처리하기

 

사람마다 다르겠지만 

저는 데이터 분석을 하며 시간이 가장 많이 소비되는 부분은 

디버깅 즉, 틀린 부분 찾기를 수행할 때 입니다. 

 

디버깅에서 파이썬은 다른 언어들과 비교하여 굉장한 장점을 가지고 있습니다. 하지만 디버깅이 다른 언어에 비해 편하다는 장점을 가지는 대신 다른 언어에 비해 느립니다. 


파이썬의 한계라 생각하고 

그럼 이런 단점을 느림의 미학으로 치부하고 넘어가야 하느냐?

좋은 장비를 사용하면 어느정도 커버가 가능하겠지요..

그러기에는 주위 환경이 받쳐 주질 않습니다. 내 연봉 보다도 비싼 장비를 구입 할 순 없잖아요.


그럼 어찌 해야 할까?

결국 제가 공부해야 합니다. 

내가 작성한 코드에서 어느 부분이 느린지, 왜 느린지, 어떻게 수정하여 최적화하면 좋을지를 스스로 해보고 알아야 합니다. 소위 삽질이라 하죠. 삽질을 통해서 고성능을 뽑아낼 경험이 쌓여야 합니다.

 

이 책은 저자의 경험의 결과를 잘 설명하고 있습니다.

그것도 재밌는 예시들을 들며(줄리아 집합, 크롤링, 클러스터링, 베이지안 등) 설명하고 있습니다. 

어느 부분이 느린지, 왜 느린지를 따져가며 알려줍니다. 

그리고 코드도 오픈되어 있어서 따라하며 연습하기 좋습니다. 

 

1장에서 6장 까지는 파이썬의 여러 자료형에 대해 살펴봅니다. 

자료형에 따라 데이터가 어떻게 이동하고 사용 되는가를 설명하고 있어서 읽고 나서 출퇴근 시간에 생각해보기 좋습니다.

저는 이 부분을 읽으면서 내가 정말 아무것도 모르고 코드를 작성하였구나 라는 느낌을 받았습니다. 실질적인 도움이 많이 되었습니다. 

나머지 챕터는 파이썬에 사용할 수 있는 스킬들에 대해 설명하고 있습니다.

Cython, PyPy, Numpy, DAWG(Directed Acyclic Word Graph) 등을 설명하고 있어 참고하기 좋습니다.

 

하지만... 단점도 있습니다. 완벽한 비급서란 존재하지 않죠. 

 

책의 단점으로는 한권에 많은 내용이 담겨 있는 반면에 한 내용에 대해 깊지 않습니다. 

중간중간 음영처리가 되어있는 NOTE 부분이 생각할 거리를 던져주는데 좀 부족합니다.

어느 정도 맛을 보여준 후 '나머지는 너가 공부해봐' 느낌이 납니다. 뒷부분으로 갈 수록 그런 느낌이 많이 듭니다.

 

하지만 이건 제가 "파이썬 애송이" 이기 때문에 생기는 단점이라 생각합니다.

 

이제 한줄 평으로 정리하겠습니다.

만약 당신이

파이썬이라는 언어가 있다던데 한번 배워볼까? 라는 생각을 가지고 있다면 추천드리지 않습니다.

하지만 만약 당신이

파이썬 내가 써보니깐 편하고 좋은데 뭐가 부족하단 말야.. 라는 생각을 가지고 있다면 적극 추천드립니다.

 

 

감사합니다.

파이썬은 정말 느린가와 개선방법은? 이라는 질문을 했을때 어느정도의 답을 찾을수 있는 책인거 같습니다. 
 
저는 아직 파이썬을 현업에서 기본적인 시스템 프로그래밍 용도로만 사용하고 있기때문에 책안에 처음보는 파이썬 함수들을 알게되는 좋은 기회였습니다.  
내장 함수들에 대한 부차적인 설명이 없기때문에 저같이 초급 파이썬 프로그래머분들은 중간중간 검색을 하셔서 함수들의 동작방법들을 학습하셔야 예제 코드들을 이해 할수 있으리라 생각됩니다. 
중간중간 전혀 생소한 라이브러리들도 사용되는데 이부분은 일단 기억만 해두고 나중에  비슷한 문제를 해결할때 다시 참조하는 식으로 책을 봐야 좋은거 같습니다. 
 
예제파일들이 수학적인 계산으로 예제를 들었기때문에 처음에는 어리둥절할수 있습니다. 예제코드는 성능향상 현상을 보여주기위해 연산이 많은 작업을 임의로 만들었다 생각하시고 각각의 파일들의 출력을 어떻게 하는지 집중해서 보았습니다. 각각의 프로젝트마다 성능 병목 현상은 코드마다 다르므로 예제 코드와 같은 현상이 나리라는 보장은 없다고 생각합니다. 전체적인 그림을 잡고 나중에 어떻게 해결할까에 대한 참조가 되는거 같습니다. 
 
현재 일하는 환경에서 성능에 크게 좌지우지 되는 작업이 없어서 실제 적용하는 기회는 아직 없지만 나중에 파이썬의 생산성과 코드베이스를 유지하면서 코드의 속도를 업그레이드 싶을때 다시 참조할만한 책이라고 생각합니다. 
 
결론: 파이썬 초심자라면 이책은 아직 배울게 많지 않은 책이라고 생각합니다. 사실 중/고급자가 되어도 작업하고 있는 프로젝트에서 파이썬에 의한 성능 병목현상이 발생하지 않은 이상 이책을 볼일은 없지 않을까하는 사견을 덧붙입니다. 보통 성능이 필요한 곳은 책에서도 언급되어있다시피 C/C++ 로 해결하는 편인데 파이썬 코드베이스가 헤비한 환경이면 이 책을 고려해보면 아주 좋을거 같습니다. 
 
* 주의: windows 에서 예제를 실행하다보면 몇몇 패키지가 설치되지 않아서 (cython, scipy.. ) 갑작스런 삽질을 경험할수 있습니다. anaconda로 처음부터 설치하면 깔끔하게 해결됩니다. 


파이썬의 매운맛을 보여주겠어!!

라고 외치는듯 한 표지가 심상치 않다. 

 

 

 

나날이 파이썬의 인기가 늘고 있는 것 같다. 

서점을 가면 파이썬 기초 책들이 우후죽순으로 늘어나고 있는것만 봐도 알 수 있다. 

파이썬은 처음 프로그래밍을 접하는 사람들에게는 충분히 쉽고 충분히 재미를 느끼게 해줄만한 언어다.

이러한 파이썬에도 약점?은 있으니 바로 성능(Performance)부분이라고 말할 수 있다. 

 

<고성능 파이썬(High Performace Python)> 도서는 악점으로 손 꼽히는 성능에 대한 고민을 해결해주기 위한 책이다. 

이 책은 "성능상의 병목 지점을 파악"하고 "더 빠르고 확장성이 뛰어난 해법"을 위한 실용 지침을 제공한다.

 


* <경고!!> 도서에 대한 리뷰를 하기 전에 당부의 말을 적어본다. 

 

이 책은 특수목적을 가진 책으로 파이썬을 충분히 사용해봤고, 현재 파이썬을 활용한 시스템에서 성능문제로 고민하고 있는 독자를 대상으로 하고 있다. 만약, 파이썬의 기초정도의 수준 또는 성능문제 해결에 대한 고민이 없다면 이 책을 읽어나가는데 무척 힘든 여정이 될 것이라 생각한다. 

 

 

* 고성능 파이썬의 구성은 알차다!

 

고성능 파이썬은 총 12챕터로 구성되어 있으며 챕터1과 챕터2는 꼭 읽어 보길 추천한다. 


- [챕터1] 고성능을 위한 파이썬 이해하기 에서는 파이썬을 최적화하기 위해서는 결국 컴퓨터 하드웨어 연산에 대해서 알아야 한다고 강조하고 있다. 결코 성능을 논하려면 하드웨어 직접 제어까지도 논할 수 있어야 한다고 생각한다. 

- [챕터2] 프로파일링으로 병목지점 찾기에서는 시스템의 어느 부분이 느린지? 어디서 과도한 I/O작업이 발생되는지 측정한다. 

 

그 외 나머지 챕터들은 순차적으로 읽지 않고 자신이 필요한 부분을 먼저 읽어도 될 것 같다는 생각을 해본다. 

 


* 내용은 어려웠지만 몰입하게 되더라!


나는 [챕터 7] C 언어로 컴파일하기 부분이 제일 궁금했는데 다양한 라이브러리들을 제공하여 파이썬 코드를 C 코드로 변환하여 최적화를 하는 내용으로 핵심적으로 잘 요약되어 있던 느낌을 받았다. 

 


* 편집에 신경썼구나?


- 각 챕터 시작 시 "이 장에서 배울 내용"이라는 학습목표를 나열하여 독자가 어떤 내용이 나올지 마음의 준비를 할 수 있게 해서 좋았다. 

- 내용 중간중간 "NOTE"를 제공하여 중요 핵심포인트, 꿀팁 등을 제공하여 읽으면서 놓칠 수 있는 부분을 챙겨주는 듯한 느낌을 받았다.

 

 

정리하면, 파이썬 초심자가 보기에는 독사같은 책이 될 것 같으며 파이썬의 성능에 목말라 있는 사람이 보면 보약이 될 그런 책으로 정의하고 리뷰를 마친다.  

 

 

 

 

 

파이썬은 성능과 관련된 많은 기술적인 부분들을 추상화시켜서 꼭꼭 감춰둔 언어이다. 그래서 코딩을 하다보면 과연 지금 내가 이 개념을 제대로 쓰고 있는 것인지, 내 접근방식은 정말 효율적인 것인지 의문이 생길 때가 많다. 이 책은 그런 의문에 대해 좋은 해답이 되어주는 책이다.
 
이 책은 컴퓨터 시스템과 파이썬의 내부 구조를 살펴보는 것부터 시작하여, 파이썬의 느린 속도에 대한 해법으로 거론되는 Cython, numpy, PyPy같은 대체 기술들을 살펴보며 멀티 프로세싱과 동시성, 클러스터링까지 포괄하는 넓은 범위의 성능 이슈를 다룬다. 개인적으로 많은 기술들을 넓고 깊게(!) 살펴볼 수 있는 부분은 좋았지만, 파이썬에 대한 기초가 약한 나머지 이해의 벽에 부딪히는 부분들이 상당수 있었다. 또한, 개발머신으로 윈도우를 사용하는 터라 유닉스 기반의 시스템(맥, 리눅스) 기준으로 설명된 그림이나 예시는 조금 아쉬웠다.
 
좋았던 점을 꼽자면 번역이다. 이 책의 한글 번역은 매우 매끄럽다. 역자 김영근님은 현재 파이썬 소프트웨어 재단의 이사로 활동 중이며, 다른 역자인 오현석님은 전산학을 전공하고 호주에서 거주하는 전문 IT 개발자/번역가이다. 역자들은 파이썬 자체에 대한 경험과 지식이 풍부한 장점을 살려 책 전반적으로 부드럽고 잘 읽히는  문장을 구성했다. 특히 예제 소스코드와 설명을 원서와는 달리 모두 파이썬3로 변경하여 현재 기술 트렌드를 반영한 점은 매우 긍정적으로 생각된다.
 
파이썬은 구조적으로 성능이 느린 부분이 있지만, 다른 많은 장점을 통해 이 단점을 상쇄한다. 사용자가 파이썬 자체의 구조/성능상의 병목과 이를 피하는 방법을 명확하게 인지하고 있다면, 더 빠르고 확장성이 뛰어난 해법을 구하기가 쉬울 것이다. 국내외 서적을 통틀어도 이렇게 파이썬의 성능 향상에 집중된 노하우를 담고 있는 책은 드물기에, 잘 정리된 중고급서의 가치를 재발견할 수 있었던 경험이었다.
 

 

파이썬은 쉬운 접근성으로 인하여 생산성이 높은 언어의 대표로 많이 소개되는 편이다.

 

비 전공자들의 프로그래밍 입문으로도 많이 활용되며, 교육용으로도 많이 이용되고 있는 편이다. 

 

또한 코드가 간결하고 다양한 곳에서 활용하기 편하기 때문에 많이 사용하는 언어이다.

 

웹에서도 쓸수 있고 웹 이외에서도 사용할 수 있는 범용언어다.

 

들여쓰기를 활용하는 특별한 구조로 인해 코드를 읽기 쉽고 모양도 다른 언어에 비해서

덜 복잡한 편이다.

 

그러나 느리다고 정평이 나있는데, 예전 자료지만 참고했으면 좋겠다.

 

ruby, python, java, c 등의 여러 언어들의 성능 비교자료

http://www.timestretch.com/article/mandelbrot_fractal_benchmark

 

The Computer Language Benchmarks Game

http://benchmarksgame.alioth.debian.org/u64q/python.html

 

그리고 여러 블로그들을 참고 해보면,

스크립트 언어의 특성상 한줄한줄 작성하긴 편하기 떄문에 개발시간은 단축할 수 있지만,

그 한줄한줄 작성된 바이너리 코드를 해석하는 부분에서 시간을 잡아 먹는다고 한다.

 

C와 비교하면 대략적으로 100배 정도 차이 나는 듯 하다.

 

ps. 저렇게 오래걸리는 코드는 안짜니까 그냥 편한 Python 을 씁니다.^^;;

 

아무튼 이러한 여러가지 파이썬 이야기들이 있는데, 재미있는 미션 책이 나와서 선정하게 되었다.

 

바로 바로

 

파이썬에서는 감히 얘기할 수 없었던.

 

고.성.능!


바로 고성능 파이썬 이다.

 

고성능 파이썬
국내도서
저자 : 미샤 고렐릭(Micha Gorelick),이안 오스발트 / 오현석,김영근역
출판 : 한빛미디어 2016.08.10
상세보기

 

이 책은 감히 접근해본적도 없는 로우 레벨까지의 아키텍처를 찾아보며 최적화를 통해 성능을 높히고자 한다.

 

메모리를 어떻게 할당해야하는지, 그리고 가장 보편적으로 많이 쓰는 방법인

C언어로 컴파일하는 Cython 이라던지, pypy 라던지 일반적인 내용에 대해서는 이미 어느정도 접해본 부분이라 이해하기 쉬웠다.

 

결국 모든 처리의 기본은 IO 이기 때문에 그런 부분을 해소하기 위한 부분들이 많이 있었다.

 

단순 개발만 공부해보신 부분들은 좀 어려울수도 있다.

 

실제 클러스터 구축이라던지, 레디스 등의 활용은 언어만 공부하고자 하는 부분에서는 어려울 듯하지만,

이 책을 보는 구독자 층을 생각하면 크게 문제 되지 않을듯 하다.

 

책을 보면서 실제 이정도의 처리 성능이 필요한 개발이 있을까 싶긴 하지만,

파이썬으로도 이러한 고민들을 꾸준히 하고 있다는 데에 다시 한번 놀라움과 대단함을 표한다.

 

저를 비롯한 파이썬 쪼렙들에겐 엄청 어려울듯 하지만,

한번쯤은 경험해보고 싶은 부분이라서 좋은 경험이라고 생각한다.

파이썬을 사용하는 사람들에게 “왜 파이썬입니까?”라고 묻는다면, 십중팔구는 “쉬워서요”라고 대답합니다. 파이썬이 쉬울 수 있는 이유는, 프로그래머가 코드 이면에 숨겨져있는 복잡한 아키텍처들을 신경쓰지 않아도 어쨌든 ‘작동’하게 만들 수 있기 때문입니다. 

그런데 이 책은, 사뭇 다른 시각으로 파이썬에 접근합니다. 파이썬의 ‘쉬움’에만 만족하지말고, ‘잘 써보자'는 것이죠.

따라서 그냥 ‘쉬워서’ 파이썬을 처음 접하신 분들에게는, 이 책이 처음엔 다소 어려울 수 있습니다.


이 책은 어셈블리 레벨 혹은 그 이하의 아키텍처의 흐름까지 아우르며 파이썬의 성능을 최적화하는 일에 몰두합니다.

기존에 C언어나 어셈블리 언어에 대한 배경지식을 가지고 계신 분이라면 굉장히 흥미롭게 이해하실 수 있을 것입니다.

 

(만약 이 책을 통해 파이썬을 '처음' 접하시는 분들이라면, 우선 다른책을 먼저 보시는게 좋겠어요 ^^;)

13958036_1155366531203018_7861578638690331110_o.jpg

 

이 책은 먼저  파이썬의 성능 개선에 대해 논의하기 이전에, 기본적으로 숙지해야 할 컴퓨터 아키텍처에 대한 쉽고 가벼운 설명을 담고 있습니다. 컴퓨터공학에 대한 전반적인 배경지식이 없이 프로그래밍 관점으로만 업무를 진행해오신 분이라면 첫번째 챕터를 반드시 이해하실 필요가 있습니다. 이후 두 번째 장에서부터는, 병목 지점을 찾기위한 일명 '프로파일링'기법을 제시하며 본격적으로 성능향상을 위한 방법을 제시합니다. 컴퓨터 프로그래밍에서 ‘프로파일링(Profiling)’이란 프로그램의 시간 복잡도 및 공간(메모리) 복잡도, 함수 호출의 주기와 빈도등을 측정하여 프로그램의 성능을 분석하는 행위를 말합니다. 이번 챕터에서는 CPU, 메모리, 네트워크 대역폭, 디스크 I/O 등 다양한 측정기준을 제시하고, 이를 효율적으로 측정할 수 있는 도구를 알려줍니다.

 

IMG_9495.JPG

 

 

제 생각에 저자인 미샤 고렐릭(Micha Gorelick)과 이안 오스발트(Ian Ozsvald)는 틀림없이 완벽주의자적인 성격의 소유자인 것 같습니다. 성능 프로파일링을 수행함에 있어서, 실험에 영향을 미칠 수 있는 다른 요소들(BIOS 의 터보부스트, CPU 온도, 배터리 사용, 백그라운드 작업 등)을 꼼꼼하게 나열한 후에, 실험 결과와 관련된 조건만을 유지하고, 나머지 요소들은 통제해야 한다는 것을 강조하고 있습니다.(일명 ‘변인통제’) 이렇게 꼼꼼하게 체크하면 반드시 성능상의 문제점이나 병목지점을 발견할 수밖에 없겠지요?

 

Ch. 3~6은 파이썬의 여러가지 자료구조들을 설명합니다. 이 부분을 읽으며 저는 개인적으로 큰 충격에 빠졌습니다. 파이썬을 쓰고 있었지만, 제가 쓰던 것은 파이썬이 아니라 그저 다른 언어(저의 경우에는 C)에서 사용했던 스타일을 계속 고집하며 진정한 파이썬의 묘미를 모르고 있었던 것이지요. 아아.. 저는 무지몽매한 프로그래머였습니다. 이 단원이 지향하는 목표는 결국 최적화의 관건은 데이터가 CPU로 전달되는 시간을 줄이는 것과, CPU가 처리해야 할 일의 양 자체를 줄이는 것으로 요약할 수 있겠습니다.

 

몇년전에 출판된 파이썬 관련 도서들을 보면, 파이썬을 선택하지 말아야 할 단점으로 '동시성 제어, 멀티 스레딩, CPU 처리, 병렬 연산 등이 좋지 않다' 라고 지적하고 있습니다.(참고 : Python for Data Analysis: Why not python?) 그런데!! 그로부터 몇년사이에 해당 단점이 새빨간 거짓말이 되어버렸습니다. 파이썬이 자신의 단점을 스스로 극복했기 때문입니다. 이는 오픈소스 커뮤니티의 위대함 덕분이며 이러한 선순환 덕분에 파이썬은 지금도 진화하고 있는것이 아닐까 합니다. 이와 관련한 내용을 Ch. 8~11에서 접하실 수 있습니다.

 

저는 그동안 '최적화를 하기위해서는 가독성을 포기해야 한다'는 편견이 있었습니다. 그런데 이 책의 저자는 가독성에 대해서도 분명히 강조를 합니다. 본인이 작성한 코드를 나중에 다른 개발자가 고칠 수 있고, 어떻게 동작하고 언제 동작하지 않는지를 쉽게 파악할 수 있도록 하는 노력을 수행해야 할 것입니다. 

 

* 역자님들을 칭송하며

책을 읽으며 본문 하단에 실려있는 각주를 읽다보니, 역자이신 김영근님과 오현석님에 대한 경외감이 들었습니다. 그동안 다양한 전문서적을 읽어보면서 느꼈던 아쉬움은, 내용에 대한 이해없이 번역작업에만 치중하여 굉장히 난해하고 어색한 결과물이 나오는 사례를 많이 보았기 때문입니다. 그런데 이 책은 (약간의 과장을 보태서) 역자분들이 거의 새로운 책을 쓰셨다고 보아도 무방합니다. 왜냐하면 원서는 파이썬 2.7을 기준으로 집필되었으나, 한빛출판사에서 번역작업을 수행하며 출간할 때 전부 파이썬 3으로 수정하였기 때문입니다. 그 과정에서 모든 코드를 직접 작성하고 에러를 확인하며 파이썬 3으로 포팅작업을 완료하신 분들의 노고에 감사드립니다. 기술적인 부분 뿐만 아니라, 문화적 차이에서 기인한 다양한 미국식 아재개그(?)들에 대해 친절히 출처를 밝혀서 독자의 이해를 도와주셨고, 추가적으로 필요한 지식에 대해서 옮긴이의 설명과 참조링크를 제공해주셨습니다. 덕분에 참 좋은 책을 읽었던 것 같습니다. 

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

배송료 안내

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

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

닫기

리뷰쓰기

닫기
* 상품명 :
고성능 파이썬
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

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

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

오탈자 등록

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

도서 인증

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

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

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

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

닫기

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

자료실

최근 본 상품1