온라인 게임

네트워크 통신을 통해 게임을 같이 즐길 수 있는 멀티와 온라인 방법이 있다.

멀티플레이어는 LAN(Local Area Network)망으로 같이 접속되어 있는 상대방과 통신하여 게임을 진행 할 수 있다.

온라인 게임은 원격에 있는 서버와 연결하여 실시간 게임을 즐길 수 있다.

게임에서 사용하는 전통적인 네트워크 구조 2개로 분류할 수 있다.

네트워크 구조

  • P2P (Peer To Peer)
    • 분산형 네트워크 구조로 거미줄처럼 연결되어 있는 망으로 통신한다.
    • 플레이어가 많을 수록 통신하는 네트워크 비용이 증가한다.
  • C/S (Client / Server)
    • 중앙 집중식 서버이다.
    • 중앙에 있는 서버가 플레이어끼리 통신할 수 있도록 한다.

온라인 게임에서의 클라이언트 / 서버

월드 시뮬레이션

  • 클라이언트 서버의 공통점
    • 두 개 모두 시뮬레이션으로 가상의 공간을 만들어낸다.
  • 서버의 역할
    • 서버는 데이터 검증 및 연산하는 역할을 한다.
    • 서버는 승인 권한을 부여 받아 플레이어들에게 판정을 내릴 수 있다.
  • 클라이언트의 역할
    • 게임에서의 클라이언트는 렌더링으로 우선으로 작업한다.
    • 연산과 프레임을 높여 화면을 자연스럽게 표현한다.

몬스터 Spawn 되는 가정

  1. 서버가 먼저 몬스터를 Spawn하는 작업을 한다.
  2. 서버와 접속한 여러 클라이언트는 패킷을 주고 받아 정보를 동기화한다.
  3. 클라이언트는 패킷을 분석해 몬스터 Spawn 된 것을 알게 된 후 화면에 몬스터를 표시한다.
  4. 클라이언트 사용자는 화면에 표시된 몬스터를 확인할 수 있다.

몬스터를 이동하는 경우

  1. 서버는 인공지능 이동과 관련된 함수를 실행한다.
  2. 서버에서 몬스터가 인공지능 연산으로 인해 이동한다.
  3. 몬스터 이동한 결과를 패킷을 통해 여러 클라이언트에게 전달하여 서로 동기화한다
  4. 클라이언트가 다시 패킷을 분석해 몬스터를 이동하는 모습을 보여준다.

몬스터 타격의 판정

  • 플레이어가 몬스터에게 타격을 가한 경우
    • RPG 게임인 경우 몬스터가 죽거나 살거나, 죽은 경우 아이템을 떨군다.
    • 타격에 대한 판정을 클라이언트나 서버가 담당할 수 있다.
  • 클라이언트가 판정을 담당한 경우
    • 서버의 연산 부담을 줄일 수 있는 장점이 있다.
    • 그러나 게임바이너리 조작, 메모리 변경, 패킷 변조한 경우 게임이 취약하게 된다.
  • 서버가 판정을 담당한 경우
    • 서버의 연산 부담이 늘어난다.
    • 서버가 판정을 맡으면서 안전한 게임으로 진행할 수 있다.

Authority 승인 권한을 부여된 시스템

  • 온라인 게임에서는 판정과 승인 권한을 서버에게 주어 안전한 게임으로 만들 수 있다.
  • 전투 판정, 아이템 드랍, 몬스터 인공지능 로직은 서버가 시뮬레이션한다.
  • 승인 권한이 없는 클라이언트는 코스메틱 로직으로 UI 와 이펙트와 애니메이션을 담당하여 연출한다.
  • 클라이언트는 Authority 서버로부터 데이터를 받지 못한다면 진행을 못하거나 연결이 끊어질 것이다.
  • Authority 서버는 언리얼 엔진 데디케이트 사용하거나 Boost의 Asio 구축한다.

온라인 게임의 핵심

  • 접속한 모든 플레이어들이 가상 세계에 함께 플레이 하는 것이 목적이다.
  • 그리고 최소한의 패킷으로 온라인 서버 네트워크 통신을 만들어야한다.
    • 네트워크 호출이 많고 패킷 정보가 큰 경우 게임이 지연되거나 부하로 멈춰버릴 수 있다.