목차 일부
이 책에 대해서 ... 24
이 책의 구성 ... 26
샘플 게임&동영상 ... 28
이 책의 보충정보 코너에 대한 안내 ... 30
감사의 말씀 ... 30
기본 용어의 정리 ... 31
제0장 [속성] 온라인 게임 프로그래밍
0.1 [온라인 게임 프로그래밍을 위한] 네트워크 프로그래밍의 기초 ... 41
네트워크 프로그래밍은 필수(!) ...
더보기
목차 전체
이 책에 대해서 ... 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 프로그램을 작성할 때
더보기 닫기