게임 서버 관련된 책들을 보면
모든 책이 그런 것은 아마 아니겠지만 (사실 아닐꺼라고 믿고 싶다) 대부분 기초적인 네트웍 프로그래밍 – 소켓 사용, Win 32 혹은 소수지만 버클리 소켓 사용 – 이나 단순한 수준의 멀티스레드 프로그래밍에 그 내용 중 상당량을 소진한다. 그리고 정작 중요한 modern한 I/O 모델을 이용한 서버 프로그래밍에 관한 설명은 정말이지 미흡하기 그지없다.
사실 게임 서버, 특히나 애들 장난감이 아니라 _MMOG, MMORPG_의 서버를 만드는 법을 맛보게라도 해주려면 이런 내용들을 다뤄야 할 것이다.
- 대용량 네트웍 I/O를 다루는 법. 게임 서버 프로그래밍 책이라고 써놓고는 책 내용 절반 ~ 2/3을 할애해가면서 select, EventSelect 같은 것만 설명해주는 것은 좀 문제가 있다. Win32의 I/O completion port; IOCP나 linux의 /dev/epoll 같은 것을 사용해서 어떻게 네트웍 I/O를 처리할지 설명해줘야 한다. 단순히 API 사용법 뿐만 아니라 소켓 버퍼 관리 문제, 패킷 생성 / 메시지 해석 문제 등 많은 부분이 있는데 이에 대한 최소한의 설명이라도 있어야 하겠다.
- 멀티스레딩을 사용할 때의 동기화/타이밍 문제. 사실 시스템 프로그래밍에 가까운 것이지만 서버 프로그래머들이 하는 거의 모든 코드의 바닥에는 멀티스레딩 문제가 깔려 있다. 물론 OS나 시스템 프로그래밍 적인 지식이 깔려있어야하지만 그래도 몇 가지 시스템 프로그램 모델들은 설명해줘야 할 것이다.
- 서버 사이드 스크립팅. 서버에서 모든 것을 다 C/C++. 요즘이라면 C#도 가능할지도 모르지만 여튼 이런 류의 _주류 언어_로 하는 것은 힘들다. 많은 부분은 데이터기반; data-driven하게 짜야하며 그런 부분에서 동적으로 사용하기 쉬운 스크립트 언어들 – lua, GameMonkey, … – 이 빛을 발한다. 게임 좀 개발했다는 회사들치고 내부 스크립트 언어나 잘 커스터마이징된 기존 스크립트언어가 없는 곳은 아마 없을걸?
- 게임 로직의 동기화문제. 여러 개의 게임 객체들이 _하나의 상태_를 공유하게 되는데, 이를 동기화하면서도 클라이언트 쪽에서 예쁘게 보이게 하기 위한 방법들은 상당한 다양성과 장단점들을 가지고 있다. 이런 것에 대한 이해가 게임 월드 자체를 시뮬레이트하는 쪽에서는 필수적으로 알아야 한다.
- 각 네트웍/시스템 프로그래밍 API의 코너 케이스에 해당하는 부분들에 대한 간략한 리스팅. 게임 서버 프로그래밍을 할 때에는 네트웍/멀티스레딩 등등에서 정말 수많은 함정들이 기다리고 있다.
- 인증 / 보안 관련 이슈들. 클라이언트는 적의 손에 란 말이 있다(물론 서버도 약간은 적의 손에 있다 ). 클라이언트가 사실 상 해킹당한 상태에서도 서버에서 이를 인지하고, 대응하기 위한 방법들을 설명해줄 필요가 있다.
자 이정도의 내용을 다루는 책이 있으면 누가 좀 소개시켜줘 봅시다. 후배들이 책 좋은거 말해달랠 때 추천이라도 해줄 수 있게.