객체지향 파이썬을 완전히 정복하겠다는 제목처럼 이 책은 이미 파이썬을 다뤄본 개발자에게 주는 완벽한 파이썬 고급 기능 가이드북이다. 특히 성능과 유지 보수 측면에서 높은 품질의 프로그램을 개발할 수 있도록 상세한 예제를 바탕으로 다양한 디자인 패턴과 고려 사항을 설명한다. 또한 객체지향에 초점을 두는 만큼 파이썬 내부 요소와 사용자 애플리케이션을 통합시켜주는 여러 파이썬 기능을 살펴본다. 블랙잭 시뮬레이션이라는 한 가지 문제를 계속해서 사용하므로 일관성 있고 비교적 쉽게 이해 할 수 있다. 단, 파이썬 3가 제공하는 새로운 기법 위주로 설명하므로, 파이썬 3에 익숙한 프로그래머여야 한다. 이 책은 다음과 같이 크게 세 가지 주제를 다룬다.
첫째, 사용자 애플리케이션에 파이썬의 기능을 통합시킬 수 있는 객체지향 프로그래밍 기법을 소개한다. 즉, 스페셜 메소드를 사용해 파이썬의 내장 기능과 매끄럽게 통합되는 사용자 클래스 정의를 생성한다. 객체 초기화와 거의 모든 클래스 정의에 쓰이는 기초 스페셜 메소드 외에도 스페셜 메소드를 여섯 가지 카테고리로 나눠 설명한다. 속성 접근과 프로퍼티에 쓰이는 스페셜 메소드, 매개변수에 적용할 함수를 구현하는 콜러블, 컬렉션의 기능을 구현하는 스페셜 메소드, 숫자 클래스의 산술 연산자와 비교 연산자를 구현하는 스페셜 메소드, 컨텍스트 매니저를 구현하는 스페셜 메소드, 그리고 반복자를 정의하는 스페셜 메소드다. 이 외에 추상 기반 클래스를 사용하는 방법과 횡단 관점으로서 장식자와 믹스인을 사용하는 방법도 알아본다.
둘째, 객체 지속성과 직렬화 기법을 소개한다. JSON, YAML, Pickle, CSV, XML 같은 형태로 객체를 직렬화하거나 셸브, SQLite 모듈을 사용해 파이썬 객체를 데이터베이스와 매핑해서 객체를 지속시키는 방법을 설명한다. RESTful 웹 서비스로 프로세스 간 파이썬 객체를 전송하는 법도 알아본다. 설정 파일 역시 객체 지속성의 한 형태이므로 설정 파일과 환경 변수, 커맨드 라인 인자를 통합하는 방법도 알아본다. 직렬화와 지속성에도 마찬가지로 객체지향 디자인이 존재한다. 즉, 애플리케이션의 핵심 처리 부와 데이터 표현 기능을 지속성과 분리하는 추상화를 통해 ‘관심사 분리’라는 원리를 적용할 수 있다. 이를 위한 고급 아키텍처 디자인 패턴을 제안한다.
셋째, 객체지향 프로그래밍 외에 소프트웨어의 품질을 향상시키는 추가적인 주제를 살펴본다. unittest와 doctest를 사용한 자동 단위 테스트, logging과 warnings 모듈을 사용한 디버깅, 유지 보수성을 높여주는 설명서 작성법을 소개한다. 뿐만 아니라 통합 가능한 프로그램 컴포넌트를 생성해주는 명령 디자인 패턴을 제안한다. 이러한 도구와 기법 역시 객체지향 파이썬 개발의 매우 중요한 요소다.
위와 같은 파이썬의 고급 기능과 이 책에 나오는 다양하고 상세한 예제를 활용하면 강력한 실 서비스 애플리케이션을 개발할 수 있다. 저자가 강조했듯이 단 하나의 완벽한 솔루션은 존재하지 않는다. 어떻게 활용하느냐와 어떤 부분에 가치를 두느냐에 따라 프로그램의 품질이 좌우된다. 핵심은 기본 원리와 개념을 파악하고 도구의 사용에 익숙해지는 것이다. 마지막 장을 덮었을 때 객체지향 파이썬에 대한 높은 이해와 자신감이 생기길 바란다.
훌륭한 애플리케이션은 훌륭한 디자인으로부터 시작된다. 하나의 예술 작품처럼 개발도 뼈대를 세우고 살을 붙여 가는 과정을 거친다. 개발자가 첫 번째로 해야 할 일은 여러 디자인 대안을 수립하고 그중 무엇이 더 나은지 평가하는 것이다. 이 단계를 생략하면 허점투성이에다 손대기도 어려운 결과물이 나온다.
이 책은 강력한 파이썬 프로그램을 개발하는 데 꼭 필요한 객체지향 디자인 패턴을 소개한다. 파이썬이 제공하는 다양한 객체지향 요소를 적재적소에 활용하도록 돕고, 디자인 대안 간 성능도 비교해 본다. 어떤 문제를 해결하느냐에 따라 올바른 디자인의 정의도 달라지므로 문제에 적합한 디자인을 어떻게 가려내는지도 알려준다.
1부에서는 객체지향 프로그래밍 기법을 비롯해 스페셜 메서드로 파이썬 내장 클래스를 활용하는 방법을 다룬다. 초기화, 속성, 추상 기반 클래스, 컨텍스트, 컨테이너, 수, 장식자 등 파이썬의 기본적인 객체지향 요소를 하나씩 설명한다. 2부에서는 저장소에 객체를 지속시키는 방법을 다룬다. JSON, shelve, ORM 등으로 파일이나 데이터베이스에 다양한 형태의 객체를 지속시켜본다. 3부에서는 객체지향 방식으로 테스트하고 디버깅하는 방법을 소개하고 SOLID 디자인 원칙을 살펴본다.
1판과 달라진 점은 크게 두 가지다. 첫째, 전반적으로 예제가 더 풍부하고 자연스러워 실전에 활용하기 쉬워졌다. 둘째, SOLID 디자인을 소개하는 15장 '디자인 원칙과 패턴' 장이 새롭게 추가됐다. 좋은 디자인을 고르려면 항상 정해진 디자인 원칙을 고수해야 한다는 점에서 1판을 읽었더라도 한 번쯤 들여다볼 만하다.
이 책은 디자인 패턴을 다루는 책도, 그렇다고 객체지향 프로그래밍을 다루는 책도 아니다. 그보다 활용이나 응용, 심화와 같은 단어가 어울린다. 평범한 프로그래머에서 탁월한 프로그래머로 거듭나고 싶은 열정적인 개발자에게 좋은 디딤돌이 돼 줄 것이다.
자료 구조와 알고리즘은 어떤 컴퓨터 공학 교육과정에서든 가장 기본적으로 다루는 과목입니다. 하지만 기초를 쌓는 과정임에도 불구하고 처음 접하는 학생은 누구나 당혹스러움을 감추지 못하죠. 생소한 용어, 난해한 개념, 아무리 응용과학이라지만 수학도 아니고 과학도 아닌 것처럼 보이는 아리송한 내용이 끝없이 반복되거든요. 무엇을 위해 무엇을 배우고 있는가를 모르는 채 다 배웠다고 생각하며 한 학기가 끝납니다.
이렇게 되면 실제 개발과 이론 간 큰 공백이 생깁니다. 어렵게 배운 내용을 실용적으로 써보지도 못할뿐더러 다른 사람이 작성한 코드를 이해하고 분석하는 데도 한계가 있습니다. 훌륭한 프로그래머가 되려면 문법과 API만 꿰뚫어서는 부족하죠. 어떤 운영 체제에서 어떤 프로그래밍 언어를 사용하든 좋은 프로그램은 항상 적절한 자료 구조와 효율적인 알고리즘을 바탕으로 합니다. 필요할 때마다 관련 책이나 웹 페이지만 뒤적여서는 능력을 향상하기 어렵습니다.
이 책의 저자가 밝혔듯이 자료 구조와 알고리즘은 결코 어렵지 않습니다. 얼마든지 재밌고 이해하기 쉽게 설명될 수 있습니다. 복잡한 수학 개념이 아니라 이미 알고 있는 지식과 자세한 예제면 충분합니다. 이 책은 비전공자도 쉽게 따라갈 수 있는 설명과 구성으로 핵심 개념을 소개합니다. 또한, 자료 구조와 알고리즘 지식을 실제 개발에 적용해서 더욱 효과적이고 간결한 코드를 작성할 수 있도록 도와줍니다. 초심자라면 심화 과정을 듣기 전에 기초를 다지기 좋고, 숙련된 개발자라도 가볍게 되새기기 좋은 책입니다.
자료 구조와 알고리즘은 모든 컴퓨터 공학 교육과정에서 가장 기본적으로 다루는 과목입니다. 하지만 기초를 쌓는 단계임에도 처음 접하는 학생은 누구나 당혹스러움을 감추지 못합니다. 생소한 용어와 난해한 개념, 아리송한 기호 속에서 헤매다가 무엇을 위해 무엇을 배우고 있는지 모르는 채 한 학기가 끝납니다.
이렇게 되면 실제 개발과 이론 간 큰 공백이 생깁니다. 어렵게 배운 내용을 실용적으로 써보지도 못할뿐더러 다른 사람이 작성한 코드를 이해하고 분석하는 데도 한계가 있습니다. 훌륭한 프로그래머가 되려면 문법과 API만 꿰뚫어서는 부족합니다. 어떤 운영 체제에서 어떤 프로그래밍 언어를 사용하든 좋은 프로그램은 항상 적절한 자료 구조와 효율적인 알고리즘을 바탕으로 합니다. 필요할 때마다 관련 책이나 웹 페이지만 뒤적여서는 실력을 쌓기 어렵습니다.
이 책의 저자가 밝혔듯이 자료 구조와 알고리즘은 전혀 어렵지 않습니다. 이 책처럼 얼마든지 재미있고 이해하기 쉽게 설명될 수 있습니다. 복잡한 수학 개념이 아니라 이미 알고 있는 지식과 자세한 예제면 충분합니다. 이 책은 비전공자도 쉽게 따라갈 수 있는 설명과 구성으로 핵심 개념을 소개합니다.
특히 개정판에서는 매 장에 연습 문제를 덧붙여 실제 문제를 해결해 보는 기회를 제공합니다. 더불어 널리 알려진 문제에 빅 오 카테고리를 적용해 보고, 1판보다 더욱 다양한 문제를 활용해 재귀적으로 작성하는 법을 단계적으로 설명합니다. 이 밖에도 동적 프로그래밍과 힙/트라이, 코드 최적화 기법까지 그 범위를 넓혔습니다.
이 책은 자료 구조와 알고리즘을 실제 개발에 적용해서 더욱더 효과적이고 간결한 코드를 작성할 수 있도록 도와줍니다. 초심자라면 심화 과정을 듣기 전에 기초를 다지기 좋고, 숙련된 개발자라면 가볍게 되새기기 좋은 책입니다. 목차를 한 번 읽어보세요. 그리고 흥미가 생기는 페이지로 가보세요. “누구나” 이해할 수 있습니다.
언어의 기초를 모두 익혔더라도 전문가로 가는 길은 험난합니다. 모든 언어가 그렇듯 자바를 처음 접하면 일단 타입과 연산자, 조건문, 반복문 등 언어의 기본 재료를 배웁니다. 이 정도의 지식을 갖춘 학생들에게 간단한 알고리즘 구현을 시켜보면 조금씩 다른 결과물을 냅니다. 매우 미미한 차이죠. 하지만 시간이 흐르면서 어떤 코드를 접하고 어떤 과정을 따랐는가에 따라 차이가 점점 벌어집니다.
코딩을 잘하려면 어떡해야 할까요? 코딩 기술은 경험으로 쌓입니다. 즉 실수를 저지르고 고쳐가면서 향상됩니다. 다만 코딩의 세계는 생각보다 넓어 혼자 힘으로는 역부족이고 다른 이의 경험을 밑바탕 삼아야 즉 모범 사례를 많이 보아야 큰 효과를 거둘 수 있습니다. 프로그래밍 초보자는 훌륭한 코드를 구분해내는 시야를 아직 갖지 못한 상태입니다. 이 책을 통해 다른 이의 경험을 빌려와야 하는 이유입니다.
이 책에서는 직접 가르쳐본 선생님의 입장에서 학생들이 자주 범하는 여러 실수를 카테고리별로 분류한 후 실수를 명확히 정의하고 해법을 제시합니다. 전후 코드 조각을 제공해 무엇이 잘못되었고 어떻게 바꾸었는지 자세히 설명합니다. 각 장의 소제목만 보아도 '~하기', '~하지 않기', '~ 피하기', '~ 사용하기' 등 한 눈에 보아도 선배가 조언해주는 느낌이 들죠. 실전에 바로 사용함으로써
코드 품질을 높여줄 만한 모범 사례로 가득합니다.
코딩 기술은 체득해야 하는 다양한 요구 사항을 말합니다. 체득이란 몸소 겪어야만 의미를 깊이 이해하고 스스로 해볼 수 있다는 뜻입니다. 그런 면에서 개념을 설명하고 예시를 드는 전형적인 방식에서 벗어나 하나의 주제별로 훌륭한 코드와 형편없는 코드를 비교해가며 조언하는 저자의 방식은 매우 효과적입니다. 게다가 서로 독립적이어서 꼭 차례대로 읽지 않아도 되고요.
내가 잘하고 있는 걸까, 내가 작성한 코드는 과연 품질이 좋은 걸까 문득 의심이 될 때마다 이 책을 친구처럼 옆에 두고 읽어보세요. 관련된 장을 펼쳐 하나씩 점검해보세요. 주석이나 명명에서 기본적인 관례를 잘 따르고 있는지, 흔히 저지르는 실수는 없는지, 더 최적화할 방법은 없는지, 테스트는 잘 이루어지고 있는지, 객체 디자인은 적절했는지 등을 말이죠. 이런 과정이 쌓이고 쌓여 일관되고 훌륭한 코드 작성으로 이어집니다.
프로그래밍 언어는 문법을 익힌 다음 실전에 쓰일 만한 코드를 작성해봐야 실력을 키울 수 있습니다. 실전 코드를 작성해보면서 깊이 있는 내용을 배워야 합니다. <코딩 개념 잡는 자바 코딩 문제집>은 최신 자바 기능을 활용해 실전 문제 269개를 풀어보면서 자바 코딩 실력을 한층 높일 기회를 제공합니다. 데이터 처리와 입출력을 비롯해 객체 불변성, 리플렉션, 함수형 프로그래밍, 동시성, 옵셔널 같은 고급 기능까지 한 권에 모두 아우릅니다. 더불어 자칫 수박 겉핥기가 되지 않도록 실용적인 예제 코드로 간결하게 설명합니다.
이 책은 크게는 개념 단위로, 작게는 문제 단위로 자바를 소개합니다. 1995년에 공개된 자바는 오늘날엔 아주 복잡한 기능을 갖춘 자바 생태계로 진화했습니다. 이 방대한 자바 생태계를 이 책은 13개의 장으로 나눈 후, 한눈에 파악하기 쉽도록 매 장의 첫 번째 절에서 어떤 문제를 다룰지 요약해 놓았습니다. 자바 개발자에게 실질적으로 유용한 개념과 API들이 마치 백과사전처럼 예제와 함께 주제별로 수록하여 업무상 필요하거나 실력을 늘리고 싶은 부분만 추려서 찾아보기 좋습니다.
문제가 매우 많은데다 자바가 제공하는 기능을 폭넓게 소개하므로 꼭 끝까지 차례대로 읽겠다는 무거운 다짐은 내려놓으세요. 구성이 독립적이니 리프레시가 필요할 때 한두 장씩 훑어보아도 좋습니다. 문제 하나하나는 결코 이해하기 어렵지 않습니다. 아주 쉽게 핵심만 강조하여 설명하고 이를 활용할 수 있도록 안내합니다.
이 책은 문제뿐 아니라 그 해법 또한 다양하게 제시합니다. 자바 버전별로 다르게 문제를 해결하기도 하고 함수형 해법도 적용해봅니다. 익숙한 API가 뜻밖의 방식으로 쓰이고, 아주 생소한 API가 등장하기도 합니다. 바꿔 말해 이미 해결법을 아는 문제라도 새로운 기능으로 더 간결하게 해결하는 법을 배울 수 있습니다. 중급 이상의 개발자라면 문제의 해법을 읽기 전에 스스로 코드를 작성해보세요. 최신 API 문서도 살펴보고 오류도 해결해보세요. 더 나은 해법을 모색하고 다른 개발자의 코드와 비교해 나가는 과정도 코딩의 일부입니다.
<코딩 개념 잡는 자바 코딩 문제집>은 단순히 문제를 나열하는 데 그치지 않고 어떤 문제가 주어지든 올바른 해법을 고안할 수 있도록, 혹은 최소한 그 시작점을 찾아낼 수 있도록 돕습니다. 같은 형식으로 반복되는 문제를 통해 독자는 단련될 수 있습니다. 효과를 극대화하려면 예제를 직접 실습하여 자신의 것으로 만드세요. 간결하면서도 명확한 설명으로 독자가 지치지 않게끔 배려하는 저자의 정성을 문득문득 느낄 수 있을 것입니다.
이라는 원제답게 프로그래밍 기초를 실제 개발에 바로 적용할 수 있도록 구성한 책입니다. 기초 개념을 나열하는 딱딱한 방식에서 벗어나 바로 사용할 수 있는 코드로 실제 꼭 필요한 주제만을 골라 설명하고 프로그래밍 입문자가 가장 편하게 느끼는 언어 중 하나인 파이썬을 사용해 가능한 한 쉽고 재밌게 개념을 풀어놓습니다. 특히 프로그래밍을 하며 겪을 법한 크고 작은 문제를 여러 사례와 함께 제시하니 더욱 실용적이죠.
이 책은 핵심적인 프로그래밍 주제를 빠짐없이 망라하고 있는데요. 먼저 데이터 타입과 실행 흐름 제어, 코드 구성, 테스트, 알고리즘 같은 기초 내용을 소개합니다. 뒤이어 객체와 클래스, 캡슐화, 상속 같은 객체 지향 개념과 데이터베이스, 그래픽 사용자 인터페이스를 소개합니다. 앞서 말했듯이 단순히 개념 설명에 그치지 않고 구체적인 예제와 다양한 사례, 발생 가능한 오류를 함께 설명합니다.
무엇보다 인상적인 부분은 프로그램 작성과 실행을 메모리 모델을 통해 시각적으로 설명하는 점입니다. 프로그래밍을 처음 시작할 때 코드도 물론 아주 생소하지만 내부 동작은 훨씬 더 모호합니다. 저자의 설명을 따라가다 보면 컴퓨터 내부에서 데이터가 어떻게 저장되고 어떻게 연산되는지 명쾌하게 이해됩니다. 각 장을 마무리할 때마다 풀어보는 연습문제도 배운 내용을 정리하고 응용하는 데 아주 요긴합니다.
이 책에는 "컴퓨팅 사고"라는 말이 나옵니다. 프로그래밍이란 간단히 말해 기존 연산을 사용해 새로운 연산을 정의하고 여러 연산을 조합해 의미 있는 작업을 수행하는 과정입니다. 다르게 표현하면 복잡한 문제를 간단한 문제로 분해하고 다시 조립하는 과정입니다. 이때 필요한 능력이 바로 체계적으로 추상화해서 사고하는 컴퓨팅 사고입니다. 저자는 컴퓨팅 사고라는 관점에서 문제를 풀고 애플리케이션을 생성하는 법을 가르칩니다.
이 책을 끝까지 완주했다면 기본적인 프로그래밍 개념은 확립한 셈입니다. 물론 코드를 직접 타이핑하고 실행해 보지 않고서야 절대 프로그래밍은 할 수 없습니다. 책에 언급된 여러 조언과 팁을 가벼이 여기지 말고 충실히 따른다면 컴퓨터 공학 전공자든 비전공자든 누구나 어렵지 않게 훌륭한 프로그램을 개발할 수 있을 거예요.
프로그래밍 언어는 끝을 모르고 진화한다. 특히 C++처럼 거대한 언어는 그 속도와 규모를 따라잡기가 결코 쉽지 않다. 바쁜 일상 속에서 프로그래머는 새로 나온 버전과 기능을 익히느라 늘 고달프다. 이러한 고민을 들어주기라도 하듯이 C++의 창시자 비야네 스트롭스트룹은 이 책을 통해 변화하는 C++ 버전 속에서 어떤 점을 꼭 알고 넘어가야 하는지 간결하고 정확하게 짚어준다. 이 책 한 권으로 C++을 완벽히 숙달할 순 없어도 최소한 어디서부터 시작해야 하는지 알 수 있다. 위에 인용한 비야네 스트롭스트룹의 말처럼 간단하게 끝낼 일을 굳이 어렵게 돌아갈 필요는 없다.
저자는 단순히 기능을 나열하는 데서 멈추지 않는다. 여러 가지 개념을 연계하고, 어떤 상황에서 어떤 요소가 어떻게 쓰이는지 이해하기 쉬운 예제를 들어 설명한다. 적재적소에서 알맞은 표준 라이브러리를 소개하고, 참고하면 좋을 내용도 빠뜨리지 않는다. 독자라면 아무리 좋은 기능이라도 어떻게 조합하고 활용하느냐가 프로그램의 품질을 좌우한다는 사실을 익히 알고 있을 것이다. 훌륭한 유스 케이스를 많이 알아둘수록 코드 수준은 높아지기 마련이니 저자가 고심해 만든 예제를 가볍게 지나치지 말자.
C++는 C++20이 등장하며 큰 변화를 맞이했다. 무엇보다 사용자의 의도를 보다 직관적으로 반영할 수 있는 여러 요소가 대거 추가됐다. 모듈, 콘셉트, 코루틴이 대표적이다. 저자는 C++를 구성하는 기본 요소인 타입, 클래스, 연산, 템플릿, 컨테이너, 예외, 입출력 등을 각 장의 주제로 삼아 기초를 탄탄히 세움과 동시에 C++에 새로 추가된 요소들을 제네릭 프로그래밍과 협력적 멀티태스킹 같은 최신 개발 방식과 맞물려 설명한다. C++20을 기준으로 삼았으나 C++23에 담길 내용도 넌지시 내비친다. C++ 위원회에서 활동했던 경험을 바탕으로 현재 진행 중인 프로젝트를 간간이 언급하며 앞으로를 대비할 수 있게 돕는다.
시간이 촉박하다면 일단 차례부터 읽어보자. 한눈에 쉽게 들어오도록 구성된 차례가 원하는 방향과 목적지로 안내할 것이다. 저자가 아무 까닭 없이 제목을 『Tour of C++』로 지었을 리 없다. C++라는 세계를 즐겁게 여행하며 좀 더 쉽게 C++를 익히는 계기가 되기를 바란다.
아무리 뛰어난 IT 기술이라 하더라도 보안상의 취약점이 존재한다면 결코 실제 서비스 환경에 쓰일 수 없다. ’보안’은 기술이 서비스로 이어지는 마지막 관문이다. 빅데이터와 하둡이 최근 많은 조직과 기업의 뜨거운 관심을 받고 있는 만큼 하둡 보안에 대한 필요성은 이제 그 어느 때보다 절실해졌다. 분산시스템 기반의 하둡이 실제 기업 환경에서 성공을 거두려면 대용량의 데이터를 좀더 안전하게 관리하고 처리할 수 있다는 신뢰가 우선시되어야 한다.
이러한 흐름에 발맞춰 하둡 관련 오픈소스 커뮤니티에서는 하둡이 지닌 보안상의 결함을 찾아내어 계속해서 기능을 추가하고 있고, 아파치 녹스 게이트웨이처럼 하둡 클러스터와 기업망 간의 보안된 접근을 관리하는 프로젝트도 진행 중이다. 또한 제타셋(Zettaset)과 클라우데라(Cloudera), 호튼웍스(Hottonworks), 맵알(MapR)과 같은 개발업체도 보안이 강화된 하둡 배포판을 출시하고 있다.
이 책은 현재 하둡 보안을 위해 나와 있는 기술과 패키지를 총망라하면서 하둡 에코시스템과 기업 보안 시스템을 결합하는 전체적인 아키텍처를 제시한다. 기존의 하둡 관련 기술서들이 빅데이터 플랫폼 보안에 대해 하나의 장이나 혹은 작은 주제 정도로 다루고 있는 반면, 이 책은 훨씬 상세하고 체계적으로 관련 기술과 단계별 적용 방법, 전반적인 구성을 설명한다. 빅데이터를 담당하는 실무자나 설계자는 저자의 친절한 가이드를 통해 한결 더 쉽고 편리하게 하둡 보안을 강화할 수 있다.
나도 하둡을 이용해 빅데이터를 분석하고 의미 있는 정보를 추출하는 작업을 수행하지만 그동안 보안에 대해서는 크게 신경을 쓰지 않았다. 하지만 이번을 계기로 하둡 에코시스템의 보안에 대한 경각심이 생겼고, 어떤 접근 방식과 절차를 통해서 보안을 유지해야 하는지 한층 더 깊게 이해하게 되었다.
다수의 기업체가 이른바 빅데이터 세상에서 하둡을 도입하고 적용하고 있는 지금, 하둡 보안을 다룬 이 책이 성공적인 길잡이가 되어주리라 믿는다. - 옮긴이의 말
오늘날은 바야흐로 빅데이터의 세상이다. 빅데이터가 일상에 깊숙이 스며들면서 대용량 분산 처리를 넘어 고성능 컴퓨팅과 병렬 컴퓨팅의 필요성도 자연히 커졌다. 과거 포트란이 주도하던 이 분야에 새롭게 등장한 강자가 바로 IPython이다.
IPython은 Interactive Python의 약자로 기존의 배치 처리 방식이 아닌 시스템과의 인터랙션을 강조한 고성능 컴퓨팅 언어다. IPython의 개발자인 페르난도 페레즈는 전통적인 파이썬에서 벗어나 명령행에서 인터랙티브하게 수행될 수 있는 노트북 형식의 인터페이스를 만들고자 했다. 그 결과 파이썬의 여러 강점과 객체지향 패러다임을 포함하는 IPython이 탄생했다.
이 책은 고성능 병렬 컴퓨팅의 관점에서 IPython이 갖는 고유한 특징을 면밀히 소개하고, 실제 프로젝트에 적용할 수 있도록 다양한 예제로 패키지와 라이브러리를 설명한다. 독자가 이해해야 할 핵심은 크게 세 가지다.
첫째, 고성능 병렬 컴퓨팅을 가능케 하는 IPython의 내부 병렬 아키텍처와 메시징 시스템이다. IPython의 병렬 아키텍처는 기본적으로 엔진, 컨트롤러, 허브, 스케줄러라는 네 개의 컴포넌트로 구성되는데, 실제 병렬 잡을 수행하는 엔진과 이를 관리하는 컨트롤러 (허브와 스케줄러를 포함)가 어떻게 동작하는지 보여준다. 또한 ipyparallel 라이브러리로 다양한 유형의 병렬 구조를 지원하는 방식도 설명한다. 더불어 병렬 프로세스 간 커뮤니케이션을 지원하는 대표적인 메시징 시스템인 제로MQ와 MPI도 살펴본다. 특히 제로MQ가 IPython의 내부 메시징 프레임워크로서 어떻게 쓰이고 있는지 예제와 함께 알아본다.
둘째, 앞서 설명한 병렬 아키텍처를 쉽고 효율적으로 다룰 수 있는 IPython의 내부 라이브러리를 알 수 있다. IPython이 제공하는 API를 사용하면 병렬 계산 결과에 접근하고 조작하거나 성능 프로파일링 등을 수행할 수 있다. 이 중 비동기식 호출을 가능케 하는 AsyncResult, 잡을 제어하는 Client 클래스, 여러 엔진을 하나의 엔티티처럼 다룰 수 있는 DirectView, 스케줄러를 사용해 블로킹 없이 다수의 잡을 실행하는 LoadBalancedView를 중점적으로 살펴본다.
셋째, IPython을 더욱 풍부하게 사용할 수 있는 외부 도구와 언어를 다룬다. 이 책은 두 가지 목적으로 나눠 설명하는데, 먼저 복잡한 컴퓨팅을 지원하는 외부 언어와의 통합이다. 통계에 적합한 R, 수 계산에 특화된 옥타브, 빅데이터 분석에 유용한 하이 등을 논한다. 다음은 데이터 시각화를 위한 외부 도구와의 통합이다. 파이썬 기반의 2D 그래프 라이브러리인 matplotlib, 파이썬 대화형 시각화 라이브러리인 보케, 그리고 R 등을 예제 코드와 함께 다룬다.
이 밖에도 모든 개발 프로젝트의 기본인 테스트와 설명서도 빼놓지 않는다.
과학과 공학 분야에 걸쳐 고성능 컴퓨팅 자원을 반드시 필요로 하는 문제들이 점차 늘어나고 있다. 또한 높은 성능과 확장을 위해 클라우드와 같은 병렬 컴퓨팅에 점점 더 의존하고 있다. IPython은 병렬 컴퓨팅을 위한 새로운 아키텍처와 병렬 장비로의 강력하고 유연한 인터페이스를 제공한다. 이 책을 통해 고성능 병렬 컴퓨팅에 IPython을 적극적으로 활용해보고 IPython의 가치를 스스로 평가해보길 바란다.