티스토리 뷰

게임 서버

게임을 여러 사람과 즐기기 위해선 인터넷 연결을 통해 네트워크 통신을 해야한다. 인터넷을 통해 다른 컴퓨터나 서버 연결이 된다면 게임 클라이언트는 필요한 정보를 외부에서 받아 플레이어의 화면에 출력할 수 있다.

 

이러한 멀티 플레이를 위한 게임 서버에도 게임의 장르에 따라 사용되는 다양한 형태의 네트워크가 존재한다.

 


P2P (Peer-To-Peer)

P2P 서버는 고전 게임과 더불어 현재도 특정 게임 장르에 고정적으로 사용되는 서버 형태이다.

 

P2P의 특징이라면 중앙 서버가 없이 클라이언트 컴퓨터끼리 직접 통신하는 방식을 말한다. 하여 프로그램 엔진으로 컴퓨터간 연결을 통해 데이터나 파일을 송수신하기만하면 되는 간편하고 빠른 속도를 제공한다. (과거에 비해 인터넷이 많이 발전하면서 속도가 많이 발전된 것이다.)

 

P2P는 프레임 단위가 중요한 격투 대전 게임, 레이싱 게임, FPS 게임 등 다양한 게임에서 사용된다. 또한, 게임만이 아니라 파일공유 프로그램 '소리바다', '당나귀', '비트토렌트', '프루나'와 같은 프로그램이 있다. 

 

장점
  1. 중앙서버가 없기에 중앙서버 변조, 해킹 노출 가능성 제외
  2. 중앙서버 및 개별서버 부하량을 줄이거나 사용자가 분담하도록 하여 서비스 제공 비용 감소
  3. 피어 수 증가에 따라 전송 속도 향상
    1. 분산 네트워크가 병렬 처리되는 데이터를 분산 전송하여, 여러 피어로 분산 데이터를 병렬 전송하기 쉬워진다.
    2. 벽목 현상 및 단일 장애를 대비하여 피어간 로드 밸런싱 진행
    3. 피어 수에 따라 공유되는 리소스 양과 대역폭이 증가하여 전송 속도 증가

 

단점
  1. 모든 클라이언트가 서버 역할을 겸하여 자신의 IP 주소가 다른 클라이언트에 노출
  2. 피어 수 감소에 따라 전송 속도 감소
  3. 클라이언트 성능에 따라 서비스 퀄리티 변화
  4. NAT 종류에 따라 라우터 설정이 필요하다.
  5. 호스트가 모든 서버 역할을 하기에 데이터를 변조할 수 있어서, 검증 과정과 보안 검증이 필수이다.

 

 


HOST - P2P

호스트 방식 P2P 서버는 하나의 컴퓨터가 서버 역할을 대신하여 다른 모든 컴퓨터와 연결되는 형태이다.

 

 

이러한 형태는 호스트가 모든 통신은 클라이언트-서버 형태를 한 플레이어가 도맡아 한다는 특징이 있다. 이를 다르게 말하면, 게임 환경을 좌우하는 것은 호스트가 된 사용자의 컴퓨터 성능에 달렸다는 말이 된다.

 

호스트 방식 P2P는 호스팅하는 컴퓨터가 연결을 끊으면, 어떻게 처리하느냐에 따라 작업이 굉장히 복잡해진다. 대체로 이러한 경우 호스트 마이그레이션(Host Migration)과정을 통해 연결 상태(ping)가 가장 좋은 클라이언트에게 서버를 이어 하도록 만드는 방식이 있다.

 

Fully Connection - P2P

 

풀 커넥션 P2P 방식은 위 예제와 같이 모든 클라이언트가 자신을 제외한 다른 모든 클라이언트에 연결되어있는 형태이다.

 

각 클라이언트는 모든 클라이언트와 연결되어있기에, 통신해야하는 클라이언트 수가 증가할 수 록 관리해야하는 커넥션 수가 급격히 많아진다. (2대 이상부터 (클라이언트 수 - 1) 팩토리얼을 덧셈 연산으로 변경한 값만큼 증가)

 

클라이언트 수 2 3 4 5 6 7
연결 수 1 3 6 10 15 21

 

하지만, 다수의 클라이언트 중 하나의 연동이 끊기더라도 게임의 흐름이 방해되지 않고 빠르게 진행될 수 있다.

 

 


데이케이트 서버 - Dedicate Server

데디케이트 서버는 게임사가 서버를 독점 관리하고, 모든 판정 및 데이터를 서버에서 처리하고 클라이언트에게 결과만 출력한다. 하여 서버를 생산하고 유지 비용을 개발사가 감당해야 한다.

 

데디케이트 서버는 위 설명과 같이 게임 자체를 개발사가 관리하기 때문에, 클라이언트가 보내는 모든 데이터를 감시하고 잘못된 데이터나 보안적인 측면에서 좋은 성능을 보장한다. 또한 중앙 서버에 변경사항이 업데이트되면 클라이언트 프로그램이 버젼이 맞지 않는 경우 자동으로 서버에서 업데이트를 받도록 하여 유지보수와 관리 측면에서도 좋은 성능을 제공한다.

 

단, 앞서 언급한바와 같이 서버장비를 직접 설치하고 사용한다면, 장비 가격부터 유지보수, 업그레이드, 랙 설치 공간 유지 비용 등 다양한 부분에서 비용이 많이 발생하게 된다. 또한, 전용서버인만큼 DDOS와 같은 서버가 다운될 수 있는 공격이나 서버 자체에 문제가 발생한다면 서비스가 일시적으로 중단된다. 또한, 서버의 물리적인 위치에 따라 응답속도(Ping)의 차이가 발생할 수 있다. 하여 대규모 서비스의 경우 전세계 여러 나라에 서버실을 상비하여 서비스를 제공한다.

 

 

 


 

핵(hack)

멀티플레이어 인게임 화면에서 발생하는 모든 이벤트는 클라이언트나 서버가 연산하여 나타내는 결과물을 화면에 출력해주는 것이다. 두 경우 모두 핵(hack)이라는 불법프로그램으로부터 자유롭지는 못하다.

 

데디케이트 서버가 모든 인게임 연산을 처리한다면, 서버로부터 받은 데이터를 클라이언트 프로그램이 출력만 하게 된다. 하여 핵은 서버로 부터 받은 데이터의 메모리 주소로 접근하여 위치나 체력 등을 고려하여 상대방에게 자동으로 조준을 하거나 출력된 화면을 읽어들여 적의 위치를 파악하여 마우스 입력 값을 조절하는 등의 핵을 사용할 수 있다.

 

반대로 클라이언트에게 많은 연산처리를 하도록 구현한 경우, 클라이언트 단위에서 발생하는 연산 정보를 가로채고 변조하여 서버에게 전송하고, 서버는 해당 정보를 토대로 인게임 데이터를 처리하게되어 말도 안되는 이동속도나 공격 명중, 순간이동 등 게임성을 파괴할 수 있는 동작이 일어날 수 있다.

 

 


게임 네트워크 구조

게임 네트워크 구조는 컴퓨터 장치들의 발전에 따라 여러 형태로 발전되었다.

 

초기에는 HOST P2P로 IP 주소를 통해 직접 다른 클라이언트에 접속하는 방식으로 멀티플레이가 구성되었다. 여기서 조금 더 발전하여, 중앙 서버가 각 호스트의 정보를 가지고 있다가 다른 클라이언트가 접속을 원할 때 현재 접속 가능한 호스트 정보를 리스트로 출력하는 방식으로 발전하였다.

 

 

 

현재 가장 많이 사용되는 방식은 각 기능별 담당 서버를 따로 생성하여 하나의 서비스를 제공한다.

크게는 로그인 서버, 데이터베이스 서버, 게임 매칭 서버, 플레이 서버 등 게임의 규모와 필요한 기능, 각 기능의 통신 방식에 따라 굉장히 다양하게 서버가 세분화되어 불필요한 동작을 최소화하고 부하를 줄이는 방향으로 발전된다.

 

예로, 로그인이나 인벤토리 기능의 서버가 있다고 가정할 때, 두 서버 모두 필요한 순간에만 데이터베이스 서버에 쿼리문을 통해 데이터를 받아오고 화면에 출력하거나 새로운 데이터를 업데이트한다. 반대로 플레이 서버의 경우 실시간 게임을 소켓통신으로 지속적인 업데이트를 해주어야 한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함