언리얼 멀티플레이어 프로그래밍을 시작하기 위해 알아야할 지식들을 설명한다.

1. Network Topology

네트워크 토폴로지가 무엇인가? 언리얼 엔진에서 사용하는 네트워크 토폴로지.

Network Topology란 여러 컴퓨터가 네트워크상 연결되어 있는 양태를 말한다. 게임에 접속한 컴퓨터들을 어떤 구조로 연결할지 정해 그 플레이어들이 최신 상태를 공유하게끔 구조화하는 방식이라할 수 있다. 게임 개발에서 주로 다음 두 가지의 topology를 사용한다.

(1). Client-Server Topology

(2). Peer-to-Peer(P2P) Topology

언리얼 엔진은 Client-Server Network Topology를 사용하므로 해당 부분만 더 자세하게 살펴본다. 수학에서 Topology는 위상 수학을 의미한다.

[클라이언트-서버 토폴로지] 클라이언트가 무엇인가? 서버가 무엇인가? 클라이언트-서버 토폴로지는 어떤 방식으로 작동하는가?

Untitled

Client-Server Topology에서 서버란 ‘서비스 제공자’ 단어 의미 그대로 이해한다. 클라이언트는 고객이며, 서버가 제공하는 서비스를 이용할 뿐이다.

멀티플레이어 게임에서 서버의 역할은 자신의 모든 클라이언트에게 게임 정보를 제공하는 것이다. 클라이언트의 역할은 네트워크를 통하여 서버에 필요한 게임 정보를 요청하여 실제 유저에게 결과를 보여주는 것이다. 서버가 클라이언트에게 제공하는 게임 정보에는 여러 종류가 있다. 예를 들어 캐릭터의 현재 위치, 입력 이벤트 등이다. 그렇다면 서버는 왜 클라이언트에게 이러한 정보를 제공해야 하는 것일까?

이 토폴로지의 멀티플레이어 게임은 서버가 그 게임 인스턴스의 주체가 된다. 즉, 게임의 오리지널, 원본이 된다. 서버에서 게임이 구동되고 있고 클라이언트가 서버에 접속하게 되면 서버는 클라이언트의 역할을 생성하고 부여한다. 이 과정 역시 서버에서만 진행된다. 또한 서버는 각 클라이언트의 머신에서 동일한 환경을 동기화시킨다. 동기화하는 과정이 서버가 클라이언트에게 제공하는 게임 정보들이며, 서비스 제공자가 제공하는 서비스다.


Client-Server Topology에서는 게임 인스턴스 하나를 서버로 두며 나머지 게임 인스턴스는 그 서버에 접속하는 클라이언트가 된다. 각 클라이언트는 오로지 서버하고만 통신하는데, 서버는 중간에서 이들 모든 클라이언트와의 통신을 전담한다.

Client-Server 모델은 권위적인 역할을 맡는 주체를 서버로 삼는다. 서버는 모든 네트워크 환경을 관장하며 모든 클라이언트의 환경을 동기화시킨다.

게임 월드의 진본을 시뮬레이션하며 클라이언트에 리플리케이션해 주는 코드를 ‘서버’라고 한다. 또는 새로 들어오는 접속을 리스닝하면서 클라이언트의 접속을 받아 처리해 주는 운영체제상 프로세스라는 의미도 있다. 그리고 ‘서버에 랜 선을 꼽는다’라는 의미에서 쓰는 물리적 하드웨어 뜻도 있다.


게임의 호스트인 서버는 하나의 진정한 권위 있는(authoritative) 게임 상태를 유지한다. 즉, 서버는 멀티플레이어 게임이 실제로 일어나는 곳이다. 클라이언트는 각각 서버에서 소유한 Pawn을 원격 제어(Remote-Control)하여 게임 내 작업을 수행하도록 하기 위해 프로시저 호출을 보낸다. 그러나 서버는 시각적 객체를 클라이언트의 모니터로 직접 스트리밍하지 않는다. 대신 서버는 게임 상태에 대한 정보를 각 클라이언트에 replicate(복제)하여 어떤 액터가 존재해야 하는지, 해당 액터가 어떻게 행동해야 하는지, 다른 변수에는 어떤 값이 있어야 하는지 알려준다. 그런 다음 각 클라이언트는 이 정보를 사용하여 서버에서 일어나는 일에 대한 매우 가까운 근사치를 시뮬레이션한다.