패키지 게임: 소규모의 플레이어가 같이 모여서 하는 온라인 게임 (Offline이 가능한 경우도 많음), MOG라고도 함 (Multiple Online Game)
서버
- 플레이어 세 명 이상이 게임을 하려면 그들의 게임 플레이 상태를 저장하는 곳이 필요하고, 이를 위해 플레이어 중 한 명의 컴퓨터가 모든 플레이어의 게임 플레이 상태를 취합하여 유지하는 역할을 해야 함
- 패키지 게임에서 게임 서버가 하 역할은 지금 플레이어가 두세 명 혹은 많아야 십여 명 참여하여 게임 플레이를 하는 상태, 즉 세션 처리를 담당하는 것
- 데디케이티드 서버: 클라이언트 프로그램과 같은 엔진을 사용하지만 렌더링과 사용자 입력 처리를 받지 않고, 순전히 클라이언트 연결을 받는 세션을 처리만 하는 프로그램이 따로 운용하는 경우
MUD(Multi User Dungeon)
: 여러 사람이 동시에 던전에 들어가서 모험하는 방식의 게임
- 이때 MUD 게임은 그래픽 화면을 보여 주는 클라이언트 프로그램 없이, 텍스트 입출력만 받을 수 있는 콘솔(터미널)을 이용해서 게임 즐기는 방식으로, 온라인 게임 게임에서 본격적인 게임 서버는 이때부터 시작됨
서버의 역할
- 싱글 플레이 게임 처리하기 (게임 루프)
게임 클라이언트와 서버의 상호 작용
- 연결: 최초로 클라이언트가 서버와 데이터를 주고 받을 준비를 하는 것
- 요청/응답: 클라이언트는 서버에 메시지를 보내고, 서버는 이를 처리한 후 결과를 응답해 줌
- 능동적 통보: 클라이언트에서 요청을 보낸 적도 없는데 서버에서 능동적으로 통보
게임 서버가 주로 하는 일
- 여러 사용자와 상호 작용
- 클라이언트에서 해킹 당하면 안되는 처리
- 플레이어의 상태 보관
<안정성>
: "게임 서버가 얼마나 죽지 않는가"를 의미
게임 서버의 품질
: 서버의 불안정을 극복하는 방법
- 서버가 죽더라도 최대한 빨리 다시 살아나게 함
- 서버는 죽더라도 최대한 적은 서비스만 죽게 함
- 서버 오작동에 대해 기록(로그)을 남길 수 있게 함
<확장성>
: 서버를 얼마나 많이 설치할 수 있느냐를 의미
- 게임 사용자 측면에서 '사용자 수가 늘어나더라도 서비스 품질이 떨어지지 않고 유지되느냐'
- 서버 확장성을 올리는 방법에는 크게 수직적 확장과 수평적 확장이 있음
<성능>
: 기본적으로 얼마나 빨리 처리하는지 의미
FPS 게임에서 처리 과정
- 플레이어가 저격총을 쏘는 순간 클라이언트는 서버에 총알을 쐈다는 의미의 메시지를 보냄
- 서버는 이를 받아서 메시지를 처리, 그리고 "헤드샷 때문에 플레이어가 사망했다"와 같은 메시지 처리 결과를 다른 플레이어에게 보내야 함
- 클라이언트에서는 이 메시지를 받고 플레이어가 죽는 모습으로 바꾸어야 함
게임 서버의 성능을 높이는 법
서버의 단위 처리 속도를 높임
- 서버의 단위 처리 속도를 높이려면, 프로그램이 더 빠르게 실행할 수 있게 코드 최적화나 알고리즘 최적화를 실행
- RPG 게임에서는 몬스터나 플레이어 외 캐릭터(NPC)의 길찾기 알고리즘이 소요하는 처리 시간을 O(1)로 개선하고자 path table 테크닉을 쓰는 것도 최적화 방법 중 하나
2) 서버의 과부하 영역을 분산
- 코드 프로필링 이용하기: 어떤 함수가 처리 시간을 많이 차지하는지 발견한 후 그것에 집중해서 성능을 개선함
- 함수 A의 처리 속도를 더 높일 수 있는 방법이 더 이상 없고, 그렇다고 함수 A를 실행하는 빈도를 낮출 수 있는 방법도 없다면 분산이 필요함
3) 네트워크 프로토콜 최적화
- 메시지 양을 줄이기: 양 자체를 줄이거나 압축하기(양자화, 메시지 교환 횟수 줄이기 등)
4) 네트워크 전송 시간 줄이기
- 고품질 네트워크 회선을 가진 데이터센터에 서버 설치
- 지리적으로 가까운 데이터센터에 서버 분산해서 설치
5) 서버를 거치지 않고 클라이언트끼리 직접 통신하게 하기
- P2P 네트워킹: 클라이언트끼리 직접 메시지를 주고 받는 것
<관리 편의성>
데몬(daemon)/서비스(service): 운영체제에 등록된 백그라운드 프로그램
- 데몬은 프로그램 종료 같은 극히 제한적인 종류의 명령만 처리할 수 있으며, 백그라운드로 작동하는 프로그램이므로 GUI는 물론이고 콘솔에 텍스트를 출력하면 화면에 아무것도 나타나지 않음
관리 도구의 역할
- 서버 켜기/끄기
- 동시접속자 수 보기
- CPU, RAM 사용량 보기
플레이어 정보의 저장
- 보통 싱글플레이 게임의 플레이어 정보는 게임을 구동하는 컴퓨터 자체의 디스크에 저장됨
- 온라인 게임에서 플레이어 정보를 클라이언트에 저장하지 않는 이유
- 해킹에 취약함
- 같은 사용자가 다른 기기를 사용할 때 문제가 됨
- 대다수 온라인 게임은 플레이어 정보를 클라이언트가 아닌 서버에 저장함
- 플레이어의 데이터는 게임 서버에 직접 저장하는 경우도 있지만, 게임 서비스의 규모가 큰 경우에는 게임 서버의 디스크에 직접 저장하지 않고 별도의 서버 머신을 쓰기도 함
- 그 별도의 머신은 데이터베이스라는 소프트웨어 안에서 플레이어 데이터를 관리함
데이터베이스 소프트웨어를 이용하여 저장하는 이유
- 데이터 관리와 분석을 빠르게 할 수 있음
- 강력한 데이터 복원 기능이 있음
- '전부 아니면 전무'로 데이터를 변경할 수 있음
- 데이터 일관성을 유지시켜 줌
- 처리가 2개 이상 동시에 실행될 때 한 데이터가 동시에 여러 데이터를 액세스하면서 이상한 결과가 나오는 문제를 막아 주는 기능이 있음
- 장애에 대한 내성이 강함
서버의 운영체제와 요구사항
- 서버를 구동하는 운영체제: 리눅스와 윈도우 서버가 골고루 쓰임
- 서버를 설치할 때 요구사항
- 인터넷 품질이 신뢰성이 있어야 함
- 서버가 쉽게 고장 나지 않아야 함
- 도난이나 침입 사고에서 안전해야 함
클라우드 서버
: 리얼머신 위에 구동하는 가상 머신의 집합
- 물리적 머신 한 대 안에서 여러 서버 운영체제가 동시에 작동
클라우드 서버가 제공하는 기능
IaaS: 가상 머신 자체를 제공하는 서비스, IaaS에서 생성한 가상 머신 안의 운영체제(시스템 레지스트리 등)는 마음대로 제어할 수 있음
PaaS: IaaS보다는 상위 계층에서 작동, 운영체제뿐만 아니라 운영체제 위에서 어떤 프레임워크 소프트웨어가 이미 구동되고 있으며, 이 프레임워크 위에 서버 코드나 데이터 파일을 업로드해야 함
SaaS: PaaS보다 상위에 있음, 코딩 자체가 불필요하며, 과금이 나 데이터 분석, 페이스북 로그인 연동 같은 특화된 기능들을 제공함
'Old > 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 |