처음 시작하는 파이썬 - 파이썬 패키지를 활용한 모던 컴퓨팅 입문, 2판
빌 루바노빅 지음, 최길우 옮김 / 한빛미디어 / 2020년 8월
평점 :
장바구니담기


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



프로그래밍 언어를 처음 배운 것이 오래 전이어서, 처음에 프로그래밍을 배울 때 가장 필요한 것, 가장 어려운 것이 어떤 것이었는지 기억이 가물가물하다. 처음에 hello world를 출력하는 프로그램을 turbo c 를 이용해 출력하려 했을 때, 한글자 타이핑 실수로 인해 컴파일 에러가 나고 왜 안 나오는지 이해도 못해서 오랫동안 헤메었었던 같다. 조금씩 알게되면서 함수, 포인터, 제어 구문들을 배우고 자료구조에 알고리즘을 배워가며 프로그램을 조금씩 짜면서 컴파일 방식의 프로그램에 익숙해졌을 때 Python이라는 프로그램을 보고 정말 신세계 라고 생각했던 기억이 난다. 지금과 같이 유명세를 떨치던 때는 아니었지만, 오라일리의 마법사들이 만들어 내던 동물책을 살펴보다 이렇게 쉽게 프로그램을 짤 수 있는 언어가 있나 하는 생각을 했었는데, 이제는 그 언어가 전 세계를 주름잡고 있다.

오라일리에서는 오래전부터 Python 관련 책들이 많이 나왔는데, 오래전부터 한빛미디어에서 관련해서 번역서가 많이 나오고 있어 많은 도움을 받아왔었다. 이번에 리뷰를 하게 된 '처음 시작하는 파이썬' 역시 오라일리에서 나온 책에 대한 번역서이다. 이 책은 컴퓨터 언어를 잘 모르거나 Python 언어에 대해 잘 모르는 사용자를 타겟으로 쓰인 Python 입문서이다. 초심자들도 이해를 어렵지 않게 할 수 있도록 쉽게 설명하고 있고, 간단한 구문도 조금씩 다른 사용법들에 대한 여러 가지 예제를 제시해, 초심자로 하여금 더 쉽게 이해할 수 있도록 노력을 많이 한 것으로 보인다.

책의 구성은 크게 세 부분으로 나뉘어 있다. 언어의 기초를 상세하게 설명하는 첫번째 파트와 다양한 built-in 또는 인터넷에서 구할 수 있는 라이브러리들을 간단한 예제와 함께 설명하는 두번째 부분, 그리고 본문에서 설명하지 못한 부분을 따로 빼내어 설명해 둔 부록 부분으로 나뉜다. 그런 면에서 단순히 언어를 처음 배우는 사용자를 위한 입문서로서의 범위를 넘어 reference book으로서 활용할 수 있도록 많은 노력을 한 것으로 보인다. 그래서 파이썬 언어에 익숙하지 않은 분들이나 언어를 처음 배우는 분들 모두 이 책 한권으로 많은 것을 익힐 수 있을 것이라 생각한다. 또 비교적 최신 버전인 Python 3.7을 기준으로(역자분은 3.8을 기준으로 테스트를 마쳤다고 기술되어 있음) 작성되어 있어, 책의 내용을 따라해보는 데 있어 전혀 문제가 없는 것도 이 책을 고르는 데 있어 좋은 점이라 생각한다.

이 책을 두번째 파트까지 읽으면서 느낀 아쉬운 점은 다음과 같다. 첫번째로 초보자를 위한 튜토리얼이라 하기에는 너무 많은 내용을 담고 있는 듯하고, 그렇다고 그 내용들에 대해서 깊게 다루는 것도 아니라서 백과사전식 레퍼런스인가 라는 느낌이 들었다. 두번째로는 초보자에게 간단한 구문을 가지고 반복 설명을 한 것에 더해 조금 큰 크기의 프로그램을 여러가지 작성하면서 프로그램을 제대로 배워볼만한 작은 규모의 프로그램이 본문에 한 두 챕터 정도 있었다면 더 좋았을 것 같다는 아쉬움이다. 아무리 프로그래밍 언어가 좋아도, 프로그래밍 언어를 제대로 익히는 데, 조금씩 큰 프로그램을 작성하면서 소위말하는 시행착오가 필요한데 이 책은 그런 부분까지는 제시하고 있지 않는다. 또, 어떤 부분은 설명이 더 필요할 것 같은데 그냥 설명없이 다음으로 넘어가는 부분이 종종 눈에 띈다. 그런 부분에 대해서는 인터넷을 찾아보면 되겠지만 그래도 책이니 만큼 좀 아쉽기는 하다. 그리고 어색한 번역이 일부 눈에 띄고, 타이핑 에러가 눈에 띄는 곳이 종종있다. 별 것 아닐 수 있지만, 이런 부분들은 출간 전 좀 더 꼼꼼히 체크했었다면 하는 생각이 든다.


오라일리에서는 책이 버전이 올라가면서 계속 새로운 내용을 추가하고 기존 내용에 대해서 더 자세한 설명을 덧붙이은 방식으로 책이 출간되는 경향이 있는데, 세 번째 버번에서는 어떻게 나올지 기대를 하며 본 리뷰를 마친다.



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
고성능 파이썬 - 파이썬 성능 잠재력을 끌어내는 실용적인 개발 전략서, 2판
미샤 고렐릭.이안 오스발트 지음, 오현석 옮김 / 한빛미디어 / 2021년 5월
평점 :
장바구니담기



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


  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 부분이라던지, 일부 어색한 번역투가 있기는 하지만, 이 책을 읽고 이해할 수 있는 분들에게는 별 문제가 되지 않을 것으로 생각된다.

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


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
컨테이너 보안 - 컨테이너화된 응용 프로그램의 보안을 위한 개념, 이론, 대응법과 모범 관행까지
리즈 라이스 지음, 류광 옮김 / 한빛미디어 / 2021년 2월
평점 :
장바구니담기



  요즘 어디서나 들을 수 있는 컨테이너 환경에서 프로그램을 작성하면서, 처음에는 그냥 잘 동작하는 것에만 목적을 두었었지만, 시간이 가면서 VM 가상화 환경에서 작성하던 프로그램보다 좀 더 시스템적인 부분에 대해 신경을 써야만 한다는 것을 깨달아 가고 있다.

  인터넷에 써 있는 이야기들을 살펴보면, 마치 컨테이너 환경으로 옮겨가면 여러가지 장점이 많아서 이제는 가야한다는 말이 많지만, 막상 컨테이너 환경에서 프로그램을 작성하여, 서비스 중에 아무 문제없이 스케일링이 잘 되고, 롤링 업데이트에 이슈가 없는 그리고 보안적 측면에서도 안전하게 하려면, 이게 쉬운 문제가 아니라는 것을 깨닫게 된다.

  프로그램을 개발하는 단계에서는 바로 신경을 쓰지 못하는 것이 보안과 관련된 부분이다. 특히 컨테이너의 경우 기존 가상화 환경이나, 호스트 시스템에서 직접 서비스하는 것과는 다른 개념들이 있기 때문에, 차이를 상당히 잘 이해해야하고, 그러한 이해를 바탕으로 보안과 관련하여 어떤 부분을 신경써야할 지 고민을 해야한다.

  한빛미디어에서 출간된 '컨테이너 보안'을 리뷰하면서 읽어보았을 때, 저자의 생각 역시 내가 생각하는 바와 크게 다르지 않다고 생각되었다. 본 책은 크게 보면 기본 개념 파악과 컨테이너 환경에서의 보안 지침과 관련 예시로 나뉘어 있다. 전반부는 보안과 관련된 기본적인 개념 그리고 VM과 컨테이너간의 차이에 대해서 Linux 시스템을 기준으로 해서 설명한다. 그리고 중반부터는 컨테이너의 이미지 생성방법부터 시작하여 컨테이너에 들어가는 소프트웨어가 가질 수 있는 보안적인 취약점, 컨테이너 네트웍이 가질수 있는 보안 취약점 등 보안에 대한 지침, 예시 및 관련한 기본지식까지 두루 설명을 해 두고 있어, 컨테이너 환경에서 어떤 부분을 짚어야 하는 지를 명확하게 알려주고 있다.

  책이 두껍지 않아 내용이 많지 않다고 생각할 수 있지만, 컨테이너의 특성과 보안에 중점을 두어 설명을 하고 있어 그리 적은 내용이 아니라는 것을 읽다보면 알게 된다. 그리고 보조 설명이 필요한 부분은 인터넷 링크를 많이 기술해두어 관련 내용들을 찾아보면서 읽어보면, 많은 도움이 되리라 생각된다.

  이 책은 Linux 상에서 Docker와 K8s(Kubenenes)를 기준으로 설명을 하고 있기 때문에, 다른 환경에서의 예제를 바탕으로 공부하고 싶은 분들에게는 맞지 않을 수 있다. 보안이라는 개념이 환경에 따라 전혀 다르지 않기 때문에 참고용으로 읽어보기에는 문제가 없겠지만, 그렇지 않은 경우라면 이 책말고 다른 책을 선택해야할 것이다.

  주로 서비스 프로그램 개발 및 성능 튜닝, 문제 발생 및 업데이트 시 서비스의 무중단 이런 부분만 생각하며 일해왔었는데, 이 책을 읽으면서 컨테이너의 기본에 대해 좀 더 잘 이해할 수 있게 되어, 비슷한 경험을 가진 분들이나 컨테이너에서의 보안을 처음 공부해보려는 분들에게 좋은 지침서가 될 것으로 생각된다.


  이 책은 한빛미디어의 나는 리뷰어다 행사 일환으로 제공받아 리뷰한 것임을 밝힙니다. 


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
게임 엔진 블랙 북 : 울펜슈타인 3D 게임 엔진 블랙 북
파비앙 상글라르 지음, 박재호 옮김 / 한빛미디어 / 2020년 10월
평점 :
장바구니담기



예전에 Virtua Fighter라는 게임이 처음 나왔을 때, 3D 그래픽이 정말로 놀랍다 생각했었다. 그러면서 점점 더 게임 그래픽이 발전해 요즘 나오는 게임들을 보면, 이렇게 잘 구현할 수도 있구나 하는 것을 느낄 때가 많다. 그럴 때마다 드는 생각은, 이렇게 구현을 하려면 얼마나 많은 사람들이 게임 엔진을 수정하고, 그래픽 작업을 하며, 여러가지 버그를 잡기 위해 밤을 새며 작업을 했을까 이다. 사실, 게임뿐만 아니라 다른 분야에서도 프로그램 작성을 하고 나서 성능 최적화를 위해 많은 고민을 하며 코드를 수정하는 일을 한다. 정해진 성능을 맞추기 위해, 많은 아이디어를 도출해 어떻게든 요구사항을 맞추는 것이 정말 어려운 일이다. 이 책을 읽으면서, 당시 이드 소프트웨어 개발자들도 동일한 과정을 겪으며 많은 노력이 있었을 것이라는 생각이 들어, 재미없는 이야기로 리뷰를 시작했다.

이 책을 읽기 시작하면서, 오래전 구조는 모르지만 어떻게든 게임을 실행하기 위해, 640K밖에 되지 않던 메모리를 늘려보겠다고, batch 파일의 내용을 최소화 하거나 EMM386을 실행하여 메모리를 확보하려고 했던 생각이 났다. 당시에 리얼모드, 프로텍티드 모드와 같은 것도 몰랐고, 왜 프로그램이 메모리가 없다고 동작을 안하는 지도 모르고 무작정 여기저기 잡지를 보며, 친구들에게 물어가며 게임 실행하는 방법을 익혀서, 불법 소프트를 돌리곤 했었다. 이 책은 그런 시절에 주를 이루던 2D게임이 아닌 당시에 생소했던 3D 게임을 구현하기 위해 많은 노력을 한 내용들이 포함되어 있다.

이 책은 전반적으로, i386이라는 느린 CPU, 적은 메모리, 그리고 느린 그래픽 카드를 이용해 프로그램을 작성하였는 지에 대해 많은 양을 할애하고 있다. 당연한 이야기이겠지만, 그러기 위해서는 하드웨어에 대한 지식이 필수이고, 지금과 같은 최신 하드웨어와는 다른 오래전 구조에 대한 이해를 위해 여러가지 친절한 그림을 이용해 왜 이렇게 구현을 해야만 했는지 설명이 잘 되어 있다. BIOS 서비스를 이용하거나 video card의 동작 구조에 맞춰 화면을 그리는 방법, 부동 소수점 연산을 빠르게 처리하기 위한 트릭 등 느린 하드웨어를 극복하기 위한 방법 뿐만 아니라, 제한된 성능 상에서 ray tracing을 어떤 식으로 구현을 한다 던지 그에 대한 문제점을 극복하기 위한 또 다른 방안에 대해서도 다루고 있다.  또 이 책을 읽으면서 안 사실이지만, PC 뿐만 아니라 여러 콘솔 게임기와 아이폰에도 울펜슈타인이 포팅되었고, 포팅 시, 각 플랫폼에 따라 문제점을 어떤식으로 해결해 나갔는 지에 대해서도 책에서 언급을 하고 있다.

이 책을 읽으면서 흥미로웠던 또 다른 부분은, i386 시절 PC 하드웨어를 제어하는 방법을 어느 정도 함께 이해할 수 있는 부분이다. 그래픽 카드의 제어 뿐만이 아니라, ISR에 대한 내용도 그렇고, 애드립이나 사운드 블래스터와 같은 사운드 카드 제어에 대해서도 일부 다루고 있다. 키보드와 마우스 그리고  간단한 조이스틱 제어에 대해서도 다루고 있다. 굳이 OS의 가장 원시적인 부분들을 공부하기 위해 찾아보지 않는다면, 그 다지 볼 일이 없을 수 있는 원리들일 수 있지만, 울펜슈타인 3D 자체가 골동품 수준의 오래전 게임이다보니, 이런 부분들이 함께 다루어져 있고, 관련 내용들을 그림과 설명을 통해 볼 수 있어서, 더 관심을 가지고 읽어볼 수 있었다.

이 책은 독자에 따라, 다양한 의견이 있을 수 있을 것이라는 생각이 든다. 개발을 하면서 아이디어를 얻기 위한 분이라면, 이 책은 제한된 상황에 대해 어떻게 접근을 하면서 문제를 해결해 나가는 지에 대해 또 다른 아이디어를 줄 수 있으리라 생각이 든다. 하지만 코드를 잘 모르거나, 또 C/C++, 어셈블리(특히 이 책에 실려있는 코드는 16 bit Intel assembler가 많다)에 익숙치 않은 분들은 책의 재미가 떨어질 수 있다는 생각이 든다. 


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
웹어셈블리 인 액션 - C++ 코드와 엠스크립튼을 활용한 실전 웹어셈블리
제러드 갤런트 지음, 이일웅 옮김 / 한빛미디어 / 2020년 10월
평점 :
장바구니담기




리뷰에 앞서 본 리뷰는 한빛 출판 네트워크에서 진행한 ‘나는 리뷰어다’ 이벤트에서 제공받은 책으로 진행한 것을 밝힙니다.


요즘뿐만이 아니라 수년전부터 웹 기술의 발전은 정말 빠르다는 것을 체감하며 살고 있다. 특히 HTML5로 넘어오고 난 후 더더욱이다. 

다양한 기술들이 Javascript에 접목되고, 웹 브라우저가 하나의 플랫폼으로써 여러가지 기능을 하는 것을 볼 때는 참 놀라웠는데, 웹어셈블리가 나오는 것을 보고, 이런 부분까지도 웹 기술에 접목이 드는 구나 하는 생각이 들었다.


이번에 리뷰를 한 "웹어셈블리 인 액션" 은, 막연히 이런 것도 있구나 라고 생각해오던 웹어셈블리에 대해, 어떤 기술인지, 어떤 식으로 응용을 해 볼 수 있는 지 감을 잡을 수 있게 해주는 초보자를 위한 책이었다고 생각한다.


물론 초보자를 위한 책이기는 하지만, 이 책은 HTML, Javascript 기술과 C/C++에 대한 이해가 필요하다. 

C/C++의 경우 아주 기초적인 수준만 있으면 이해할 수 있다. Javascript 부분은 조금의 지식은 필요하다. HTML 역시 기초적인 수준 정도의 지식만 있으면 이 책을 이해할 수 있을 것이다. 


Manning 출판사의 "in Action" 시리즈가 대부분 그렇듯이, 이 책도 앞에서 이야기한 지식 정도만 있으면 하나씩 따라하면서 내용을 익히기에 무리가 없다. 내용을 아주 깊이 들어가지 않으면서도, 책에서 제시하는 예제를 이해할 정도의 내용에 대한 기반지식과 그림 그리고 코드 별 주석 등이 자세히 기술되어 있다. 


전체적인 구성은 웹어셈블리에 대한 최소한의 지식 및 이를 어떻게 구현하는 지에 설명 후 간단한 예제로 감을 잡고, 그리고 POS 예제를 이용해 좀 더 복잡한 상황에 대해 반복해서 실습을 한다. 그리고 나서 동적 링킹에 대해 다루며, 디버깅에 대해서 다루고 있다. 챕터 시작 및 예제마다 그림으로 어떤 내용을 어떻게 구현할 것이라는 것을 그림으로 알려주고 그에 대해 코드를 어떻게 구현하고 어떻게 컴파일을 하는지 하나하나 설명을 해 주고 있어, 어려움없이 전체 내용을 읽어나갈 수 있다. 하지만 독자에 따라서는 이 책이 어렵다고 느껴지는 분도 있을 수 있다. 이 책이 웹어셈블리라는 기술을 이용해 C/C++과 자바스크립트간 연동을 어떻게 할 수 있고 어떻게 디버깅을 해서 활용할 수 있다 설명하기 때문이다. 저자가 기본 지식에 대해 친절히 설명을 하고 있지만, 그럼에도 책의 내용이 이해가 되지 않는다면, 관련 백그라운드 지식을 먼저 공부하고 책을 보는 것도 좋을 것 같다. 개인적으로는 한빛미디어에서 출판되었던 백창우님 저 "유닉스 리눅스 프로그래밍"(지금은 절판되었다)이 이런 부분에 대한 설명이 잘 되어있다고 생각한다.


이 책의 단점은, 먼저 초보자를 위한 책이기 때문에, 복잡한 응용에 대한 예시를 제시하지는 않는다. 또 책에서 이런 부분에서 응용할 수 있다 라는 친절한 설명을 제시하지만, 독자에 따라서는 어떻게 응용해야 할 지 알 수 없기 때문에, 이 부분에 대해서는 다른 책들을 좀 더 살펴보아야 할 것이다. 그리고 책의 단점이라기 보다는 웹어셈블리가 성숙한 기술이 아니다보니 계속해서 바뀌는 부분이 있을 수 있어, 책에서 가이드한 것과 같이 예제를 따라서 수행해 볼 때 엠스크립튼 툴킷 버전을 잘 설정해서 시험을 해야 한다는 것도 불편한 점이다. 실제 프로젝트에 이를 시도해 보려면, 내가 사용하려는 툴킷이 지원하는 기능과 웹브라우저들이 어느정도 기능을 지원하는 지 등에 대해 꼼꼼한 체크가 필요할 것이다.


개발자의 숙명인지 모르겠지만, 현업에서 사용하는 기술에 대해서도 지속해서 새로운 기술 및 도메인 지식 익혀야 하고, 다른 분야의 지식도 꾸준히 따라잡기 위한 노력이 필요하다고 생각한다. 이러한 부분이 힘들다고 생각될 수도 있다. 하지만 서로 다른 방향이라 생각되었던 부분들을 연결하여 활용할 수 있는 기술이 생겨나서, 이를 익히고 어떻게하면 현업에 이러한 기술들을 응용해 볼 수 있을까 고민해 보는 것은 또 다른 재미라는 생각이 든다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo