Metaverse/Network

게임 서버와 클라이언트

onenewkong 2023. 7. 24. 00:31

 

패키지 게임: 소규모의 플레이어가 같이 모여서 하는 온라인 게임 (Offline 가능한 경우도 많음), MOG라고도 (Multiple Online Game)

 

서버

  • 플레이어 이상이 게임을 하려면 그들의 게임 플레이 상태를 저장하는 곳이 필요하고, 이를 위해 플레이어 명의 컴퓨터가 모든 플레이어의 게임 플레이 상태를 취합하여 유지하는 역할을 해야
  • 패키지 게임에서 게임 서버가  역할은 지금 플레이어가 두세 혹은 많아야 십여 참여하여 게임 플레이를 하는 상태, 세션 처리를 담당하는
  • 데디케이티드 서버: 클라이언트 프로그램과 같은 엔진을 사용하지만 렌더링과 사용자 입력 처리를 받지 않고, 순전히 클라이언트 연결을 받는 세션을 처리만 하는 프로그램이 따로 운용하는 경우

 

MUD(Multi User Dungeon)

: 여러 사람이 동시에 던전에 들어가서 모험하는 방식의 게임

  • 이때 MUD 게임은 그래픽 화면을 보여 주는 클라이언트 프로그램 없이, 텍스트 입출력만 받을 있는 콘솔(터미널) 이용해서 게임 즐기는 방식으로, 온라인 게임 게임에서 본격적인 게임 서버는 이때부터 시작됨

 

서버의 역할

  • 싱글 플레이 게임 처리하기 (게임 루프)

 

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

  • 연결: 최초로 클라이언트가 서버와 데이터를 주고 받을 준비를 하는
  • 요청/응답: 클라이언트는 서버에 메시지를 보내고, 서버는 이를 처리한 결과를 응답해
  • 능동적 통보: 클라이언트에서 요청을 보낸 적도 없는데 서버에서 능동적으로 통보

 

게임 서버가 주로 하는

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

 

<안정성>

: "게임 서버가 얼마나 죽지 않는가" 의미

 

게임 서버의 품질

: 서버의 불안정을 극복하는 방법

  1. 서버가 죽더라도 최대한 빨리 다시 살아나게
  2. 서버는 죽더라도 최대한 적은 서비스만 죽게
  3. 서버 오작동에 대해 기록(로그) 남길 있게

 

<확장성>

: 서버를 얼마나 많이 설치할 있느냐를 의미

  • 게임 사용자 측면에서 '사용자 수가 늘어나더라도 서비스 품질이 떨어지지 않고 유지되느냐'
  • 서버 확장성을 올리는 방법에는 크게 수직적 확장과 수평적 확장이 있음

 

<성능>

: 기본적으로 얼마나 빨리 처리하는지 의미

 

FPS  게임에서 처리 과정

  1. 플레이어가 저격총을 쏘는 순간 클라이언트는 서버에 총알을 쐈다는 의미의 메시지를 보냄
  2. 서버는 이를 받아서 메시지를 처리, 그리고 "헤드샷 때문에 플레이어가 사망했다" 같은 메시지 처리 결과를 다른 플레이어에게 보내야
  3. 클라이언트에서는 메시지를 받고 플레이어가 죽는 모습으로 바꾸어야

 

게임 서버의 성능을 높이는

 

서버의 단위 처리 속도를 높임

  • 서버의 단위 처리 속도를 높이려면, 프로그램이 빠르게 실행할 있게 코드 최적화나 알고리즘 최적화를 실행
  • RPG 게임에서는 몬스터나 플레이어 캐릭터(NPC) 길찾기 알고리즘이 소요하는 처리 시간을 O(1) 개선하고자 path table 테크닉을 쓰는 것도 최적화 방법 하나

2) 서버의 과부하 영역을 분산

  • 코드 프로필링 이용하기: 어떤 함수가 처리 시간을 많이 차지하는지 발견한 그것에 집중해서 성능을 개선함
  • 함수 A 처리 속도를 높일 있는 방법이 이상 없고, 그렇다고 함수 A 실행하는 빈도를 낮출 있는 방법도 없다면 분산이 필요함

3) 네트워크 프로토콜 최적화

  • 메시지 양을 줄이기: 자체를 줄이거나 압축하기(양자화, 메시지 교환 횟수 줄이기 )

4) 네트워크 전송 시간 줄이기

  • 고품질 네트워크 회선을 가진 데이터센터에 서버 설치
  • 지리적으로 가까운 데이터센터에 서버 분산해서 설치

5) 서버를 거치지 않고 클라이언트끼리 직접 통신하게 하기

  • P2P 네트워킹: 클라이언트끼리 직접 메시지를 주고 받는

 

<관리 편의성>

데몬(daemon)/서비스(service): 운영체제에 등록된 백그라운드 프로그램

  • 데몬은 프로그램 종료 같은 극히 제한적인 종류의 명령만 처리할 있으며, 백그라운드로 작동하는 프로그램이므로 GUI 물론이고 콘솔에 텍스트를 출력하면 화면에 아무것도 나타나지 않음

 

관리 도구의 역할

  • 서버 켜기/끄기
  • 동시접속자 보기
  • CPU, RAM 사용량 보기

 

플레이어 정보의 저장

  • 보통 싱글플레이 게임의 플레이어 정보는 게임을 구동하는 컴퓨터 자체의 디스크에 저장됨
  • 온라인 게임에서 플레이어 정보를 클라이언트에 저장하지 않는 이유
  1. 해킹에 취약함
  2. 같은 사용자가 다른 기기를 사용할 문제가
  • 대다수 온라인 게임은 플레이어 정보를 클라이언트가 아닌 서버에 저장함
  • 플레이어의 데이터는 게임 서버에 직접 저장하는 경우도 있지만, 게임 서비스의 규모가 경우에는 게임 서버의 디스크에 직접 저장하지 않고 별도의 서버 머신을 쓰기도
  • 별도의 머신은 데이터베이스라는 소프트웨어 안에서 플레이어 데이터를 관리함

 

데이터베이스 소프트웨어를 이용하여 저장하는 이유

  1. 데이터 관리와 분석을 빠르게 있음
  2. 강력한 데이터 복원 기능이 있음
  3. '전부 아니면 전무' 데이터를 변경할 있음
  4. 데이터 일관성을 유지시켜
  5. 처리가 2 이상 동시에 실행될 데이터가 동시에 여러 데이터를 액세스하면서 이상한 결과가 나오는 문제를 막아 주는 기능이 있음
  6. 장애에 대한 내성이 강함

 

서버의 운영체제와 요구사항

  • 서버를 구동하는 운영체제: 리눅스와 윈도우 서버가 골고루 쓰임
  • 서버를 설치할 요구사항
  1. 인터넷 품질이 신뢰성이 있어야
  2. 서버가 쉽게 고장 나지 않아야
  3. 도난이나 침입 사고에서 안전해야

 

클라우드 서버

: 리얼머신 위에 구동하는 가상 머신의 집합

  • 물리적 머신 안에서 여러 서버 운영체제가 동시에 작동

 

클라우드 서버가 제공하는 기능

IaaS: 가상 머신 자체를 제공하는 서비스, IaaS에서 생성한 가상 머신 안의 운영체제(시스템 레지스트리 ) 마음대로 제어할 있음

PaaS: IaaS보다는 상위 계층에서 작동, 운영체제뿐만 아니라 운영체제 위에서 어떤 프레임워크 소프트웨어가 이미 구동되고 있으며, 프레임워크 위에 서버 코드나 데이터 파일을 업로드해야

SaaS: PaaS보다 상위에 있음, 코딩 자체가 불필요하며, 과금이 데이터 분석, 페이스북 로그인 연동 같은 특화된 기능들을 제공함

 

'Metaverse > Network' 카테고리의 다른 글

게임 네트워크 엔진  (0) 2023.07.31
게임 네트워킹  (0) 2023.07.27
Socket Programming  (0) 2023.07.24
컴퓨터 네트워크  (0) 2023.07.24
Multi Threading  (0) 2023.07.24