온라인 게임 개발 흐름

온라인 게임은 여러 플레이어와 가상의 공간에서 함께 플레이 하는 것을 의미한다.

서버와 플레이어(클라이언트)가 온라인게임에서 어떻게 흘려가는지 살펴보자


온라인 게임의 접속

서버

  • 서버는 가상의 공간을 시뮬레이션 한다.
  • 시뮬레이션한 공간에서 NPC 몬스터 인공지능 배경 생성하여 배치한다.
  • 배치된 모든 오브젝트는 ID가 붙어있다. 임시로 식별하는 용도로 사용한다.
  • 네트워크를 열어 클라이언트 입장을 허용한다.

서버에 배치된 오브젝트의 ID 가지고 이동, 드랍, 공격, 스킬사용 등을 사용할 수 있다.

첫 번째로 접속한 클라이언트 (플레이어)

  • 화면 접속 버튼으로 서버에 입장한다.
    • 입장하겠다는 패킷을 서버로 발송한다.
    • 서버는 응답으로 플레이어를 생성하거나, 데이터베이스에서 플레이어의 정보를 찾아 가져온다.
  • 서버가 만들어준 가상의 월드에서 캐릭터를 스폰한다.
  • 캐릭터 뿐 아니라 주변 배경 몬스터를 서버로부터 패킷을 받아 화면에 로딩한다.
  • 배치된 몬스터, 플레이어 캐릭터, NPC 정보는 서버와 같아진다.

두 번째로 접속한 클라이언트 (플레이어)

  • 마찬가지로 접속 버튼으로 서버에 입장한다.
    • 입장하겠다는 패킷을 서버로 발송한다.
    • 서버는 응답으로 두 번째 플레이어 뿐 아니라 첫 번째 플레이어에게도 정보를 보내야 한다.
      • 서버는 두 번째 플레이어에게는 몬스터, 첫 번째 플레이어의 캐릭터 정보를 발송한다.
      • 서버는 첫 번째 플레이어에게 두 번째 플레이어가 접속하였다는 정보를 발송한다.

이렇듯, 서버는 첫 번째, 두 번째 플레이어와 함께 있다는 착각을 주도록 한다.


온라인 게임의 컨트롤러

서버

  • 몬스터, 인공지능, NPC 오브젝트들을 직접 제어한다.

클라이언트

  • 클라이언트는 선택한 캐릭터로 접속하여 그 캐릭터만 직접 제어한다.

서버의 시뮬레이션

  • 본인의 캐릭터외의 다른 플레이어는 사실 서버가 기능을 호출하여 캐릭터들을 조종하고 있다.
  • 다른 캐릭터 뿐 아니라 몬스터, 인공지능, 오브젝트들을 서버가 연출을 시뮬레이션한다.

Authority

Authority 는 승인 권한을 부여 받는 자라고 한다.

  • 서버가 Authority 맡고 있다.
  • 클라이언트 본인이 캐릭터를 직접 조종하는데 바이너리, 메모리, 네트워크 조작 해킹에 취약해질 수 있다.
    • 서버는 인공지능, 몬스터, 스킬 사용 이상이 발생한 경우,
      Authority 권한으로 올바르게 고치고 클라이언트들에게 전파한다.

Server Authoritative

  • 클라이언트는 본인의 캐릭터로 이동, 공격, 스킬 사용한다는 의사를 서버로 보낸다.
  • 서버는 Authority 권한으로 이 데이터가 올바른 경우 클라의 의사를 실행하도록 한다.

브로드캐스팅

한 플레이어가 몬스터를 잡은 경우

  • 서버가 몬스터가 죽었으니 모든 플레이어에게 해당 오브젝트 몬스터가 죽었다고 클라이언트 구분 없이 모두 전파한다. 이를 브로드캐스팅이라 한다.
  • 특정 그룹의 클라이언트에게 전파하는 것을 멀티캐스팅이라 한다.

성능 저하 요소 3가지

서버에 부하가 발생한 경우 연결된 클라이언트는 멈추거나 연결이 끊어져 치명적이다.
유지보수에 신경써야하는 자원 3가지가 있다.

  • 시뮬레이션 연산의 CPU 부하
  • 데이터베이스 메모리, 파일 I/O 부하
  • 네트워크 통신 부하

온라인 게임의 이동 - Authority 여부

  • 장르에 따라 이동 처리에 Authority 권한을 부여할 지 결정해야한다.
    • 탑뷰 방식의 게임은 Authority 권한을 사용하여 지연이 발생해도 문제가 없다.
    • FPS 게임은 키보드 조이스틱의 Authority 권한을 사용한 경우 이동에 굉장히 큰 지연이 발생한다.

온라인 게임의 이동 - Prediction

  • 프레딕션은 클라이언트가 자기의 권한으로 직접 이동을 연산한다.
  • 연산한 이동은 서버에게 전파하여 승인 또는 거부하는 과정을 거치게 된다.
    • 만약 캐릭터의 이동이 비정상적인 경우 서버가 거부할 수 있다.
    • 거부된 경우, 클라가 요청한 이동을 버리고 이전 위치로 돌아가라고 할 수 있다.