멀티플레이어 게임 프로그래밍 (네트워크 게임의 아키텍처를 만드는 기술)

멀티플레이어 게임 프로그래밍 (네트워크 게임의 아키텍처를 만드는 기술)

$33.00
Description
현업 개발자가 알려주는 탄탄한 멀티플레이어 게임 프로그래밍
[리그 오브 레전드], [디스트로이 올 휴먼즈] 시리즈를 컨설팅하고 [로보블리츠], [맥스 액스], [스크랩 포스]를 개발한 조슈아 글레이저와 [메달 오브 아너: 퍼시픽 어썰트], [반지의 제왕: 컨퀘스트], [사보타주] 게임 제작에 참여한 산제이 마드하브가 서던캘리포니아 게임 학과에서 강의한 멀티플레이어 게임 프로그래밍을 책으로 옮겼다. 액션 게임과 실시간 전략 게임을 통해 멀티플레이어 아키텍처를 어떻게 구축하는지, 엔진의 각 부분을 어떻게 만들어야 하는지 설명한다.
저자

조슈아글레이저

저자조슈아글레이저(JoshuaGlazer)는네이키드스카이엔터테인먼트(NakedSkyEntertainment)의공동설립자이자CTO로《로보블리츠》,《마이크로봇》,《트위스터매니아》등콘솔및PC게임을개발해왔고,최근에는모바일히트작《맥스액스》와《스크랩포스》를개발했다.네이키드스카이팀리더로에픽게임스의언리얼엔진,라이엇게임즈의《리그오브레전드》,THQ의《디스트로이올휴먼즈》시리즈및일렉트로닉아츠,미드웨이,마이크로소프트,파라마운트픽쳐스등많은외부프로젝트의컨설팅을맡기도하였다.
조슈아글레이저는또한,서던캘리포니아대학의시간강사로활동하면서멀티플레이어게임프로그래밍과게임엔진개발을열성적으로가르쳐왔다.

목차

1장네트워크게임의개요
__1.1멀티플레이어게임의간추린역사
____1.1.1로컬멀티플레이어게임
____1.1.2초기네트워크멀티플레이어게임
____1.1.3MUD:멀티유저던전
____1.1.4랜게임
____1.1.5온라인게임
____1.1.6MMO게임
____1.1.7모바일네트워크게임
__1.2[스타시즈:트라이브스]
____1.2.1플랫폼패킷모듈
____1.2.2연결관리자
____1.2.3스트림관리자
____1.2.4이벤트관리자
____1.2.5고스트관리자
____1.2.6이동관리자
____1.2.7기타시스템
__1.3[에이지오브엠파이어]
____1.3.1턴타이머
____1.3.2동기화
__1.4요약
__1.5복습문제
__1.6더읽을거리

2장인터넷
__2.1패킷스위칭의기원
__2.2TCP/IP스택의계층구조
__2.3물리계층
__2.4링크계층
____2.4.1이더넷/802.3
__2.5네트워크계층
____2.5.1IPv4
____2.5.2IPv6
__2.6전송계층
____2.6.1UDP
____2.6.2TCP
__2.7응용계층
____2.7.1DHCP
____2.7.2DNS
__2.8NAT
____2.8.1NAT투과
__2.9요약
__2.10복습문제
__2.11더읽을거리

3장버클리소켓
__3.1소켓만들기
__3.2운영체제별API차이
__3.3소켓주소
____3.3.1자료형안전성
____3.3.2문자열로sockaddr초기화하기
____3.3.3소켓바인딩하기
__3.4UDP소켓
____3.4.1자료형안전성을보강한UDP소켓
__3.5TCP소켓
____3.5.1연결된소켓으로데이터보내고받기
____3.5.2자료형안전성을보강한TCP소켓
__3.6블로킹I/O와논블로킹I/O
____3.6.1멀티스레딩
____3.6.2논블로킹I/O
____3.6.3select()함수
__3.7소켓부가옵션
__3.8요약
__3.9복습문제
__3.10더읽을거리

4장객체직렬화
__4.1직렬화가필요한이유
__4.2스트림
____4.2.1메모리스트림
____4.2.2엔디언호환성
____4.2.3비트스트림
__4.3참조된데이터처리
____4.3.1임베딩(또는인라이닝)
____4.3.2링킹
__4.4압축
____4.4.1희소배열(sparsearray)압축
____4.4.2엔트로피인코딩
____4.4.3고정소수점
____4.4.4기하압축
__4.5유지보수성
____4.5.1직렬화읽기와쓰기를하나로합치기
____4.5.2데이터주도직렬화
__4.6요약
__4.7복습문제
__4.8더읽을거리

5장객체리플리케이션
__5.1월드상태
__5.2객체를리플리케이션하기
____5.2.1객체생성레지스트리
____5.2.2한패킷에여러객체실어보내기
__5.3초간단월드상태리플리케이션
__5.4월드상태의변경
____5.4.1객체상태부분리플리케이션
__5.5직렬화객체로RPC수행
__5.6리플리케이션시스템개조하기
__5.7요약
__5.8복습문제
__5.9더읽을거리

6장네트워크토폴로지와예제게임
__6.1네트워크토폴로지
____6.1.1클라이언트-서버
____6.1.2피어-투-피어
__6.2클라이언트-서버구현하기
____6.2.1서버코드와클라이언트코드분리하기
____6.2.2네트워크관리자및신규클라이언트마중하기
____6.2.3입력공유및클라이언트프록시
__6.3피어-투-피어구현하기
____6.3.1신규피어마중하기및게임시작하기
____6.3.2명령공유와락스텝턴
____6.3.3동기화유지하기
__6.4요약
__6.5복습문제
__6.6더읽을거리

7장레이턴시,지터링,신뢰성
__7.1레이턴시
____7.1.1네트워크가원인이아닌레이턴시
____7.1.2네트워크레이턴시
__7.2지터링
__7.3패킷손실
__7.4신뢰성:TCP냐UDP냐
__7.5패킷배달통지
____7.5.1외부로나가는패킷에꼬리표달기
____7.5.2패킷을받고확인응답하기
____7.5.3확인응답처리및배달여부알리기
__7.6객체리플리케이션신뢰성
____7.6.1이미전송중인최신상태의재전송을막아최적화하기
__7.7실제와유사한환경을꾸며테스트하기
__7.8요약
__7.9복습문제
__7.10더읽을거리

8장레이턴시대응강화
__8.1더미터미널클라이언트
__8.2클라이언트측보간
__8.3클라이언트측예측
____8.3.1데드레커닝
____8.3.2클라이언트이동예측및이동조작되새김
____8.3.3레이턴시를교묘하게감추기
__8.4서버측되감기
__8.5요약
__8.6복습문제
__8.7더읽을거리

9장규모확장에대응하기
__9.1객체스코프내지연관성
____9.1.1스태틱존
____9.1.2시야절두체사용
____9.1.3기타가시성기법
____9.1.4보이지않아도스코프에포함되어야하는경우
__9.2서버파티셔닝
__9.3인스턴싱
__9.4우선순위와빈도
__9.5요약
__9.6복습문제
__9.7더읽을거리

10장보안
__10.1패킷스니핑
____10.1.1중간자공격
____10.1.2호스트머신상패킷스니핑
__10.2입력검증
__10.3소프트웨어치트감지
____10.3.1VAC
____10.3.2워든
__10.4서버보안
____10.4.1디도스공격
____10.4.2악성데이터
____10.4.3소요시간분석공격
____10.4.4침입
__10.5요약
__10.6복습문제
__10.7더읽을거리

11장상용엔진사례
__11.1언리얼엔진
____11.1.1소켓과기본네트워킹
____11.1.2게임객체와토폴로지
____11.1.3액터리플리케이션
____11.1.4원격프로시저호출
__11.2유니티
____11.2.1전송계층API
____11.2.2게임객체와토폴로지
____11.2.3객체스폰과리플리케이션
____11.2.4원격프로시저호출
____11.2.5매치메이킹
__11.3요약
__11.4복습문제
__11.5더읽을거리

12장게임서비스플랫폼
__12.1게임서비스플랫폼선택하기
__12.2기본셋업
____12.2.1초기화,구동,마무리
____12.2.2유저ID및이름
__12.3로비및매치메이킹
__12.4네트워킹
__12.5플레이어통계
__12.6플레이어도전과제
__12.7리더보드
__12.8기타서비스
__12.9요약
__12.10복습문제
__12.11더읽을거리

13장클라우드에전용서버호스팅하기
__13.1클라우드,꼭사용해야할까
__13.2필수도구
____13.2.1REST
____13.2.2JSON
____13.2.3Node.js
__13.3용어및개요
____13.3.1서버게임인스턴스
____13.3.2게임서버프로세스
____13.3.3게임서버머신
____13.3.4하드웨어
__13.4로컬서버프로세스관리자
____13.4.1프로세스모니터링
__13.5가상머신관리자
____13.5.1가상머신모니터링
__13.6요약
__13.7복습문제
__13.8더읽을거리

부록A모던C++기초
A.1C++11
A.2레퍼런스
A.2.1상수레퍼런스
A.2.2상수멤버함수
A.3템플릿
A.3.1템플릿특수화
A.3.2정적단언문과자료형특성정보
A.4스마트포인터
A.4.1shared_ptr
A.4.2unique_ptr
A.4.3weak_ptr
A.4.4주의사항
A.5STL컨테이너
A.6반복자
A.6.1범위기반for구문
A.6.2반복자활용하기
A.7더읽을거리

출판사 서평

[이책의내용]
ㆍ네트워크게임의태동과그진화과정
ㆍ인터넷표준과프로토콜을게임개발에사용하기
ㆍ멀티플레이어게임구현에가장널리이용되는버클리소켓다루기
ㆍ인터넷전송에효율적인게임데이터포맷정하기
ㆍ모든플레이어가같은세계를공유하도록게임상태동기화하기
ㆍ대규모게임구성을위해네트워크토폴로지조직하기
ㆍ지연및데이터손실을초래하는레이턴시와지터링문제해결하기
ㆍ게임서버의규모가대형화될때성능문제해결하기
ㆍ보안취약점과소프트웨어치트에대응하기
ㆍ언리얼4와유니티게임엔진의네트워크기능활용하기
ㆍ매치메이킹,도전과제,리더보드등게임플랫폼서비스에연동하기
ㆍ클라우드환경에서게임서버구동하기

[관련도서]
[프로그래머를위한선형대수]
[게임을움직이는수학과물리]
[3D게임을움직이는수학과물리]
[인프라엔지니어의교과서]

[옮긴이의말]
이책을펼친여러분이라면틀림없이누군가와멀티플레이어게임을하면서즐거운시간을보낸
경험이있으실겁니다.그간엄청나게많은게임이세상에선보였고또사라져갔지만,게이머들
에게선택받고오래사랑받는작품이되기위한중요한조건으로,멋지게구현된멀티플레이만한게또있을까요.
한편개발자로서우리는다양한상용엔진을다루지만,그근간의멀티플레이로직이어떻게구성되어있는지,왜그런설계가필요했는지이론적인배경까지는깊이이해할여유없이실무에임할때가많습니다.학부에서전공과목진도를열심히따라갔더라도,막상필드에서필요한내용이있을때대체그것을여러두꺼운교과서중어디에서봤던가기억이가물가물해난감했던경험을가진분도계실겁니다.
이책에서다루는내용은인터넷링크계층이나스트림및바이트순서등기초적이고이론적인내용부터시작해,데드레커닝이나서버측되감기같은고급기법에이르기까지체계적으로집대성되어있습니다.이를통해네트워크게임을개발하면서갖게될법한여러의문에대한답을얻을수있는데요,쉬운예로왜그간PC게임에서TCP보다UDP를선호했는지,왜최근의모바일게임에선또TCP를그럭저럭쓰는건지,왜엊그제플레이한콘솔게임에서랙때문에모내기하다어처구니없게킬당했는지,어떻게만들었더라면좀나았을지등등말입니다.
기억이새롭습니다.네트워크게임을처음개발할때프레임틱을어떻게나누고다루어야하나,
입력처리를어떻게해야반응속도가좋으려나칠판에쓰고지우고또쓰며궁리하던기억.자꾸만깨지는동기화코드를밤새도록디버깅하며어디물어볼사람하나만있었으면하고답답해했던기억.이책을처음읽었을때,당시에고민했던내용이주제별로정리된것을보고무릎을탁쳤습니다.그리고과거로타임슬립해서자리에한권올려놓고왔으면싶었습니다.
이제게임산업이성숙하면서많은기술이깔끔한부품으로포장되어그내부를속속들이알지못하더라도얼마든지조립해출시할수있는시대가되었습니다.하지만,여전히원천기술에대한이해가부족하다면손댈엄두조차나지않는과제들도많이남아있습니다.이를테면LTE환경에서MTU에맞게패킷크기를최적화하기,클라이언트측예측을수행하는모듈의‘한프레임’튀는버그잡아내기,자동스케일링걸어놓은클라우드인스턴스의프로세스가안죽고버티는문제수정하기등등.게임의완성도를위해,그리고제품의차별화를위해,나아가생산성재고및비용절감을위해시도할수있는기술적과제는무궁무진합니다.
이책의내용을충실히소화한다면다해낼수있습니다,라고하는건무리겠지요.하지만적어도여기실린내용은십여년간제가블로그나논문에서단편적으로만접할수있던내용들이체계적으로종합되어있어매우도움될것이라자부합니다.앞으로멀티플레이구현에관련된여러책이나글을볼계획이시라면,이책한권만큼은기왕펼치신김에꼼꼼히봐두실것을추천해드립니다.
번역도중궁금점에대해친절히답변해주시고,우리나라독자를위해인사글을따로남겨주신
원저자조슈아글레이저님께감사드립니다(코핑선생의가르침을잊지않겠습니다).아울러출판여건에도불구하고다양한이론서적을꾸준히발굴하여국내에소개해주시는길벗출판사여러분께도감사드립니다.늘응원과사랑을아끼지않는아내혜화,그리고게임만드는아빠가마냥자랑스러운아들지운이와출간의보람과기쁨을함께하고싶습니다.

[지은이의말]
네트워크멀티플레이게임은오늘날게임산업에서큰축을담당하고있다.게임을즐기는인구도오가는돈도어마어마하다.2014년당시매달6천7백만플레이어가《리그오브레전드》를즐기고있었으며이책을쓰는시점인2015년《DoTA2》월드챔피언십의상금은도합170억원규모에달한다.멀티플레이모드덕분에대중적인기를누리는《콜오브듀티》시리즈의경우매번출시하기가무섭게1조원이상의매상을올린다.그간싱글플레이만지원하던《GTA(GrandTheftAuto)》시리즈도드디어4편부터네트워크멀티플레이요소가탑재되었다.
이책에선네트워크멀티플레이게임을프로그래밍하는데필요한주요요소를심도있게다룬다.우선네트워크의기초부터시작해서인터넷은어떤방식으로동작하고데이터를다른컴퓨터에보낼때내부에서어떤일이일어나는지알아본다.기초를다지고나면게임데이터를전송하는기본방법을살펴본다.네트워크로게임데이터를보내기위해준비해야할것,네트워크를통해게임객체를업데이트하는법,게임세션에참여하는컴퓨터들을조직화하고연결하는법등이다.그다음으로다룰내용은인터넷에필연적으로수반되는비신뢰성(예:패킷손실)과랙을어떻게보완할지,게임의규모가커지면어떻게대응해야하는지,그리고게임의보안을강화하는방법엔무엇이있는지등이다.12장과13장에선게임서비스플랫폼에연동하는방법과전용서버를클라우드에호스팅하는법을살펴본다.이두가지주제는요즘네트워크게임에있어특히중요성이대두되고있다.
이책에선이러한주제에대해매우실무적인방향으로접근하려한다.대부분내용에서개념을다루는데그치지않고여러분이직접독자적인네트워크게임코드를구축할수있도록실제동작하는코드를제시할것이다.구현예제는두가지장르의게임하나씩으로전체소스코드를웹사이트에서다운로드받을수있다.첫째는액션게임이고둘째는실시간전략게임(RTS)이다.진도가나아감에따라이들두게임이점점개량되어나가는모습을책에서같이확인할수있다.
이책의많은부분은서던캘리포니아대학교(UniversityofSouthernCalifornia)의멀티플레이어게임프로그래밍과정의커리큘럼에기초하고있다.따라서멀티플레이어게임을개발하는방법을배우는데있어어느정도검증된내용이라할수있다.그렇다고꼭대학교재용도로쓴책은아니며네트워크게임을엔지니어링하는데관심있는게임프로그래머라면누구에게나가치있는내용이라자부한다.