게임 서버
1. 개요
'''게임 서버'''(Game server)란 인터넷 상에서 여러 플레이어가 같이 게임을 할 수 있게 하기 위한 프로그램이나 해당 프로그램을 기동중인 컴퓨터를 말한다. 호스트가 누가 되느냐를 기준으로 분류하면 데디케이티드 서버와 리슨 서버, Peer to peer로 나눌 수 있다.
2. 로컬 플레이의 연장
고전적 멀티 플레이의 의미로, 오락실의 2인용 같은 개념을 PC에서는 원거리 접속으로 대신하곤 했다. 플레이어 어느 한 쪽이 호스트를 맡아, 다른 플레이어의 접속을 받아들여 끼리끼리 플레이하는 방식으로, 스타크래프트나 워크래프트 등의 게임에 존재한 '모뎀 플레이' 같은 것들이 그러했다. 이러한 방식은 당연히 모뎀의 경우 1:1 연결, 네트워크의 경우 국지적인 네트워크로 한정되어 진정한 의미의 온라인 게임 플레이라 보기는 어렵다.
만일 호스트 컴퓨터에 문제가 생긴다면 그 게임 전체가 끝날 수 있고, 클라이언트만 다운된다면 그 사람만 튕겨 나갈 수도 있다. 후자는 프로그램 구현도에 따라 다르다. 주로 게임 결과가 영속적이지 못하다.
스타크래프트 2, 디아블로 3부터는 이런 방식의 멀티플레이를 허가하지 않는 방침을 세웠다.
3. 원격 플레이어의 중계
배틀넷 같은 경우가 이런 케이스가 된다. 한 곳에서 커다란 '로비'를 열어, 통일된 프로토콜로 접속하기만 하면 각자의 네트워크 계층이 달라도 한 곳에 모여 게임을 즐길 수 있게 해 준 것이다. 물론 이 경우에도 호스트는 존재하고 배틀넷 서버는 이들을 그저 중계만 해 주는 존재였다. 비슷한 경우로는 msn game zone 같은 것이 이런 것이다.
이런 네트워킹 구조는 호스트의 컴퓨터에서 모든 게임 내 연산이 이뤄지므로 중계 서버의 네트워크 상태 뿐만 아니라 호스트의 컴퓨터 연산 능력과 네트워크 상태도 게임 플레이에 큰 영향을 미치게 된다. 또한 호스트가 클라이언트를 조작해서 거짓 값을 보내는 방식의 치트에 대해 보안이 취약해진다.
그러나 이런 서버들은 초기 중계만 해 주었던 역할에서, 보안에 취약하여 치트를 하는 사용자들이 늘어나자 이를 막는 기능들을 추가하는 식으로 점점 고도화되었다.
4. 온라인 게임에서의 게임 서버
진정한 의미의 온라인 게임 서버는 게임의 연산을 원격지의 호스트가 모두 관리하며 그 내용도 저장하게 된다. 그래서 게임을 실패해도 리셋하고 다시 하는 방법 등의 일체 통하지 않는다. 이런 온라인 게임은 돈을 내고 게임을 빌려서 한다는 개념이며 서버 또한 게임 프로그램의 일부, 아니 대부분을 차지한다.
초기의 게임 서버는 대충 어리숙하게 만들어서 게임의 내용을 로컬에 저장했다가 해커들에게 털려서 각종 핵에 몸서리 치는 일도 많았다. 요즘은 기술이 많이 발전했지만, 항상 해커들의 해킹 시도에 노출되어 있다.
게임 서버는 24시간 돌아가며, 수천명 (대략 1서버 pc에 4-5천명 정도) 이 동시에 붙어서 게임을 하게 되는데 이정도 사용자들이 동시에 게임을 하기 위해서는 엄청난 연산이 필요하다. 5천명의 유저가 한 발자국씩 걸을 때 마다 서버에 신호가 밀리세컨드 단위로 온다고 생각을 해보라. 이를 위해 서버는 항상 병렬분산처리를 하게 된다. 서버 이외에 흔히 볼 수 있는 '채널'이라는게 존재하는 이유가 바로 그것이다. 단순히 1개 서버라도 그것을 유지하기 위해서는 수 대의 보조 pc들이 필요하다. 병렬 분산 처리라는 이름에 맞게 GPGPU를 사용하는 게임서버도 있다. 대표적으로 GeForce GTX를 사용하는 넥슨 게임서버가 있다.
그리고 저렇게 유저가 신호를 보내며 발생시키는 트래픽은 전부 '비용' 으로 되돌아온다. 유저들이 접속하고, 걷기만 해도 그 신호는 전부 접속비로 누군가는 비용을 부담해야 한다. 월 정액 게임이라면 유저가 일정 부분을 낸다고 볼 수 있겠지만 부분유료화 게임이라면? 게임 회사는 정말 엄청난 도박을 하고 있는 것이다.
일반적인 온라인 게임은 게임 개발사 혹은 퍼블리셔만이 직접 서버를 띄워서 운영한다. 그리고 게임 플레이어는 직접 서버를 띄우는 것이 기술적으로도, 법적으로도 불가능하다.[1][2]
게임 서버는 호스트와 달리 다운될 경우 게임을 하던 사람들이 몽땅 털려나가 버린다. 심지어 전세계 혹은 일부 국가 내의 PC방에서 게임하던 사람들까지 모두 털려나간다.
따라서 게임 서버는 첫째도 안정, 둘째도 안정, 셋째도 안정이 중요하다. 소스가 복잡해지고 스파게티 코드가 되어도 일단 상용화가 시작되면 무서워서 소스에 손도 못 댄다. 심지어 마법이 나오는 게임에서 법사가 서버를 뻑내면 법사 직업을 막아야 할 지경. 이런 마당에 맵이랑 퀘스트까지 싹 엎어버리는 월드 오브 워크래프트 대격변은 완전 깜놀.
게임 서버 운영 비용도 만만찮다. 소문에 의하면 리니지 서버 유지비가 일년에 백억원에 육박한다고 하며, 월드 오브 워크래프트는 서버 유지비로 하루에 1억 6천만원이 사용된다. 접속자가 적은 비인기 게임도 서버 유지 비용만 한 달에 최소 5백에서 1천만원은 그냥 나간다. CBT니 OBT니 하는 기간동안은 수익도 없고...
온라인 게임 초창기에는 서버당 컴퓨터 한 대만 사용하는 일이 많았지만, 시간이 지나면서 컴퓨터 한 대 만으로는 용량을 감당하지 못하는 경우가 많아졌기 때문에 요즘은 컴퓨터 여러 대를 사용하여 서버 하나를 두는 경우가 많다. 아무리 작은 온라인 게임이라도 메인 서버와 DB 서버는 따로 구분하고, 여기서 더 세분화되면 채팅 서버, 존 서버 등등 기하급수적으로 늘어난다. 큰 규모의 온라인 게임이라면 한 개의 서버 당 열 개에 가까운 컴퓨터로 구성되는 경우도 있다. 게임사가 서버 하드웨어를 직접 관리하는 것도 어렵기 때문에 IDC를 이용하는데, 서버가 많을수록 여기에 서버를 두는 공간 임대비용(코로케이션)도 기하급수적으로 올라간다. 거기다가 패킷이 실시간으로 오가기 때문에 트래픽이 대단히 많아서, 다른 고객과 회선을 공유해서 사용할 수 없다. 별 수 없이 단독으로 회선을 써야 하는데, 이럴 경우 회선 이용료도 안드로메다로 간다. 서버 유지비가 저렇게 많이 들어가는 이유는 이것.
엔씨 소프트의 모 MMORPG의 경우 KT에 250Gbps 트래픽을 예상한다고 했다가 KT가 그럴리 없어라고 하다가 정말 트래픽이 그렇게 몰리자, 긴급 증설을 했다는 인프라 업계 도시 전설이 있다.
블리자드에선 오래된 월드 오브 워크래프트 서버를 경매에 부치기도 했다.#
최근 모바일 게임이 대중화되면서 AWS, Azure 등의 클라우드 서비스를 이용하여 사용한 시간과 트래픽 만큼 과금되는 서비스를 이용하게 되었다. 모바일 게임의 특성상 서비스 초기 피크 타임 후, 유저 이탈기의 차이가 극단적이기 때문에 클라우드 서버를 사용하는 것이 이득이다. MMORPG를 위해서 서버 수백 대를 구매했다가 몇 달 후 고철 값이 된 경험이 있다면 클라우드 서버의 이용은 필연적이다. 일례로 삼성전자가 퍼블리싱했던 던전 앤 파이터가 퍼블리싱 주체가 바뀌게 되면서 삼성전자가 던파용으로 구매했던 3천대의 서버가 바로 불용자산이 된 전례가 있다고 한다.
온라인 게임, 그 중 MMORPG의 경우 게임이 터지면 서버와 IDC, CDN 비용은 수익의 1%도 되지 않기 때문에 펑펑 쓰는 것이 당대 트렌드였다. 하지만 모바일 시대 유저 당 예상 수익이 1천원이 안되는 상황에서 과도한 인프라 비용은 게임 회사 존망에 달린 문제가 될 수 있어 최적화하여 사용해야 한다.
클라우드 서버는 트래픽에 따라 서버를 늘릴 수 있고, AWS 람다, Azure Function 등 서버리스아키텍처를 이용해서 극단적으로 비용을 절감할 방법이 있다. 단점은, AWS 람다와 같은 경우 SLA 보장이 없어 장애가 나면 AWS에서 한푼도 보상해주지 않는다는 것이다. 클라우드 서버를 구축할 때는 지역 이중화와 서비스 장애를 고려해서 설계해야한다. (그러면 인프라가 2배가 되기 때문에 비용도 2배가 된다.)
참고로 유저들이 게임 운영에 열받아서 디도스를 할 경우나, 금전적 목적, 경쟁사의 협박용으로 디도스를 하는 경우가 있는데 100% 잡힌다. 중소 업체들이 번거롭기 때문에 안하는 것일뿐이다.
5. 게임 서버 프로그래머
게임 회사에서 일반 프로그래머도 프로그래머지만, 특히 게임 서버 프로그래머는 깡패다. 아무리 좋은 게임 시스템이라도 게임 서버 프로그래머가 못 만든다고 하면 '''진짜로 못 만드는 거다.''' CBT나 OBT를 시작하면 게임 사용자들은 "얘네들은 이따위로 서비스 열어놓고 집에서 잠이나 처자냐?"라고 생각하기 십상인데, 사실은 그 반대다. 서버 연 날부터 서버 프로그래머는 일주일간 집에는 다 갔다고 보면 된다. 회사 입장에서도 서비스 장애가 생겨서 점검에 돌입하면 매출도 나오지 않고 점검 시간에 비례해서 손해를 보기 때문에, 빨리 문제를 찾아서 해결해야 하는 책임을 서버 프로그래머가 지게 된다. 서버 열면 욕이란 욕은 다 듣는 고달픈 직종이다.
게임 서버 프로그래머는 클라이언트 프로그래머와 달리 사람들에게 보여주는 게 없어야 한다. 서버 프로그래머의 존재감은 고작 랙 아니면 서버 다운뿐이다.[3]
한국의 게임 서버 개발 기술과 경험은 세계 최고 수준이지만, 한국의 뒤를 이어 온라인 게임 강국이 된 중국이 빠르게 따라잡고 있다.
모바일 게임에서는 웹 기반 서버로 게임 서버를 만드는 것이 일반적인 추세이다. 다만 리얼타임이나 복잡한 로직이 있을 때는 상용 엔진을 구매해서 개발하기도 한다.
게임 서버를 위한 상용 엔진으로는 다음과 같은 것들이 있다. 자세한 것은 게임 엔진 참조.
- Gamesparks
- Photon Server, Photon Cloud
- Amazon Lambda, Amazon GameLift
- 프라우드넷
- Smartfox Server
- 텐센트 G 클라우드
- Playfab
- NHN Toast 게임 클라우드
- Monobit 엔진
- App42
- BrainCloud
- ElectroTank
- 뒤끝(게임 서버)
여담이지만, 멀티플레이를 싫어하는 서버 프로그래머도 많다. 게임 서버 프로그래머쯤 되면 대개 게임을 좋아하기는 하지만, 좋아한다는 게 꼭 잘한다는 뜻은 아니니까. 사실 이건 QA를 제외한 대부분의 게임개발 분야에 해당하는 이야기이기도 하다. 자기가 만든 게임에서 유저에게 일방적으로 학살당하고 있다 보면 직업에 대한 회의감이 몰려들 때도 있다(...).
6. 게임 서버 운영자(GM)
TRPG에서 따온 말로 사전적 의미의 GM은 게임 내적으로 일반 유저는 접근할 수 없는 상위 권한을 가진 주체이다. 주로 권한을 이용해 게임 내 일시적인 문제나 분쟁을 해결하는 역할을 한다.
울티마 온라인 같은 체계가 제대로 잡히지 않았던 온라인 게임 초기에는 개임 개발자가 운영자를 겸임하기도 했지만 그것과는 별개로 게임 개발자와 GM은 서로 다르다.
게임 플레이어들은 흔히 운영자(GM)들이 게임 서비스와 관련된 모든 업무를 한다고 믿지만 그렇지 않다. 버그 패치나 서비스 안정화, 밸런싱, 컨텐츠 업데이트 등은 운영자 뒤에서 활동하는 게임 개발자들의 몫이며 운영자는 그들의 창구다. 운영자는 게임 내에서 상위 권한을 가질 뿐 게임의 소스 코드엔 손을 댈 수 없다.
게임 운영자 문서 참고.
[1] 방을 만들어 플레이하는 일부 게임의 경우 서버 자체로는 기술적인 한계가 있어서 방을 만든 사람이 클라이언트 자체적으로 서버를 세우는 격이 되는데 이쪽은 또 다르다.[2] 프리서버는 기술적 결함을 뚫고 만들어진 사설 서버이지만, 사실상 불법 행위이다. 망해서 닫은 게임의 서버를 돌리려면 껍데기인 클라이언트 만으로는 불가능하고, 서버 코드 자체를 어떻게든 가져오거나 유저들이 맨 바닥에서부터 직접 짜올리는 수 밖에 없다.[3] 물론, 서버 관리 팀이 소스를 헤집어 간이 배 밖으로 나오는 짓을 하는데 서버 안정성이 강화돼서 유저들에게 찬사를 듣는 경우도 있다. 해당 게임이 2011년 중순에 온갖 욕을 먹을 당시, 서버 최적화 전담 팀이 발표하는 소스 코드 최적화 뉴스가 유일한 낙이었던 시절도 있었다.