전 세계적으로 안드로이드와 iOS가 스마트폰 운영체제를 양분하고 있는 상황에서, 유독 우리나라의 경우 안드로이드의 비중이 높다. 아마도 안드로이드 스마트폰 제조의 맹주인 삼성전자의 홈그라운드이기 때문일 것이다. 2015년 기준 구글 플레이 앱의 국가별 매출에서 우리나라는 일본, 미국에 이어 세계 3위를 차지했을 정도다. 알다시피 모바일 애플리케이션 매출의 대부분은 게임 매출이다.
C++를 이용해 모바일 애플리케이션을 개발할 때, 기존의 C++ 라이브러리를 재활용하고 싶거나 부분적으로 성능 향상을 위해 네이티브 기능을 사용하고 싶을 때 이용하는 것이 안드로이드 NDK(Native Development Kit)다. 사실 앱 중에서도 가장 성능에 민감한 앱이 바로 게임이다. 그런 측면에서 게임은 NDK의 활용도가 가장 빛날 수 있는 애플리케이션이지만, 아쉽게도 국내에서는 지금껏 NDK를 이용한 게임 개발 전문서의 출간이 전무한 실정이었다. 국내 서적과 번역서를 통틀어 일반적인 앱을 다루는 서적 몇 권만이 출간됐을 뿐이다. 아마도 유니티3D 같은 범용 게임 엔진의 대중화가 큰 원인일 수 있겠지만, 안드로이드 게임 매출에서 전 세계 3위의 위상을 차지하고 있는 국내 모바일 게임 개발 상황을 감안하면 아쉬운 부분이다. 늦은 감이 있지만, 이 책이 안드로이드 NDK 게임 개발 전문서의 갈증을 다소나마 채워주기를 기대한다.
이 책에는 게임 개발에서 NDK를 활용하는 핵심적인 부분, 즉 네트워크 접속, 파일시스템, 그래픽, 오디오 스트리밍, 크로스 플랫폼 UI, 입력 시스템 등이 망라되어 있다. 팩트출판사의 쿡북(Cookbook) 시리즈답게 이 책은 실전에서 바로 활용할 수 있는 70가지 이상의 실전적인 예제들을 담고 있다. 하나하나의 예제들을 살펴보면, 모두가 저자들의 풍부한 게임 개발 경험을 바탕으로 구성되어 있다는 점을 알 수 있다. 그리고 마지막에는 이전까지의 예제들을 통해 배운 기술들을 총동원하는 종합적인 예제로서 NDK를 활용해 매치3 게임과 그림 퍼즐 게임을 제작해본다.
이 책은 NDK를 이용한 게임 개발의 초석을 다루고 있으므로, NDK를 이용해 본격적이고 실전적인 게임 개발을 시작해보려는 독자들에게 적합하다. 이 책이 독자들의 안드로이드 게임 개발 기술을 향상시키는 좋은 기회를 제공하리라 기대한다.
아마 독자분들이 이 책을 읽고 있을 때쯤이면 이미 결과가 나왔겠지만, 최근 이세돌 9단과 구글의 인공지능 바둑 프로그램인 '알파고' 사이의 대결이 세간의 화제를 모으고 있다. 주요 신문의 논설 위원들을 포함해 입담 좋은 많은 사람들이 저마다 이 기념비적인 세기의 대결에 한마디씩 논평을 보태고 있다. 이런 논평들을 대략 요약해보면, 이번에는 이세돌 9단이 이기겠지만 인공지능이 인간 최고수를 능가하는 건 시간 문제일 뿐이라는 의견이 지배적이다.
1997년, IBM의 슈퍼컴퓨터 '딥 블루'가 당시 체스 부문 인간 최고수인 개리 카스파로프를 꺾어서 인공지능의 발전사에 한 획을 그었지만, 그때만 해도 체스에 비해 훨씬 경우의 수가 많은 바둑에서 인공지능이 인간 최고수에 필적하기까지는 상당히 오랜 시간이 걸리거나 사실상 거의 불가능하다고 여겨지던 분위기였다. 그러나 채 20년도 지나지 않아서, 폭발적인 발전을 이룬 기계는 예상을 훨씬 뛰어넘는 단 시간 내에 인간 최고수에 다시금 도전장을 던지게 된 것이다.
산업혁명은 근력을 바탕으로 하는 인간의 노동력을 기계가 대체할 수 있음을 보여준 인류 문명사의 전환점이었다. 그 이후로 기계는 발전을 거듭하면서 육체 노동력뿐만 아니라 정신 노동력 분야에서도 야금야금 인간의 일자리를 빼앗고 있다. 그래도 여태까지의 분위기는 근력을 사용하는 육체 노동이나 단순 반복적인 정신 노동 분야의 일자리만 위협할 뿐, 고도의 두뇌 활동이 필요한 분야의 일자리는 앞으로도 오랫동안 인간의 몫일 것이라는 막연한 낙관이 지배하고 있는 것 같다. 로봇이니 인공지능이 이런 것들은 SF 소설이나 영화에서 등장하는 호사가들의 흥미거리일 뿐 그것이 나의 일자리를 위협하지는 못할 것이라고 일반 대중들은 생각하고 있다.
하지만 우리들의 그런 낙관은 말 그대로 막연한 기대일 뿐일지도 모른다. 이 책은 앞으로도 오랫동안 인간의 몫일 것이라고 생각해왔던 고도의 두뇌 활동이 필요한 일자리들에 대한 알고리즘의 침략이 이미 진행 중인 현실이라는 점을 생생한 실화를 통해 보여준다. 월스트리트에서 남들보다 먼저 알고리즘을 활용해 거부가 된 인물, 대중가요의 히트 가능성을 판단해주는 알고리즘 덕분에 인생이 바뀐 뮤지션, 바흐나 모차르트 같은 전설적인 클래식 거장의 스타일로 새로운 곡을 창작할 수 있는 알고리즘을 만든 음악과 교수, 월스트리트의 알고리즘 경쟁에서 4/1000초의 시간적 우위를 점하기 위해 대륙을 횡단하는 통신망을 건설한 개척자, 인간에 필적할 수 있는 포커 알고리즘을 개발하려는 게임이론 전문가, 국제적 주요 정치 사건을 예측하는 알고리즘을 개발한 정치과학과 교수, MLB와 NBA 같은 프로스포츠 경기에서 유망주를 예측하는 알고리즘을 개발한 농구 분석가, 누군가의 생명이 달린 장기 기증 시스템을 최적화하기 위한 알고리즘, 실수 없이 약사보다 정확하게 약을 조제해주는 샌프란시스코의 봇, 환자 진료에 알고리즘을 활용함으로써 탁월한 치료 실적을 거두고 있는 메디컬 센터, 우주 비행사 후보자들이 사용하는 언어를 분석하는 알고리즘을 통해 적절한 후보자를 선발함으로써 인간에 의한 우주 비행 사고의 위험성을 줄이고 있는 NASA, 고객들의 전화 통화 내용을 분석하는 알고리즘을 개발해 고객 서비스 분야를 혁신하려는 스타트업,
우리나라에서도 이미 대중적으로 일상화된 페이스북에서 게시물을 골라주는 알고리즘을 개발한 데이터 분석가, 그리고 이런 알고리즘을 만들 수 있는 최고 두뇌를 확보하기 위한 월스트리와 실리콘밸리의 숨가쁜 대결에 이르기까지 생생한 이야기들이 이 책에서 펼쳐진다.
최근 국내에서도 앞서 말한 이세돌과 컴퓨터 인공지능의 대결, 거대 기업들의 본격적인 무인 자동차 개발 시도 등으로 인해 이러한 로봇, 인공지능, 알고리즘 등에 의한 인간 일자리의 감소가 심각한 문제로 인식되기 시작하는 것 같다. 정말로 이런 알고리즘에 의한 일자리의 감소가 먼 미래의 일이 아니라면, 각 개인에게도 심각한 문제일 뿐더러 역사상 인류라는 종이 마주치게 될 가장 심각한 도전이 될 것이다. 이 책은 이렇듯 상당히 심각한 주제를 다루고 있지만, 무엇보다 하나하나의 이야기가 그 자체로 매우 흥미롭기 때문에 재미있게 읽을 수 있다. 흥미로운 이야기 속에서 개인적으로나 사회적으로 깊이 생각해봐야 할 시사점을 던져줌으로써 재미와 진지함을 모두 갖춘 책이므로 일독을 적극 권한다.
PC 온라인 게임에서뿐만 아니라 최근에는 모바일 게임에서도 멀티플레이가 빠질 수 없는 요소가 됐다. 실시간 PVP나 파티플레이가 핵심적인 게임 모드로 등장하기 시작했으며, 실시간 멀티플레이를 지원하지 않더라도 비동기적인 방식으로 다른 유저와의 경쟁 또는 협력 플레이를 지원하지 않는 상용 게임은 찾아보기 어렵다. 아무리 뛰어난 AI라도 실제 사람을 상대하는 것만큼 지속적인 흥미를 불러일으킬 수는 없기 때문이다. 이와 같은 다른 유저와의 상호작용이라는 게임의 핵심 재미 요소 외에도 부분 유료화 게임에서는 해킹 방지 때문에 서버 사이드 구현이 부각될 수밖에 없는 상황이다. 클라이언트만으로 끊임없이 발전하는 해킹 기법에 대응하기는 원천적으로 불가능하기 때문에, 게임의 핵심 로직을 서버 사이드로 옮기는 것이 개발사들에는 매우 중요한 과제가 되고 있다.
이렇듯 모바일 게임에서도 네트워크와 서버 사이드 구현이 필수적인 기술로 부각된 지가 꽤 됐음에도 불구하고, 국내에서는 유니티나 모바일 환경에서 네트워크 게임 구현 기술을 전문적으로 다룬 서적은 전무한 실정이다.
이 책은 멀티플레이 모드와 해킹 방지를 위한 서버 사이드 구현에 어려움을 겪고 있는 일선의 유니티 개발자들에게 좋은 참고서적이 될 수 있으리라 생각한다.
이 책에서는 기본적인 네트워킹 구현 외에 개발 현장에서 응용할 수 있는 중요하고도 흥미로운 기법까지 다룬다. 우선, 유니티에 내장된 네트워킹 기능뿐만 아니라 포톤 네트워킹 같은 서드파티 네트워킹 미들웨어에 대해서도 다룬다. TCP/UDP 기술 외에도 펍넙 기반의 HTTP 기술을 이용하여 최근 거의 모든 게임에서 빠짐없이 등장하는 채팅 기능의 구현 기법을 보여준다.
또한 개체 보간과 클라이언트 사이드 예측을 통해 랙에 좀 더 매끄럽게 대처할 수 있는 게임을 구현하는 기법을 알려주고, 클라이언트 해킹에 대응하기 위한 서버 사이드 명중 탐지 기법을 알려준다.
이와 같은 기법들을 퐁 게임이나 간단한 RTS 게임과 같은 실전적 예제들을 통해 설명하기 때문에, 실전 프로젝트에 손쉽게 응용할 수 있다. 이 책이 독자들의 유니티 네트워크 게임에 실질적 도움이 되기를 기대한다.
모바일 게임 시장의 급성장으로 인해 기존 모바일 게임 개발자들뿐만 아니라, 새로운 개발자들도 모바일 게임 개발을 시작하고 있다. 현재 이들이 선택할 수 있는 가장 보편적인 개발 도구는 코코스2d-x나 유니티3D일 것이다. 한 때 코코스2d가 제법 사용됐으나, iOS와 안드로이드를 동시에 대응할 수 있다는 장점 때문에 코코스2d-x는 빠른 시간 안에 국내 2d 모바일 게임 개발의 실질적 표준이 됐다.
3D 게임이 시각적으로 인상적이지만, 실제로 구글플레이 스토어나 애플 앱스토어를 보면 상위권 게임은 상당수가 2D 게임이다. 모바일의 특성상 앞으로도 이런 2D 강세는 유지되리라고 생각한다.
물론 2D게임을 유니티3D로도 만들 수 있고, 유니티3D가 좀더 편리한 개발환경을 제공하는 것은 사실이지만, 코코스2d-x는 비교적 저수준의 접근을 제공하므로 개발자가 컨트롤할 수 있는 부분이 많아서 나름대로의 장점이 있으며, 이러한 이유로 상당 기간 동안 2D 게임을 만들 때 유효한 개발 도구가 될 것이다.
그러나 모바일 게임 시장 변화가 워낙 급격하게 일어나다 보니 현업에서 코코스2d-x에 대한 수요에 비해, 국내뿐 아니라 전 세계적으로도 코코스2d-x를 전문적으로 다루는 책들이 극히 드물어서, 새로운 시장 기회에 도전하려는 개발자들에게 많은 애로가 되어 왔다. 미국에도 코코스2d-x를 다루는 책이 드물었는데, 이 책은 외국에서도 몇 달 전에 출간된 따끈따끈한 신간으로 그간 출간된 코코스2d-x 도서 중에서 단연 가장 좋은 평가를 받고 있다.
무엇보다 이 책의 가장 큰 장점은 단계별로 실전적 예제를 통해 코코스2d-x의 활용법을 알기 쉽게 설명한다는 점이다. 예제로 다루는 5가지 게임들은 최근 국내외에서 인기를 끌고 있는 모바일 캐주얼 게임 개발에 필요한 핵심요소들을 군더더기 없이 잘 배울 수 있도록 구성되어 있다. 따라서, 독자들은 이 책의 예제들을 따라 하다 보면 크게 어렵지 않다는 느낌이 들면서도, 어느새 코코스2d-x 게임 개발의 핵심 요소들을 익히게 될 것이다.
참고로, 모바일 쪽이 워낙 기술 변화가 빨리 일어나다 보니, 원서가 출간된 지 불과 몇 개월밖에 지나지 않았는데, 그 사이 코코스2d-x가 몇 차례 버전업이 됐다. 원서는 2.0.4 버전을 기준으로 집필됐는데, 현재 안정화된 코코스2d-x의 최신 버전은 2.1.5다. 따라서, 예제 코드 일부가 제대로 동작하지 않을 수 있다. 이런 문제를 피하려면, 코코스2d-x 2.1.5 버전 기준으로 새로운 프로젝트를 생성한 다음, 이 책의 예제 프로젝트에서 게임 로직에 관련된 폴더의 내용물(예를 들어 resources 폴더와 src 폴더의 내용들)을 새로 만든 프로젝트로 옮기면 된다.
이 책이 코코스2d-x를 도구로 삼아 모바일 게임 시장에 도전하려는 개발자의 시작을 도와주는 좋은 길잡이가 되리라고 기대한다.
이 책의 원서인 『The C++ Programming Language』는 C++ 프로그래머들에게는 굳이 설명이 필요하지 않을 정도로 유명한 책이다. 무엇보다 C++ 언어의 창시자인 비야네 스트롭스트룹(Bjarne Stroustrup)이 직접 쓴 책으로서 이전까지 3판이 출시될 정도로 C++ 참고 도서의 결정판으로 자타가 공인하는 시리즈였다.
이 책의 이전 판인 3판의 경우 원서는 1997년에 출간됐고, 국내 번역서는 2005년에 출간됐다. 이 책의 3판은 1998년에 표준안이 발표된 ISO C++ 표준을 기반으로 쓰여졌으나 이후 2011년 ISO C++11 표준안이 공식 발표됐다. C++11 표준을 반영한 원서의 4판이 2013년 출간된 이후로 2014년부터 번역을 시작해서 2015년에 드디어 국내 번역판이 출간된 것이다. 그러니까 원서 기준으로는 16년, 번역서 기준으로는 10년 만에 새 판이 출간된 셈이다. 이 책의 이전 판 번역서는 절판된 지가 꽤 됐지만, 아직까지도 중고로 내놓으면 눈 깜짝할 사이에 판매될 정도로 인기를 누리고 있다.
그러다 보니 숙련된 C++ 프로그래머들 중에서는 개정4판의 번역서를 손꼽아 기다리는 사람도 적지 않을 것이다. 4판은 그런 사람들의 기대를 훨씬 뛰어 넘는 책으로, C++11에서 C++가 큰 진보를 이룬 결과에 맞춰 책도 큰 발전을 이뤘다. C++11에 관한 새로운 내용들이 대폭 추가됐을 뿐 아니라 기존의 내용 역시 거의 대부분 다시 쓰여졌다. 3분의 1 정도를 제외하고는 거의 새로 쓰여졌다고 봐도 무방하다. 또한 대상 독자층에도 약간의 변화가 있었다. 3판까지는 다소 어중간한 독자층을 대상으로 했다면 4판에 와서는 같은 저자가 쓴 C++ 초심자에게 초점이 맞춰진 『Programming: Principles and Practice Using C++ (Second Edition) 한국어판』(에이콘, 2015)가 출간된 관계로, 이 책은 좀 더 숙련된 프로그래머에게 초점이 맞춰졌다. 즉 이 책은 C++나 프로그래밍 언어를 처음 공부하려는 분들에게 적합한 책은 아니며, 어느 정도 숙련된 프로그래머의 손에 쥐어졌을 때 가장 빛을 발할 수 있는 책이다.
C++11 표준이 승인된 것은 2011년이었지만, 2012년에 되어서야 C++11 표준이 반영된 컴파일러가 출시됐으므로, C++ 표준은 세상에 나온 지 얼마 안 되는 셈이다. 특히 국내를 보면 현업 프로그래머들 중 상당수가 아직도 C++98의 예전 표준에 훨씬 더 익숙한 것으로 보인다. 나의 경우에도 주로 C++98 표준 기반으로 C++ 프로그래밍을 접해 온 까닭인지 C++11로 작성된 코드는 C++가 아닌 다른 프로그래밍 언어라는 느낌이 들 정도로 새로웠다.
그 정도로 C++는 C++11에 와서 큰 변화를 겪었다. 다행히 그런 변화는 좀 더 발전적인 방향으로의 변화인 듯싶다. 이 책에서는 C++11에서 새로이 추가된 병행성 지원, 정규 표현식 처리, 자원 관리 포인터, 난수, 개선된 컨테이너(해시 테이블을 비롯한), 범용적이고 통일적인 초기화, 더 간단해진 for 문, 이동 의미 구조, 기초적인 유니코드 지원, 람다, 일반 상수 표현식, 클래스 기본 값에 대한 제어, 가변 인자 템플릿, 사용자 정의 리터럴 등에 대한 개념과 관련된 예제를 상세히 설명한다.
단순히 추가된 기능을 나열식으로 설명하는 것이 아니라 C++11에서 달라진 새로운 C++ 프로그래밍 접근법을 통합적인 관점, 최적의 예제 및 추천 기법 등을 통해 효과적으로 설명한다. 저자의 주장에 의하면 C++11에 와서 C++는 더 나은 프로그래밍 언어가 됐다. 그런 더 나아진 C++의 면면을 가장 속속들이 배우기에 이 책보다 더 나은 책은 있을 수 없다. 저자가 C++의 창시자일 뿐만 아니라 C++11 표준화 작업에 깊숙이 참여했기 때문이다. 실제로 이 책에서는 C++11의 표준화 작업에 깊숙이 참여한 관계자만이 들려줄 수 있는 C++11의 미묘한 측면들을 설명하고 있는데, 독자들이 다른 C++11 도서에서는 찾아보기 어려운 내용들을 많이 접하게 되리라 자신한다. 이 책을 통해 새로운 C++11 표준을 익힘으로써 독자들이 저자가 기대하는 바와 같이 자신의 생각을 좀 더 명확하고, 단순하며, 직접적으로 표현하고, 좀 더 빠르게 동작하고 좀 더 효율적인 코드를 작성할 수 있게 되기를 바란다.
워낙 유명한 시리즈다 보니 이 책의 번역을 맡게 된 것은 옮긴이로서 영광이기도 했지만, 동시에 상당히 부담스러운 일이었다. 특히 C++11에 와서 새로운 개념들이 많이 추가됐는데, C++11의 새로운 개념들이 아직 국내 현업에서 정착화되지 않은 상태이다 보니 용어 번역에 어려움을 겪었다. 번역에 있어 부족한 부분은 독자 여러분들의 피드백에 따라서 개선할 수 있는 기회를 갖게 되기를 바라며, 이전 판처럼 오랜 기간 동안 C++ 프로그래머 여러분들에게 도움이 될 수 있는 책이 되기를 기대한다.