C++이후 세대의 언어로 대용량 게임 서버 만들기?

요즘 저거에 대해서 생각을 좀 하게 되었는데 – 특히 Java를 써서 - 실제 가능성 여부는 둘째치고 일단 대용량 게임 서버를 만든다면 필요한게,

  1. 대용량 I/O. 특히 서버 쪽에서 처리하기 쉬운 형태일 것
  2. 서버 쪽에서 사용 가능한 스크립트 레이어가 있을 것 – 자체 제작도 좋고 Lua, GameMonkey 같은 류의 스크립트랑 연동이 가능할 것
  3. Multi-threaded 환경에서의 적정 수준의 locking-primitive가 제공될 것
  4. 속도 – 해당 서버의 패러다임에서 충분한 성능(eg. 접속자 수, 반응 시간 등)을 얻어낼 수 있을 것
  5. 게임의 규모가 커졌을 때의 대응 방식

정도일 것 같은데. 사실 1번 문제는 OS에 상당히 의존적인1 I/O 모델을 어찌 가져다 쓰느냐에 달려있으니 Java 언어 수준의 문제다. 2는 Lua java bind가 있으니 일단 다른 언어들도 충분히 가능한 것 같고(Lua의 경우 C++보다 오히려 Java 쪽에서 쓰기 좋은듯; 속도는 모르겠고).

문제는 3, 4, 5다. 사실 Java로 대용량 서비스를 하는 경우는 그런대로 있다. 학교 수강 신청 페이지도 JSP이긴한데 – 덕분에 성능 무지안나온다. JSP로 만들 서비스가 아니었다고밖엔. 사실 서비스 자체가 개념적으로 독립적인걸 여러개 처리하는 경우면 서버만 늘리면되니까 크게 문제가 안되는데, 게임 같이 하나의 “세계"를 공유하는 경우에는(특히 MMORPG?) 서버 자체의 성능 이슈인 3, 4, 5의 문제가 발생한다.

현재에만 따져보면 3, 4, 5 그리고 1번 이슈 약간해서 Java로는 좀 부족하지 않느냐 하는 것이 내 판단이지만. 앞으로 가까운 미래에 어찌 될지는 뭔가 내 예측 범위가 아닐까 과거에 집착하다가 미래를 놓치게 되는 것만큼은 피해가고 싶은데; 앞으로 한 4일 정도는 C++ addicted에서 잠시 벗어나야겠다.

사실 굳이 Java가 아니어도 C++/CLI나 C#같은 애들도 있으니까; C++/CLI나 C#의 스레딩 모델 자체가 상당히 C++ 스러운 짓도 할 수 있고해서(물론 몽땅은 아니지만) 맘에 드는데 과연 이걸로 서버를 몽땅 짜고도 괜찮을까하는건 좀 의심스럽긴해서.

사실 지금 일반 응용 레벨에서 C++의 시대는 거의 끝나가고 있다. 물론 갑자기 사라진다기보단 서서히 희미해져가는 것이겠지만. 그런 의미에서 이게 바뀔만한 시점도 판단해야겠고 주말에도 아주 고민이 사라지질 않는구나;


  1. 예를 들어 파일 디스크립터 / 소켓을 일일이 검사하지 않고도 뭔가를 하려면 사실 상 Linux의 /dev/epoll Win32의 IOCP (GCQS) 나 FreeBSD의 kqueue를 써야하는데, Java에서 이걸 어떻게 래핑해서 보여주느냐가 좀 궁굼하다. 그냥 사실 상 쓰지 않느냐, 아니면 밑 단에 따라 된다/안된다로 갈리냐하는건 내가 잘 모르니 혹시 가능하거나/사용할 수 없다거나 하는 정보를 알면 좀 알려줍시다. ↩︎