2016년 6월 18일 토요일

게임 서버 프로그래밍(2)

 안녕하세요? 김성중입니다.

 이번에는 프로젝트의 성격과 맞는 서버 엔진을 구성하기 위해 몇 가지 조사를 하였습니다. 저는 기존에 게임 서버에 대해 아는 것이 별로 없다는 것을 밝혀두는 바입니다...ㅎㅎ

 게임 서버하면 가장 먼저 생각났던 것은 바로, NDC 2014에서 발표했던 데브시스터즈 홍성진님의 '쿠키런 1년, 서버개발 분투기' 이었습니다. 슬라이드에서도 볼 수 있듯이, 홍성진님은 부하에 견딜 수 있고, 업데이트가 쉬운 서버를 개발하기 위해서 서버 스팩으로 Java 8, Spring 4.0, MyBatis를 선택하였습니다. 사용자 데이터 관리에는 Couchbase 사용하였고, 게임 운영 데이터를 위해 MySQL Redis 사용하였습니다. 또한 개인적으로 가장 강력하다고 볼 수 있는.. AWS AutoScale을 사용하였습니다. AutoScale은 부하에 따라 서버 대수를 자동으로 조절해주는 서비스입니다. AutoScale 사용하려면 시스템 설계 단계에서 Scalability 대한 고려를 충분히 다음 설계를 해야겠죠?? 


 서버와 개발 관련한 경험도 부족하므로..  훌륭한 게임 서버의 아키텍쳐를 벤치마킹 할 필요가 있다고 생각합니다. 다만 스팩을 모두 가져다 쓰기 보다는 자신 있는 것을 선택해서 사용하는 것이 바람직하다고 생각합니다. 멤창이 제작하는 게임은 네트워크 플레이를 지원하지 않는 모바일 게임일 것이므로, 서버가 하는 일은 단순히 요청을 처리하고 데이터베이스에 기록하고 응답을 주는 일 뿐입니다. 따라서 불필요하게 복잡한 서버 아키텍쳐를 사용할 필요도 없습니다.

 처음엔 Boost.Asio 라이브러리를 이용하여 저수준 I/O 프로그래밍을 하려고 하였지만.. 생산성과 Scalability 등 여러 면을 고려해 봤을 때, 이보다는 데이터베이스만 증설하면 게임 로직 서버 자체의 Scalability를 쉽게 확장 할 수 있는 웹 서버를 채택하는 것이 바람직하다고 생각하였습니다.

 일단 웹 서버의 장점은 명확합니다. Scalability 면에서는 데이터베이스 외에는 상태를 저장하지 않기 때문에 로직 서버에 부하가 걸리면 AWS AutoScale과 같은 것을 이용하여 로직 서버만 증설해주면 됩니다. 또한 Unity에서는 HTTP 요청을 쉽게 처리하기 위한 WWW 클래스를 제공합니다.

 따라서 Spring, Node.js, Django, Ruby on Rails 등 많은 웹 서버 프레임워크 중 저는 제가 가장 자신있는 웹 서버 프레임워크인 Node.js를 사용할 계획입니다. Node.js에는 REST API를 쉽게 작성할 수 있는 resify 모듈, MySQL에 접근하기 위한 드라이버인 node-mysql 그리고 couchbase에 CRUD를 구현할 수 있는 환경 등 필요한 기능을 충분히 제공하고 있기 때문입니다.

댓글 없음:

댓글 쓰기