게임 서버와 클라이언트의 개념과 역할에 대해 설명하는 페이지이다.
게임 서버와 클라이언트
- 클라이언트: 게임을 플레이하는 컴퓨터
- 서버: 클라이언트들이 참가할 수 있는 네트워크 공간을 마련해주는 컴퓨터, 호스트(Host)
과거에는 인터넷 연결이 안되는 컴퓨터가 많고, 속도가 느려 대부분의 패키지 게임에서는 컴퓨터 네트워크를 사용하지 않았다.
하지만 인터넷이 보급되면서 여러 사용자가 인터넷을 통해 플레이하는 방식의 게임이 등장했고, 플레이어의 상태를 저장하는 곳이 필요하기 때문에 취합하고 유지해야하는 역할이 필요해졌다.
게임 서버의 역할
- 상호작용
- 데이터 유지 및 보관
- 해킹에 취약한 데이터 처리
로컬 게임 혹은 싱글플레이 게임에서는 모든 입출력과 연산이 플레이하는 컴퓨터에서 모두 일어나기 때문에 네트워크를 사용할 일이 없다.
하지만 네트워크를 사용하는 온라인 게임의 경우 여러 클라이언트간의 상호 작용을 중재하는 곳이 있어야 한다.
특히 온라인 게임에서 해킹 및 조작으로 치명적일 수 있는 데이터를 관리하고 유지하는 곳과 클라이언트끼리 소통할 수 있는 역할을 제공해준다.
기본적으로 클라이언트와 서버의 소통은 요청과 응답으로 이루어지게 된다.
게임 서버의 종류는 크게 3가지로 나누어 집니다.
게임 서버의 종류
- 데디케이티드 서버 (Dedicated Server)
- 리슨 서버 (Listen Server)
- 피어 투 피어 (peer to peer)
데디케이티드 서버
전용 서버라고 부르는 데디케이티드 서버는 플레이어로서 게임에 직접 참가하지 않는 형태이다.
호스트가 서버를 생성시키면 클라이언트들이 서버에 참가하는 방식이고, 게임이 종료되면 서버도 같이 종료되는 형태로 레이드 던전이나 대전게임에서 주로 사용한다.
리슨 서버
일명 C/S 서버로 불리며 플레이어가 서버를 선택하여 접속하는 형태이다.
MMORPG에서 주로 사용하고, 서버에서 모든 클라이언트의 명령을 처리하며 로직을 처리를 전담한다. 서버가 수만명의 클라이언트의 처리를 담당하기 때문에 부담이 크고 응답성이 떨어지기 때문에 액션성이 강하거나 컨트롤이 많은 대전, 전략 게임에서는 잘 사용하지 않는다.
피어 투 피어 서버
일명 P2P 서버로 불리며, 게임에 참가한 클라이언트 모두가 호스트 역할을 한다.
클라이언트가 직접 연산하고 그 값을 다른 클라이언트에게 전달하는 방식으로 서버에서 처리해야 할 부담이 적고 응답이 빠르기 때문에 슈팅, 액션, 대전, 레이싱, 스포츠 장르 게임들이 많이 사용한다. 리슨 서버와 비슷한 맥락이 있지만 호스트가 나가도 다른 클라이언트가 세션이 끊기지 않는 점이 있다.
게임 서버 개발에는 2가지 기술이 있다.
- 실시간 온라인 게임 (Stateful)
- 비실시간 비동기 온라인 게임 (Stateless)
실시간 온라인 게임 (Stateful)
서버와 클라이언트가 실시간으로 연결이 유지되어 있으며 상호작용이 끊임없이 이루어진다는 점이 특징이다. 때문에 MMORPG, MOBA(AOS), FPS, 대전게임 등 다양한 장르에서 사용하며 모든 클라이언트는 서버에 접속하여 연결을 유지한 상태로 플레이를 진행한다.
게임 로직과 판정 등 모든 데이터 처리와 결정은 서버가 주도적으로 진행하는게 특징이다.
비실시간 비동기 온라인 게임 (Stateless)
유저간 상호작용이 없거나 매우 제한적인 게임으로 싱글 플레이 게임에 가까운 온라인 게임이다.
수집형 게임, 방치형 게임, RPG, 퍼즐 등 특정 장르를 가리지 않는다.
다른 유저의 플레이 결과(선물, 랭킹확인 등) 실시간적인 교류가 제한적이고, 가볍고 손쉬운 모바일 게임에서 자주 사용되는 기술이다.
최근에 스팀에서 파스모포비아(Phasmophobia), 유령 찾기 게임이라고 알려진 게임을 플레이한 적이 있다.
짧게 파스모라고 부르겠다.
파스모는 4인 멀티 협동 게임이며 플레이어가 유령의 집(미션)에 입장하기 전에 준비하는 공간인 로비(Lobby)가 있고, 미션을 진행하는 공간이 나뉘어져 있다.
로비 화면 | 미션 공간 화면 |
---|
로비에서는 싱글플레이, 멀티플레이를 결정할 수 있고 멀티플레이는 플레이어가 직접 호스트가 되어 서버를 생성하고 다른 클라이언트가 호스트의 서버에 참가하는 방식이다.
클라이언트가 호스트 서버에 참가하게 되면 호스트의 로비에 참여한 클라이언트의 플레이어블 캐릭터가 생성되고 함께 미션을 진행할 수 있다.
다른 멀티 협동 스팀게임과 동일하게 호스트가 이탈 시, 참여한 클라이언트는 모두 세션이 끊기게 되는 점과 실시간 로직 처리와 상호작용이 적용되기 때문에 C/S 방식의 서버인 것으로 확인되며 실시간 온라인으로 작동하는 형태이다.
멀티플레이 대기방 화면또한 파스모는 크로스플레이 라는 옵션이 존재한다.
옵션 화면크로스플레이는 다른 플랫폼끼리 멀티가 가능하도록 설정할 수 있는 옵션이며, 각 플랫폼의 서버끼리 소통이 가능하도록 이어주는 것 같은데 어떻게 개발되는지는 자세히는 모르겠다..
옵션을 키고 껐을 때, 멀티플레이에 나타나는 서버의 개수가 많이 차이난다.
오늘은 클라이언트와 서버의 개념, 역할, 기능에 대해 알아봤다.
개인적으로 한 게임에 여러 서버 방식이 들어갈 수 있다는 점이 흥미로웠다.
특히, MMORPG의 경우 게임 전체를 총괄하는 서버가 있고 인던이나 결투장같은 서브 컨텐츠에서 필요한 서버가 여러개 있다는 점이다.
게임의 특징에 맞는 서버를 고르는 기술과 서버 최적화나 개선을 하게된다면 어떤 부분에서 작업을 해야하는지 알게되는 시간이 되었다.
아직 애매하게 이해한 부분이 많아서 논문자료를 참고해보는게 좋을 것 같다.
참고 자료
1. 게임 서버와 클라이언트 No.1
2. 게임 서버와 클라이언트 No.2
3. 게임 서버의 종류 정리
4. 온라인 게임 Peer to Peer(P2P) 방식과 Client/Server (CS)
5. [DST]데디케이티스 서버 구축 방법
6. 나무위키 - 게임 서버