Unreal Engine, 네트워크 요약

언리얼 엔진은 Unreal Tournament 온라인 멀티 게임이라 개발에서도 편리하게 지원하고 있다.

이전 시간에 언리얼 에디터에서 Cosmetic 캐릭터 룩을 구현할 때 서버의 부하를 줄이기 위해 IsNetMode 함수로 통해 분기문으로 클라만 쓰도록 사용하였다. 추가로 SetIsReplicatedByDefault 함수로 Replicated 통신을 활성화시키기도 하였다.

멀티 게임은 내 화면에서는 본인의 캐릭터 뿐 아니라 상대방 캐릭터도 보이고 공격하는 모습과 스킬 쓰는 모습을 보여주어야 한다. 개발자는 이렇게 보이도록 네트워크를 개발하고 온라인 게임 목표를 갖고 구현한다.

구현하는 방식은 P2P, C/S 방식이 있다.

Peer To Peer

P2P 는 클라이언트끼리 통신하여 서버의 부담이 없다. 그러나 회선(플레이어)이 늘어나면 플레이어들끼리 통신 부담이 커져 지연이 발생하고 끊어지는 현상이 발생할 수 있다.
회선이 많아질 수록 효율적이지 않고 검증하는 기능이 없으면 패킷 변조 및 해킹에 취약하다.

CENTEALIZED(Super Peer) 방식

Peer 한대를 Host 로 정하고 나머지 Peer와 통신하는 방식이다. Host된 Peer의 네트워크에 따라 원활하게 플레이하거나 지연이 발생할 수 있다.
개발은 소스코드 내부로 내재되어야 한다.

언리얼 에서는 Listen Server 이름으로 되어있으며 선택해서 개발할 수 있다.

DECENTEALIZED 방식

Host 를 정하지 않고 거미줄처럼 각자 네트워크를 연결하는 방식이다. 사용자가 적으면 부담이 없지만, 사용자가 많을수록 효율적이지 않고 네트워크 부담이 매우 커지기 때문에 네트워크가 지연될 수 있다.


Client/Server (C/S) 방식

게임에 필요한 데이터 연산 및 검증을 인프라 서버가 담당한다. 클라이언트들은 서버가 제공하는 세션으로 Join 하여 플레이 할 수 있도록 한다. 또한 서버가 클라이언트에게 챌린지, 타임스탬프, nonce 를 계산하여 검증하므로 변조와 해킹으로 부터 안전하다.

언리얼 개발 코드에서 네트워크를 알아서 지원해주기 때문에 서버가 세션을 생성하고 클라이언트가 조인하게 되면 서버의 부담이 매우 커지고 인프라 비용 또한 늘어날 수 있다.
네트워크 통신에 불필요한 부분은 클라이언트에게만 보여주도록 보여지도록 개발해야한다. 또한 네트워크 개발은 내부 소스코드가 아닌 외부에서 처리하도록 할 수 있다.

요약

  • 클라이언트가 서버로 조인하여 통신함
  • 서버가 클라이언트 패킷을 검증하여 변조 및 해킹에 안전
  • 언리얼은 네트워크 함수로 활성화하면 쉽게 개발 가능
  • 서버의 세션이 늘어날 수록 부담 및 비용이 증가함
  • 불필요한 통신은 클라이언트로만 처리하도록 개발 필요