목차
이 책에 대해서 ... 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 프로그램을 작성할 때
닫기