컴퓨터 네트워크 (12), Game Networking

2022. 6. 15. 20:18강의 내용 정리/컴퓨터 네트워크

728x90
반응형

Game Networking

게임은 매우 많은 유저가 상호작용하며 실시간으로 통신을 한다.


1. Definition

1) What is Game Sever?

(1) Game Server 개요

- 수많은 사람들이 가상의 공간에서 함께 게임을 할 수 있도록 돕는 서버

- internal state: 사용자의 지역, 인터렉션 등

- internal state를 관리하고 이를 컨텐츠로 만들어서 사용자에게 다시 배포한다.

- 매시브한 유저가 동시에 처리/관리한다. 

 

2) Types of Game Server

(1) Dedicated server

- 중앙에서 서버를 가져서 사용자로부터 인풋을 받아서 이를 처리한다.

- 리니지, 스타, 롤, 워크레프트 등등

- 서버 중심으로 이뤄져서 데이터센터, 클라우드 서버 위에서 동작한다.

- 프라이빗, 퍼블릭을 사용하던 아주 좋은 컴퓨터를 사용하고, 사용자 간의 지연도 적고, 고난이도의 게임을 제작할 수 있다.

 

(i) Master Server (in general)

- 게임을 사용하려는 사용자를 받아들이고, 아이디는 합법적인지, 돈을 얼만큼 냈는지를 확인한다. 

- 게임 로직을 돌리는 서버, 플레이어가 마스터 서버와 대화를 나눠서 기록을 회복한다.

- 클라이언트는 게임을 하기 위해 마스터 서버에 붙고, 사용자 정보에 대한 내용을 확인하고, 하고자하는 게임의 옵션을 정리한 뒤 게임서버에 넣어준다.

- 게임서버에서 실제 게임이 돌아간다.

- 유니크한 게임서버가 존재한다. like 배그

- 항상 비슷한 일을 하는 일이 있고(마스터), 고유한 로직이 있는 게임서버가 있다.

- 왜 어떤 클라우드를 선택할 것인지 생각할 수 있어야한다.

 

 

(ii) Game server

- 유니크한 로직으로 이미지 렌더링, 물리, collisions 등을 계산하고 동작시켜야한다. 이에 따라 CPU 사용이 매우 높다. 

- 트래픽도 매우 많다. n명에 대한 위치정보, 총 쏘고, 이미지 등을 모두 보여줘야한다.

- 이에 따라 매우 인텐시브하다.

 

- 마스터는 트래픽이 많지는 않고, 보안이 매우 중요하다. 

- 게임 서버에서 오류가 발생하면 세션에만 문제가 발생한다. 

 

(2) Peer to Peer

- 게임 서버가 없는 경우로 n명이 있으면 이들끼리 트래픽을 주고받는다.

- like 안드로이드 톡스

- 물리적으로 가까이 있으면 이들끼리 함께 사용한다.

- 제한이 있다. 동일한 메세지를 n명에게 모두 보내야하기에 가까이 있을 때 장점이 있고, 지연이 적기에 피시방 안에서만 할 수 있는 게임이 예시가 된다.

- 기지국 위에 엣지컴퓨터를 설치하면 구 단위에서도 피어 투 피어로 지원이 가능하다. 5G 덕분이다.

- 서버에 보낼 수 없기에 싱크로나이즈가 어렵다. 

- 마스터 서버가 없어서 새로운 유저가 들어오는 것이 어렵다. 끝나는 시간을 알 수 없다. n개가 게임을 할 때 n-1개와 풀매쉬로 대화를 나눠야하니 들어올 수 있는 사용자의 수는 서버게임보단 줄어든다.

- 중재자가 없어서 각자 판단해야하지만 상태 불일치가 있을 수 있어서 이를 얼마나 잘 제어하는지가 중요하다.

 

(i) Semi Peer to Peer Example using WebRTC

- 피어투피어 게임을 지원하기 위해서 어싱크가 되는 자바, 웹소켓을 사용한다.

- 자기들끼리 게임을 하는데 웹 브라우저 위에서 이를 돌린다.


2. MMO Game Servers

1) Photon (Commercial -Free/Paid)

(1) 기능

- 릴레이 기능: 트래픽을 다른 곳으로 전달

- 클라이언트 복잡도가 높은 것을 처리함 -> 빠르게 전달하는 것도 함

- 클라우드 서비스에서 전달된다. Paas로 서버 구동 후 짜고 싶은 것을 알아서 짜도록 한다.

- 보이스, 채팅 등을 사용할 수 있다.

- 게임 서버마다 매우 다르다. 이 정도는 상용서비스에서 제공한다.

 

(2) 예시

- 유나이티드 서울: 유니티에서 진행한 한국 행사

- 스스로 컴퓨터를 구비하고 소프트웨어는 빌려서 사용한다. SaaS -> 클라이언트가 로직을 짜는건데, PaaS면 서버에서 짤 수 있다.

- P2P 통신 등

- 상태 동기화, 충돌 처리, 사용자 정보 처리 등 지원

- 클라이언트가 SDK를 사용해 접속이 가능하다.

- 다양한 통신 프로토콜을 사용하면서 C# 위에 서버가 돌아갈 수 있다.

- 돈을 받고 지원하기에 많은 것을 지원한다.

 

2) Agones (Open Source, by Google)

(1) 개요

- 수많은 회사가 구글 클라우드를 사용한다. 안드로이드, 플레이스토어 등이 있다. 게임이 많이 만들어지면 좋다. 기술장벽인 서버를 낮춰주는데 돕는다. 

- 구글 클라우드 위에 돌아가는 서버를 지원한다. 이를 오픈소스로 만들어서 주더라도 사용자 유입이 가능하다.

- Ubisoft와 같이 아고네스라고하는 데디케이티드 게임 서버를 제공한다.

- 쿠버네티스의 활성화의 입장에서 구글이 게임서버를 만든다.

 

(2) Tranditional ways

- 클라이언트가 마스터에 붙고, 게임 로직은 게임 서버에서 돌아간다.

- 일을 하거나 이를 돌리는 것을 유지관리하기위해 서버를 따로 둔다.

- 게임회사가 직접 게임을 만들고 운용한다.

- 플레이어가 들어오면 기타정보를 매치하고, 게임 서버를 통해 누구와 함께할 것인지 정해준다. 

- 서버 관리를 하는 서버에 의해 게임 로직이 도는 곳으로 할당한다. 이때 트래픽 등을 고려한다.

- 서버 개발팀은 매우 많은 작업을 진행해야한다.

 

(3) Agones's SCALABLE Ways

- 마스터 서버에 상응하는 일을 상당량 줄여준다. 게임 로직이 돌아가는(관리) 서버에 대한 부분도 상당량 줄여준다. 즉, 게임을 쿠버네티스를 통해 짜면 마스터 서버와 게임 서버의 역할을 많이 줄여준다.

- 사용자에 대한 적합성, 돈을 냈는지 등을 쿠버네티스를 통해 확인가능하다.

- 이에 따라 직접 짜야하는 부분은 게임이 돌아가는 로직만 관리하면 된다. 그리고 사용자에 특화된 부분이 있다면 그 부분만 처리하면 된다.

- 클러스터 매니지를 쉽게 해준다. 쿠버네티스와 본인이 운영하는 서버 위에서 이를 돕는다.

- 게임 로직만 충실하기에 개발과 운영이 쉬워진다.

- 서버에 좋은 아이디어가 있다면 이를 구현하는 데에만 집중하면 된다.

- 구글은 게임을 만들어서 시판하는 회사는 아닌데 Ubisoft의 조언을 들어 필요한 부분을 만들어간다. 

 

(4) Current Stage

- 20년 최근에 릴리즈가 되었다.

- SDK가 있다. C++와 Go, Rust, REST가 있고, 서버의 운영을 위해 서버 준비, 셧다운, 상태 제공, 컨피규레이션 등이 있다. 

- 구글의 클라우드 서비스 하에서 제공되는 기능들이나 도구를 지원받을 수 있고, 로드맵이 좋게 나온다.

- 최근 오픈소스를 많이 낸다.

 

3) Colyseus (Open Source)

(1) 개요

- Node.js로 만들 수 있다. 

- MMO 서버가 해야하는 상당량을 해준다.

- 깃허브에서 해당 내용을 확인할 수 있다.

 

(2) 특징

- 오픈소스이다. 

- 자바스크립트 랭귀지로 만들어졌고, 웹소켓 베이스이다. 

- API를 제공한다.

- 클라이언트와 서버와의 상태 동기화

- 매치메이킹을 해주고, 스케일 업, 스케일 다운 등을 제공한다.

- 게임 엔진은 미약하다. -> 포톤에는 일부 물리적인 엔진이 있었다.

- 데이터 베이스도 제공은 안한다.

 

- 리얼타임, 턴 베이스드 게임도 가능, 스케일어빌리티, 클라이언트 붙이고, 퍼블릭 클라우드에 올릴 수 있고, 내 컴퓨터에서 작업하는 것도 지원하고, 노드js도 지원한다. MIT 라이센스이다. 본인이 맘대로 상용화해도 된다.

- 자바스크립트가 은근히 성능이 좋다. 

 

(3) Client Integration

- 다양한 것을 제공한다.

- 서버는 HTTP 서버 만들고, 서버 객체를 만들고 채팅방을 만든 다음에 사용자를 받아들이고, 채팅하는 어플리케이션을 등록하고 클라이언트가 조인할 수 있다.  메세지를 받으면 전체에 뿌릴수도 있다. 

- 클라이언트는 내가 조인하고, 메세지를 보내는 등의 동작이 가능하다.

 

4) GameSparks (Commercial -Free/Paid, acquired by Amazon)

(1) 개요

- 아마존에 인수되었다.(2018년)

- 네트워크 베이스드로 게임을 만드는 엔진이 있는 회사

 

 

 

5) PlayFab (Commercial - Free/Paid, acquired by Microsoft)

- 마이크로 소프트가 인수했다. (2018년)

- 리얼타임이 가능하다. 플레이어 관리, 돈, 리더보드 등 가능하다. (마스터 서버)

- 서버 운영을 위한 병렬처리, 대시보드, 테스트, 리포트 등을 도와주는 관리하는 기능도 제공한다.

- 메세지를 주고 받는 것도 제공한다.

 

cf) 클라우드 컴퓨팅 회사의 게임 서버 인수

- 대부분 2018년 겨울 쯤에 게임 서버를 인수한다.

 

 

 

6) Unity (Deprecated)

(1) 개요

- 유니티도 네트워크 기술을 제공했지만 2018년에 이를 단종한다. 이후 새로운 로드맵을 만든다.

- 기존에 P2P 다 있었지만 새롭게 만들었다.

 

7) IFUN Engine (Commercial, Made in Korea)

- 한국이 만든 게임 서버

 


3. Public Cloud Solutions

1) Google Cloud Platform

(1) 아고네스

- 프론트, 백엔드에 대한 서버를 최소화해주려는 노력을 한다.

- 휴대폰(안드로이드), PC(크롬), 게임 콘솔(구글 스테이디어)도 확보했다. 직접 게임을 만들지 않을 뿐이지 게임에 관한 유통을 직접할 수 있다.

 

(2) 특징

- 클라우드 컴퓨팅의 강점을 내보인다.

- 그래픽, 로직 등을 제공하고 앱앤진 등을 제공해준다.

- 데이터 베이스를 강조하고, 구글 클라우드 플랫폼을 사용해서 데디케이티드 게임 서버를 만들 수 있도록 잘 돕는다.

- 데이터 분석, 구글 스토리지, 수 많은 프로그램을 사용해 마스터 서버, 쿠버네티스를 사용한 오케스트레이션 등을 할 수 있도록 돕는다. 

- 게임 서버가 제대로 돌아가는지 체크하고, 어떻게 스케일 업이 자동화되는지 등에 대한 내용이 교재에 문서로 있다.

- 구글은 많은 기능을 제공한다. 이에 따라 우리가 원하는 게임 로직만 짜고 대부분은 지원받는다.

 


2) Amazon GameLift

- 서버 호스팅에 대한 부분은 별도로 설명한다.

- 게임 호스팅을 하는 것은 구매한 스파크에 의해 사용이 가능하다.

- 구글은 미들웨어, 데이터 분석 등의 강점을 강조하는 반면, 아마존은 평균 지연시간 등의 시간을 얘기한다. 아마존은 전세계 유명 지역에 데이터 센터를 확보했다. 비즈니스가 먹힐만한 곳에 서버를 두었다. 따라서 빠르다. PaaS부터 달라지는데 클라우드 컴퓨팅을 지나 게임에 와서도 나타난다.

 

(2) 특징

- 크로스 플랫폼, 스케일어빌리티, 매치메이킹, 어떤 엔진을 지원하는지(프론트 엔진 like 유니티 등)을 제공한다.

- 게임 특화된 부분은 많지는 않다. 

- 개발자의 능력이 충분하다면 이를 사용하는게 좋을수도 있다. 지연시간이 적기 때문

- 아마존은 점점 게임 지원을 많이 산다. 


4. Streaming Games

1) Concept

(1) 구글 프로젝트 스트림 테스트

- 실제 게임을 실행한 화면이 나온다. 

- 아고네스를 선보이더니 게임 영상을 보여주는데 이를 보여주면서 스트리밍 게임에 구글이 들어왔다고 설명한다.

- 기존의 게임은 대부분 클라이언트가 존재한다. 클라이언트를 다운받고 설치해서 그래픽을 랜더링해주는 역할을 한다. 따라서 클라이언트의 성능에 많은 관심을 가진다. 그러면 게임을 위해 다른 사람과 쉐어해야하는 정보만 다른 사람에게 보낸다. 실제로 화면으로 만드는 것은 클라이언트가 한다. 매우 헤비하다.

 

- Thin client: 입출력하는 악세사리 등이 있는데 프로세싱은 거의 못한다.

- 내 Thin client에서 처리하지 않고, 네트워크를 통해 클라우드에 있는 곳에서 동작한다. 화면은 서버가 또 만들어주고, 렌더링해주고, 이를 동영상으로 스트리밍해준다. 

- 네트워크가 부하를 감당하고, 지연도 적다면 스트리밍 게임을 할 수 있다. 따라서 이를 고려해 클라이언트가 아닌 클라우드에서 처리하고 클라이언트에게 전송하고자 했다.

- 2018년 10월에 베타테스트를 진행했다. 

 

 

2) Sony PlayStation Now (int commercial service)

- 2014년에 소니가 스트리밍 게임에 대한 테스트를 했었는데 플레이스테이션 게임기가 있다면 할 수 있는데 없으면 못한다. 게임을 제공하는 입장에서는 플레이스테이션을 가지고 있다는 것이 매우 중요하다. 만약 없더라도 할 수 있다면? 하는 입장에서 테스트로 만들어봤다. 입출력과 동영상 출력을 할 수 있는 디바이스만 있으면 이를 할 수 있도록 했다.

 

3) Microsoft xCloud (in test)

- 구글은 2018년, 마이크로 소프트도 2018년에 제공했다.

 

4) Google Project Streaming (in test)

- nvidia도 스트리밍만 받을 수 있도록 만들어봤다.

- 2018년에 위의 내용들이 막 벌어진다.

- 우리나라에서 2019년에 5G를 상용화했다. 이에 따라 돌아다니면서 배그, VR, 스트리밍 게임 등을 할 수 있다. 이에 따라 플레이스테이션 게임 등도 가능하다. 

 


5. Networking Issues

1) Latency & QUIC

- 게임 네트워크인데 QUIC이 있다.  쿠키런은 HTTP를 사용했었는데 게임을 할정도로 안정적이지 않아서 불안했다. 이에 따라 HTTP를 공부하고 TCP를 사용하는 대신 HTTP 3.0 (QUIC)을 활용했다. 이후 성능이 매우 개선된다.

- HTTP의 지연시간은 크기도 크고 편차도 매우 심하지만 HTTP 3.0을 사용하니까 훨씬 개선되었다. 

 

 

2) Deep Traffic Analysis & IDEAs

- 네트워크의 게임 트래픽을 분석한다. 과거의 자료지만 게임에 대한 용도와 이에 대한 분석이 매우 크다.

 


6. Conclusion

1) SF to Reality

- 엔젤 헤즈 폴른: 드론이 네트워킹을 통해 편대 비행을 하는데 그 중 하나는 5G 이동통신을 통해 제어를 한다. 클라우드 컴퓨팅을 도입해야한다. ad hoc을 통해 자기들끼리 네트워크 연결을 하고, 머신러닝, 딥러닝을 통해 인식을 한 뒤에 얼굴을 체크한다. 이에 따라 매시브한 드론에 네트워크가 붙어서 인터렉티브하게 리얼타임으로 커뮤니케이션 한다. 이는 게임 서버와 비슷하다. 사이버 상에 있는 자동차, 비행기를 대체할 수 있고, 결국 진짜 이를 할 수 있다.

- 2017년 1월에 나온 동영상: FA18에서 드론이 떨어진다. 드론이 날라간다. 

- 드론을 떨어트리고 작전을 위해 이들끼리 줄을 선다. 이후 폭격하기 위해 전진하고 이들을 감싼다. 실시간으로 반영한다.

- 매쉬네트워킹하는 영상들도 많다.

- 웹 어셈블리: 웹 어셈블리로 웹 브라우저 위에서 실제로 만든다. 인터렉티브하게 멀티미디어 컨텐츠를 만든다.

 

2) 결론

- 지금까지 배운 내용을 게임에서 확인하고 이를 현실 속에 있는 드론 등에 매핑할 수 있는 등 게임서버는 여태 배운 네트워킹 기술을 많이 적용하고, 이를 알고 있을 때 앞으로의 트렌드, 기존 소프트웨어의 성능 향상 등을 할 수 있다.

728x90
반응형