[TIL] 게임 서버와 클라이언트 - 서버의 역할, 클라이언트와 서버의 상호 작용

KYJ의 Tech Velog·2024년 3월 11일
0

서버의 역할

싱글 플레이 게임을 컴퓨터가 처리하는 과정에 대해 알아봅시다. 다음과 같은 처리가 모두 컴퓨터 한 대에서 일어나게 됩니다.

  • 입력받기 : 키보드, 마우스, 터치 스크린, 마이크, 카메라 등 컴퓨터가 정보를 획득
  • 게임 로직 처리 : 게임 정보를 담고 있는 상태인 세션은 보통 1초에 60번 상태 변화. 해당 과정 중에는 게임 플레이에 대한 판정이 이루어짐(ex. 캐릭터 간의 데미지 계산)
  • 렌더링 : 변화된 상태를 출력 장치에 표시

싱글 플레이 게임에서는 네트워크를 사용할 일은 없겠군요.

앞서 설명드린 세 과정을 반복하는 것을 게임 루프라고 합니다.


온라인 게임에서는 게임 루프가 어떻게 처리가 될까요? 컴퓨터 한 대에서 모든 것을 처리할 수는 없을 것입니다. 플레이어들이 서로 행동하는 모습이 상대방에게 보이게 됩니다. 여러 명의 플레이어가 한 공간에서 싸운다면, 네트워크를 통해 서로 간의 모습이 생생하게 전달되어야 하겠죠.

싱글 플레이 게임과는 달리 플레이어 간의 상호 작용을 중재해줄 누군가가 필요할 것 같습니다. 여기서 등장하는 것이 서버와 클라이언트라는 개념이죠. 플레이어가 직접 만지는 디바이스를 클라이언트라고 부릅니다. 온라인 게임에서 클라이언트의 게임 로직을 처리하는 역할 중 일부를 떼어 내 서버에서 처리합니다. 그리고 클라이언트와 서버 간에는 네트워크를 통해 서로 데이터를 주고받습니다.

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

게임 클라이언트가 서버에 메시지를 전달하면 서버는 이를 수신해서 내용에 따라 특정한 행동을 합니다. 반대의 경우도 마찬가지이죠. 이처럼 메시지가 오고 가는 과정을 상호 작용이라고 합니다.

상호 작용을 크게 구분해보자면 네 가지로 구분됩니다.

  • 연결
  • 요청-응답
  • 능동적 통보
  • 연결 해제

연결

최초로 클라이언트가 서버와 데이터를 주고 받을 준비를 하는 과정입니다. 클라이언트가 서버에 연결을 요청하면 서버는 이를 수락하여 연결을 맺는 것입니다. TCP 연결이 이 과정 중 하나입니다.

요청-응답

연결이 성공하면 클라이언트는 서버에 메시지를 보내면 서버는 이를 처리하고 그 결과를 응답해줍니다. 연결이 성공했다고 해서 모든 행동이 허락될 수는 없습니다. 클라이언트가 해커일 가능성이 있기 때문입니다. 클라이언트는 서버와 연결이 되면 서버에 "내가 누구인지" 알려줍니다. 그리고 서버는 클라이언트의 신원을 확인해서 연결을 유지할지 해제할지 판단합니다.

능동적 통보

항상 모든 메시지가 요청-응답의 형식을 가질 필요는 없습니다. 클라이언트는 서버에 어떤 상황을 통보하고 서버의 반응을 받지 않아도 될 때가 있습니다. 반대도 마찬가지입니다.

게임 서버는 세션을 하나 이상 가지고 있는 상태 기계입니다. 이 세션의 상태는 시간이 지나면서 변화하게 되죠. 이 변화를 클라이언트에게 일정 시간마다 통보해야 할 때가 있습니다. 능동적 통보의 대표적인 예시입니다.

0개의 댓글