이 책에 대해서 ... 24 이 책의 구성 ... 26 샘플 게임&동영상 ... 28 이 책의 보충정보 코너에 대한 안내 ... 30 감사의 말씀 ... 30 기본 용어의 정리 ... 31 제0장 [속성] 온라인 게임 프로그래밍 0.1 [온라인 게임 프로그래밍을 위한] 네트워크 프로그래밍의 기초 ... 41 네트워크 프로그래밍은 필수(!) ... 41 네트워크 프로그래밍, 인터넷 프로그래밍 ... 41 인터넷 프로그래밍의 역사와 사상 ... 42 OSI 참조 모델 ... 43 온라인 게임 시스템과 레이어 ... 44 레이어4는 대부분의 경우 TCP를 사용하고, 레이어3 이하는 직접적인 조정이 필요 없음 ... 44 레이어5 이상은 게임단에서 구현한다 ... 45 소켓 API의 기초 지식 ... 45 온라인 게임과 소켓 API ... 46 커넥션 지향(스트림형), 커넥션리스 지향(데이터그램형) ... 46 0.2 [소켓 프로그래밍 입문] 복수의 동시 접속을 처리, 성능을 추구한다 ... 49 통신로의 특정 ... 49 소켓 API의 기본 ... 50 TCP 통신로의 상태 전이와 소켓 API ... 52 복수의 동시 접속을 처리한다 ... 55 동기적 호출(블로킹)과 스레드 ... 55 스레드 방식의 처리 부하 문제 ... 57 싱글 스레드, 논블록킹, 이벤트 구동 ... 57 온라인 게임에서의 입출력 구현의 특징 ... 58 온라인 게임과 구현 언어 ... 59 성능의 최대화&개발 효율 향상 ... 59 온라인 게임 고유의 특성에 의한 언어별 성능 차이 ... 60 멀티코어 서버의 성능을 끌어낸다 ... 61 컨텍스트 스위치 - CPU의 설정 상태를 일시적으로 보관해 둔다 ... 62 멀티코어 머신이며 서버 프로세스 수를 너무 늘리지만 않으면 OK ... 63 멀티코어 머신과 네트워크의 스루풋 ... 63 이더넷 프레임 ... 63 네트워크 계층별 헤더 ... 65 멀티코어 머신의 송신 능력 ... 67 서버 구현의 간소화 ... 68 libevent의 특징 ... 68 0.3 [RPC 공략] 최소 기능의 통신 미들웨어 ... 69 통신 라이브러리의 필요성 ... 69 포맷을 결정하고 송수신한다 ... 71 온라인 게임에서 사용하는 RPC의 전체적인 모습 ... 72 RPC 스터브 코드를 자동 생성하는 RPC 툴 ... 73 온라인 게임과 바이너리 데이터 교환 포맷/라이브러리 ... 74 [보충] UDP의 이용 ... 75 0.4 게임 프로그래밍의 기초 ... 76 게임 프로그래밍의 역사 ... 76 「점만 찍을 수 있다면 게임은 만들 수 있다」인베이더 게임 ... 77 가상의 코드로 알 수 있다! 게임 프로그램의 기본 해부 ... 78 초기화 ... 79 무한 루프 ... 80 각 스프라이트의 동작 - 게임 로직의 본체 ... 81 화면 표시 ... 83 서브루틴 ... 84 게임 프로그래밍의 비결 ... 86 두 가지 프로그래밍 기법의 유사성 ... 87 0.5 요약 ... 88 제1장 온라인 게임의 역사와 진화 1.1 온라인 게임의 기술사 ... 93 온라인 게임의 역사는 아직 50년 ... 93 1950년 이전: 계산기의 등장 ... 93 1950년대: 초기 비디오 게임 ... 94 1960년대: 영향력을 가진 각종 머신의 등장 ... 96 1970년대: 온라인 게임 기본 요소가 갖추어짐 ... 99 1980년대: 네트워크 대전 게임의 등장 ... 100 1990년대: 게임 시장의 확대 ... 102 2000년대 전반: 온라인 게임의 상업적 성립 ... 104 2000년대 후반: 웹 브라우저 기반 MMOG의 상업적 성공 ... 105 2010년대 이후: 과연 어떤 일이 일어날 것인가? ... 107 1.2 [기술의 변천에서 알 수 있는] 게임 문화/경제권 ... 107 기술의 변천도를 읽자 ... 107 3개의 영역(카테고리) ... 107 해커 문화권 ... 108 콘솔/아케이드 게임 비즈니스권 ... 109 마이크로소프트권 ... 109 두 가지의 게임 경제/문화권 ... 110 문화, 경제, 기술의 관계 ... 112 1.3 요약 ... 113 제2장 온라인 게임이란 무엇인가? 2.1「온라인 게임」이라는 용어의 정의 ... 116 온라인 게임의 4개의 측면 ... 116 2.2 온라인 게임의 물리적 측면 ... 117 물리적 구성요소 ... 117 컴퓨터 네트워크 ... 118 물리 모델/물리적인 네트워크 구성 ... 118 이 책이 대상으로 하는 회선은「인터넷」기반 ... 120 2.3 온라인 게임의 개념적인 측면 ... 121 온라인 게임과 기본구조 ... 121 게임 플레이의 기본 -「인지」「판단」「조작」의 반복 ... 121 비디오 게임의 구조 ... 121 게임 플레이 공간 ... 122 게임의 진행 ... 123 하나의 게임의 진행을 공유한다 ... 124 공유가「가능하다」 ... 124 2.4 온라인 게임의 비즈니스적 측면 ... 125 비즈니스적 관점의 요구 ... 125 테스트 플레이어를 효과적으로 모으고 싶다 ... 127 클로즈 베타 테스트(CBT) ... 128 오픈 베타 테스트(OBT) ... 128 자주 갱신하고 싶다 ... 129 (1) 정기적 패치 ... 129 (2) 대규모 패치(확장 디스크, 추가 패키지) ... 129 (3) 긴급 메인터넌스 ... 130 머신의 대수와 회선 대역을 절약하고 싶다 ... 130 (1) 인건비&(2) 설비 코스트 - 운영, 개발 후에 소요되는 코스트가 큼 ... 130 머신 코스트의 견적 - 서버가 고장 날 확률을 포함해 둔다 ... 131 회선 코스트의 견적 - 대역은 가능한 절약한다 ... 131 작게 시작하고 싶다. 스케일러빌러티를 지니게 하고 싶다 ... 132 다양한 과금 옵션을 제공하고 싶다 ... 132 게임 포인트의 등장 - 과금의 세분화, 리얼타임화의 실현 ... 133 공격자를 저렴한 비용으로, 빨리, 확실히 배제하고 싶다 ... 134 상업적 의도의 어뷰즈 ... 135 상업적 의도가 없는 어뷰즈 - 여러 가지의 공격, 3D 온라인 게임 전용 게임 클라이언트 ... 136 서비스 정지 시간과 횟수를 줄이고 싶다 ... 137 (1) 계획적인 메인터넌스로 인한 정지 ... 137 (2) 결함이나 공격에 의한 서비스 정지 ... 138 게임 플레이 결과를 피드백하고 싶다 ... 139 게임 플레이의 메타 정보 ... 140 (1) 하이스코어 랭킹 ... 140 (2) 플레이 실적 ... 140 (3) 그 외의 통계 ... 141 한층 더 고도의 기술이 요구되는 플레이 실적 ... 141 더욱 간단하게 다른 플레이어와 만날 수 있게 하고 싶다 ... 142 (1) 자동 선택식 ... 142 (2) 전용 로비 ... 143 (3) 가상 세계(비쥬얼 로비, 버추얼 로비) ... 143 전용 로비 형식과 가상 세계의 차이점 ... 143 플레이어 매칭의 향후 ... 144 2.5 온라인 게임의 사람과 조직적 측면 ... 144 온라인 게임 서비스의 운영에 관한 사람들 ... 145 세 가지 기능과 분담 패턴 ... 146 온라인 게임 서비스 운영의 3가지 전문 기능 ... 146 만드는 사람들 ... 146 반드시 필요한 4가지 직종 ... 147 소규모 팀 ... 147 대규모 팀 ... 147 직종의 밸런스에서 엿볼 수 있는 게임 개발의 특유한 점 - 데이터 작성 스텝의 비율 ... 148 운용하는 사람들 ... 149 서버 설비 ... 149 2.6 온라인 게임 프로그래머에 요구되는 지식군 ... 150 온라인 게임 프로그래머에 필요한 능력과 경험 ... 150 프로그래밍 기초 스킬 ... 150 게임 프로그래밍의 기초 지식(온라인 게임 개발에서도 필요) ... 152 게임 클라이언트 개발 지식 ... 154 DB 지식 ... 155 시스템 운용 지식S ... 155 여러 방면에서 필요한 온라인 게임의 개발 지식 ... 156 2.7 온라인 게임을 뒷받침하는 기술의 대구분 ... 157 온라인 게임을 뒷받침하는 기술의 4가지 형식 ... 157 C/S형과 P2P형 - 물리적인 구조의 두 가지 전형적 패턴 ... 157 MMO형과 MO형 - 논리적인 구조의 두 가지 전형적 패턴 ... 158 온라인 게임의 4가지 형식 - 물리적 구조×논리적 구조 ... 159 2.8 개발 코스트를 좌우하는 기술적 포인트 ... 159 온라인 게임과 개발 기법의 현재 ... 159 온라인 게임의 게임 본체를 뒷받침하는 3가지 축 ... 160 게임 데이터 형식 ... 160 게임 통신 형식 ... 162 게임 반응속도 ... 163 2.9 요약 ... 166 제3장 온라인 게임의 아키텍처 3.1 [게임 프로그램의 특성] 좋은 리스폰스를 계속해서 유지한다 ... 175 리스폰스의 중요성 ... 175 온 메모리가 필요한 이유 ... 175 (1) 16밀리초마다 변화 ... 176 게임 진행을 표현하는 데 필요한 정보와 그 사이즈 ... 177 RDBMS를 이용해 구현할 수 있을까? - 온 메모리와의 비교 ... 178 (2) 대량의 오브젝트 표시 ... 179 패밀리컴퓨터와 CPU 사이클 ... 180 플레이스테이션 3(PS3)과 CPU 사이클 - RDBMS 방식으로 개발할 수 있을까? ... 181 (3) 플레이어의 조작을 예상할 수 없다 ... 181 RDBMS 방식으로는 실현할 수 없는 정보량, 처리 속도 ... 182 CPU와 동일 머신에 게임 진행 데이터를 배치해야 한다 ... 183 3.2 온라인 게임 특유의 요소 ... 183 통신 레이턴시 ... 184 통신 시간의 내역 ... 184 피할 수 없는 지연 - 지연과 게임 장르 ... 185 대역 ... 188 서버 머신 ... 189 보안 ... 189 치트 - 최대의 보안 이슈 ... 189 치트는 왜 행해지는가? ... 190 치트 행위의 수단 ... 191 치트의 조작 대상 ... 192 노이먼형 컴퓨터의 숙명 - 치트 행위에 대한 방지 서비스 ... 193 무서운 치트 행위의 파급 효과 ... 193 보조 시스템(주변 시스템) ... 194 3.3 물리 아키텍처의 상세 해부 C/S형, P2P형 ... 195 기본적 네트워크 토폴로지 ... 195 실제로 사용되는 것은 스타와 버스, 풀 메시 - 통신 레이턴시의 최소화 ... 196 물리 아키텍처의 종류 ... 197 C/S형 ... 197 리플렉터형 ... 198 P2P형 ... 199 NAT 트래버설 ... 200 C/S+P2P 혼합형 ... 200 ad-hoc 모드 ... 201 3.4 논리 아키텍처의 상세 해부 MO형 ... 202 MO, MMO란? ... 203 MMO와 MO의 하이브리드(혼합) ... 204 MO형, MOG ... 204 동기식 ... 204 동기식/풀 메시형의 구현 ... 205 각 단말(플레이어)이 송수신하는 정보의 내용 ... 205 동기식/풀 메시형에 필요한 조건과 메리트 ... 207 동기식/풀 메시형의 3가지 문제점 - 통신망과 송수신의 완전성의 취약점, 게임의 중도참가 ... 208 통신로의 신뢰성 ... 209 「가장 느린 단말의 속도에 맞춰진다」는 문제 ... 211 동기식/스타형 ... 212 스타형이 가지고 있는 4가지 문제 ... 214 동기식 전반의 큰 문제 - 게임 도중에 참가할 수 없다 ... 215 동기식의 메리트와 문제 해결 방법 ... 216 비동기식 ... 217 비동기식의 구현 방침의 세우는 방법 - 게임 내용의 상세한 분석이 필수 ... 217 3가지 기본 요소「자신」「상대」「환경」 ... 217 3가지 요소의 관계 ... 218 (1) 자신과 상대 ... 219 격투 게임의 예 ... 219 공격, 방어, 타격 판정 ... 220 격투 게임의 시퀀스 그림 ... 222 추상도가 낮은, 원인을 알 수 있는 데이터를 송신할 필요가 있다 - 결과의 납득 ... 223 결과가 어긋나는 문제 발생! ... 224 결과의 정합성을 유지하는 방법 ... 225 데미지를 발생시킨 쪽의 결과를 사용한다 ... 225 데미지를 받은 쪽의 결과를 사용한다 ... 226 방식 선택의 원칙 - 플레이어의 만족감 향상을 위해 ... 227 (2) 자신과 환경 ... 228 배타 제어가 필요한 타입의 환경 요소 - 경합하는 자원「폭탄」 ... 228 배타 제어가 필요 없는 타입의 환경 요소 - 줄지 않는 자원「물」 ... 229 게임의 환경 요소는 의외로 다루기 어렵다 - 일단 게임 내용을 상세하게 이해한다 ... 229 배타 제어의 구현 ... 230 아이템 듀프 문제 ... 230 아이템에 고유한 ID를 부여한다 - 듀프가 일어났는지를 판정, 발생하는 문제 ... 231 아이템 듀프의 대책 - 중재 역할의 소프트웨어를 배치한다 ... 233 중재역의 기본 기능과 사용법 ... 235 폭탄 이외의 환경 요소의 경우 ... 236 자동적으로 상태가 변화하는 환경 ... 237 동적인 환경에서 일어나는 문제 - 완전하게 병행 관리하는 방법으로는 어렵다 ... 238 동적 환경에서 일어나는 문제의 대처법 선택 ... 241 (1) 상대와 환경의 관계 ... 242 3.5 논리 아키텍처 상세 해부 MMO형 ... 244 MMO형, MMOG ... 244 영속적이란? - 게임 플레이 소요 시간과 축적성 ... 244 영속적인 데이터, 대량으로 축적되는 데이터의 일관성 유지의 어려움 ... 245 클라이언트와 서버의 완전 분리 ... 246 MMOG의 구조 ... 247 MMO형의 구현 방침 - 브라우저식, 순수한 C/S모델 ... 247 브라우저식과 동기식 및 비동기식의 차이 ... 248 MMO형에 있어서 서버, 클라이언트의 기능 ... 248 서버의 처리 - 서버 측의 게임은 계속 진행된다 ... 249 MMO형만의 과제 ... 250 3.6 정리 ... 251 제4장 [실전] C/S MMO 게임 개발 4.1 온라인 게임 개발의 기본적인 흐름 ... 255 프로젝트 자료/성과물 ... 255 준비와 초기 구현은 동시에 병행한다 ... 258 개발의 진행과 자료 준비의 순서 ... 258 기술자의 자료/성과물 ... 259 4.2 C/S MMO 게임의 경향과 대책 ... 260 C/S MMO 게임의 특징 ... 260 C/S MMO형(MMO형) 게임의 특성 ... 261 C/S MMO형의 제약 ... 262 4.3 [기획 자료와 5개의 설계 자료] 가공의 게임「K Online」의 개발에서 배운다 ... 263 샘플 게임의 소재 찾기 ... 263 기획 상세 자료 ... 265 기획 상세 자료의 필요성 ... 266 MMOG의 방대한 게임 설정 ... 266 5가지 설계 자료 ... 267 설계상의 중요한 판단 ... 269 4.4 [1]시스템 기본 구조도의 작성 ... 269 시스템 기본 구조도의 기본 ... 269 확장성을 가진 서버 시스템이 필요 ... 269 다양한 보틀넥 - 스케일업 방식의 선택에 대해서 ... 270 게임 서버/DB의 보틀넥을 해소한다 ... 274 아무것도 고려하지 않는 경우 ... 274 공간 분할법 ... 275 공간 카피 ... 276 인스턴스법 ... 277 패러렐 월드 방식 ... 278 가장 보틀넥이 되기 쉬운 것은 DB의 쓰기 처리 ... 279 패러렐 월드 방식의 DB 분할 ... 280 패러렐 월드 방식의 문제 ... 280 복수의 방법을 병용 ... 281 각 방식의 도입 난이도 ... 282 각 월드의 DB(게임 DB) 서버의 절대 성능 향상 ... 283 애플리케이션단의 개선점 연구 ... 283 K Online의 설계 사이징 ... 284 보틀넥의 확인 ... 284 설계 사이징에 대한 판단 원칙 ... 285 게임 로직의 처리 부하로부터 사이징 ... 285 게임 DB의 처리 부하로부터 사이징 ... 287 규모에 대한 최소한의 검토 결과, 보다 나은 유저 체험을 위하여… ... 289 서버의 기본 구조, [1]시스템 기본 구조도의 작성 ... 290 4.5 [2]프로세스 관계도 작성 ... 291 [2] 프로세스 관계도 준비 ... 292 서버 접속 구성 ... 292 서버의 접속 구성 ... 294 패러렐 월드 방식을 사용하여 확장하는 경우 ... 295 4.6 [3] 대역/머신 리소스 계산 자료의 작성 ... 296 프로세스 리스트를 토대로 머신 리소스를 사이징 ... 296 CPU 센트릭(중심적, 의존적) 머신, 스토리지 센트릭 머신 ... 299 머신 리소스의 코스트 견적 ... 299 머신 리소스 유지 코스트 ... 300 대역 코스트의 견적 ... 300 트래픽의 98%가 플레이어/NPC의 이동 통지이다 ... 301 대역 반감을 위한 지침 ... 302 기획의 조정 - 대역 삭감 작전 [1] ... 302 프로그램을 연구 - 대역 삭감 작전 [2] ... 303 대역 삭감에는 기획 내용의 재검토가 효과적 ... 303 4.7 [4] 프로토콜 정의 자료의 작성 프로토콜의 기본적인 성질 ... 304 [4] 프로토콜 정의 자료의 기본 ... 304 「프로토콜의 기본적인 성질」의 핵심요소 ... 305 프로토콜의 종류와 프로세스 관계의 종류 ... 305 8 종류의 프로토콜 ... 306 C/S MMO에서는 TCP를 이용한다 ... 307 「프로토콜의 기본적인 성질」과 그 대응 일람표 ... 308 프로토콜 설계의 기본 전략 ... 310 4.8 프로토콜 정의 자료 프로토콜의 API 사양(개관) ... 310 프로토콜 구현의 원칙 ... 311 백엔드에 기본/범용 기능을, 프론트엔드에 전용 기능을 구현한다 ... 311 백엔드에 프론트엔드가 의존하는 구조 ... 311 프로토콜은 스테이트리스&단순한 기능으로 한다 ... 312 외부로부터 오는 예외적 현상은 한 곳에 집중시킨다 ... 312 우수한 API의 호출 시퀀스 - 호출하지 않는 것이 우수!? ... 313 8가지 프로토콜의 기능/형태 개요 ... 316 gmsv 프로토콜 ... 316 loginsv 프로토콜 ... 316 msgsv 프로토콜 ... 317 dbsv 프로토콜 ... 318 worldsv 프로토콜 ... 318 commondbsv 프로토콜 ... 319 authsv 프로토콜 ... 319 logsv 프로토콜 ... 319 4.9 [4] 프로토콜 정의 자료 프로토콜의 API 사양(상세) ... 319 프로토콜의 API 사양(상세) 작업 ... 320 API의 함수 정의 ... 320 gmsv 프로토콜 ... 320 API 타입과 메시지의 특성 ... 321 loginsv 프로토콜 ... 322 msgsv 프로토콜 ... 323 dbsv 프로토콜 ... 324 worldsv 프로토콜 ... 325 commondbsv 프로토콜 ... 325 authsv 프로토콜 ... 326 logsv 프로토콜 ... 327 정수 정의 ... 327 API의 호출 시퀀스 ... 328 필요한 시퀀스도 - 복수의 프로세스가 관계하는 일반적인 처리란 무엇인가? ... 329 (1) 인증 ... 330 (2) gmsv의 캐릭터 작성 ... 332 (3) gmsv, msgsv에 로그인 ... 333 (4) gmsv로부터 로그아웃 ... 333 (5) gmsv의 캐릭터 이동 ... 333 (6) gmsv의 캐릭터 인벤토리 조작(숍, 트레이드) ... 334 (7) msgsv의 친구 목록에 친구를 추가, 삭제 ... 335 (8) 온라인 친구에게 메시지를 송신한다 ... 335 시퀀스도의 작성 포인트 ... 337 4.10 [4] 프로토콜 정의 자료 패킷의 포맷 ... 338 C/S MMO에서는 주로 TCP를 이용한다 ... 338 C/S MMO는 전용 바이트 배열을 가지는 ... 338 바이너리 프로토콜을 사용한다 ... 338 바이너리 프로토콜의 구현 ... 339 레코드의 크기 ... 339 헤더 ... 339 데이터 부분의 압축과 암호화 ... 340 구현상의 요령 ... 341 4.11 DB 설계도 ... 342 중요한 테이블의 설계는 프로그래밍을 시작하기 전에 ... 342 C/S MMO에서의 DB 구현의 역사적 변천 ... 343 70∼80년대 : 데이터의 영속화 없음. 부활의 주문 ... 343 90년대 : 파일로 저장 ... 343 2000년대 전반∼ : RDBMS ... 345 K Online에 필요한 테이블 추려내기 ... 346 영속화가 필요한 정보와 데이터의 포함 관계 ... 349 데이터의 특성과 개별 테이블의 준비 ... 352 DB의 성능 예측 ... 353 DB의 처리 성능과 사이즈 ... 353 테이블의 특성, 주의해야 할 테이블 ... 355 발행하는 쿼리의 내용 - read편 ... 356 발행하는 쿼리의 내용 - write편 ... 357 4.12 서버/클라이언트 소프트웨어+미들웨어 실전에 빠뜨릴 수 없는 개발 기반 ... 359 온라인 게임의 미들웨어 ... 359 C/S MMO용의 미들웨어 ... 360 풀 장비형 미들웨어 ... 360 소규모형 MMOG 미들웨어 ... 361 통신 미들웨어만을 이용 ... 362 개발 기반 소프트웨어 즉시 시험해 볼 수 있는 C/S MMO 개발 체험 ... 362 서버 관련 소프트웨어 ... 363 클라이언트 관련 소프트웨어 ... 364 4.13 프로그램을 작성할 때