ved_Rony
article thumbnail

온라인 게임에서 게임 서버

컴퓨터 네트워크 어딘가에 서버 프로그램이 실행된 상태로 있으면, 여러 사람이 그 서버에 접속해서 게임을 즐긴다.게임 서버를 게임 플레이어가 자유롭게 가져다 실행하는 것도 가능했지만, 일부 게임은 일반 대중에게 공개되지 않고 게임 사업자만 독점적으로 게임 서버를 실행해 놓기도 했다. 지금 온라인 게임은 사실 이러한 형태이다.

 

서버의 역할

싱글 플레이에서는 모든 입출력과 연산 처리가 컴퓨터 한 대 안에서 일어난다. 따라서 컴퓨터 네트워크 자체가 쓰일 일이 없다. 그러나 온라인 게임에서는 플레이어 한 명 이상이 게임을 즐기기 때문에 플레이어 세 명 이상이 한 공간에 있다면, 컴퓨터 네트워크를 통해 상대방 모습이 생생하게 전달되어야 한다.

 

대부분 온라인 게임에서는 클라이언트에서 게임 로직을 처리하는 역할 일부를 서버로 옮긴다. (개인적으로, tricky하다고 느끼는 부분이다. 어디까지를 서버가 부담하게 해야하는 지에 대한 경계가 아직 모호하다...그때그때 상황에 따라 적용 중이지만 정답이라고 단정 짓기는 어려운 상태...)

 

 

게임 클라이언트와 서버의 상호 작용

상호 작용은 크게 네 가지로 구분한다.

  • 연결: 최초로 클라이언트가 서버와 데이터를 주고받을 준비를 하는 것으로 클라이언트에서 서버에 연결을 요청하면 서버는 이를 수락하여 클라이언트와 연결을 맺는다.
  • 요청-응답: 연결이 되면 클라이언트는 서버에 메시지를 보내고 서버는 이를 처리한 후 결과를 응답한다.
  • 능동적 통보: 클라이언트는 서버에 어떤 상황을 통보한 후 서버 반응을 굳이 받지 않아도 될 때가 있다. 반대로 클라이언트가 요청을 보내지 않아도 서버에서 능동적으로 통보해야 할 때도 있다.
    • 능동적인 서버??

  • 연결 해제

 

게임 서버가 하는 일

게임 서버가 주로 하는 일은 다음과 같다.

  • 여러 사용자와 상호 작용
  • 클라이언트에서 해킹당하면 안 되는 처리
  • 플레이어의 상태 보관

 

예를 들어 어떤 플레이어가 다른 플레이어를 공격했을 때 클라이언트 내 판정을 서버에서 처리하면, 클라이언트에서 해킹을 당하지 않도록 방어할 수 있는 등 여러 장점이 있다.

 

 

 

게임 로직을 서버에서만 처리할 경우?? 즉, 게임 로직 처리는 서버가 전담하고 입력받기와 렌더링만 클라이언트에서 처리할 때

-> 개발은 편하다. 로직적으로 순차적으로 돌아갈수 있기 때문이다. 하지만 레이턴시의 문제가 있다.

레이턴시는 두 기기 간에 데이터를 최소량 전송할 때 걸리는 시간을 의미한다. 클라이언트가 서버로 입력 정보를 전송할 때 레이턴시 시간에 따라 더 늦게 서버에 도착할 것이고 이는 게임 진행 속도가 불규칙하게 느려 보일 것이다. 즉, 렉 걸린 상황과 같다.

 

따라서 기본적으로 서버에서 모든 게임 플레이 판정을 할 수 있게 만들되, 쾌적한 품질과 타협하기 위해 일부 처리를 클라이언트에서 담당하도록 구현하는 것이 현실적이다.

 

게임 서버의 품질

게임 서버 품질을 위해 서버를 개발할 때 목표로 두어야 하는 것은 다음과 같다.

  • 안정성
    • 게임 서버가 얼마나 죽지 않는가
    • 게임 서버가 얼마나 오작동을 하지 않는가
  • 확장성
    • 서버를 얼마나 많이 설치할 수 있는가
    • 사용자 수가 늘어나더라도 서비스 품질이 떨어지지 않고 유지되는가
  • 성능
    • 기본적으로 얼마나 빠르게 처리하는가
  • 관리 편의성

 

플레이어 정보의 저장

그래서 대다수 온라인 게임은 플레이어 정보를 보안 이슈 때문에 서버에 저장한다. 플레이어가 클라이언트를 실행한 후 사용자 ID와 비밀번호를 입력하면, 서버는 사용자가 누군지 확인한 후 해당하는 사용자의 플레이어 데이터를 디스크에서 로드한다. 그리고 불러온 플레이어 정보 중 필요한 정보만 골라 플레이어에게 보여준다.

 

서버 구동 환경

온프림 서버와 클라우드 서버 비교

 

profile

ved_Rony

@Rony_chan

검색 태그