IT_Study/Network

[Unreal Engine] 멀티플레이에서 서버의 역할, 언리얼 서버 관련 용어 정리

__Vivacé__ 2023. 9. 4. 00:47

게임 서버에 관련해 어느 정도 개념 정립이 돼서 블로그에 정리를 해본다.


간단 단어 정리

1. Host :
    - 네트워크 상에서의 컴퓨터 또는 장치를 가리키지만, 해당 글에서는 네트워크에서 중요한 역할을 하는 개별 컴퓨터나 장치를 일컫는다.

2. Hosting
:
    - 컴퓨터 네트워크에서, 특정 기능 또는 서비스를 다른 사용자에게 제공하고 관리하는 것

3. Client-Server model
    - 네트워크 아키텍처에서 클라이언트가 서비스나 자원을 요청하고, 서버가 이 요청을 처리하고 응답하는 상호작용 모델을 의미.
    - 즉, Client의 역할과 Server의 역할이 분리되어 있음

 

서버 방식 in 멀티플레이어 게임

멀티플레이어 게임에서, 클라이언트와 서버의 구성에 따라 크게 3가지 방식으로 나뉜다.

 

사실 Client-Server model과 대비되는 방식이 P2P 라고 할 수 있다.

 

1. Peer to Peer:
    - 모든 노드(피어)가 동등한 권한과 역할을 가짐 = 모두가 서버 역할과 클라이언트 역할을 겸함
    - 중앙 서버에 의존하지 않고 서로 서비스를 요청하고 제공할 수 있음
    - 그러나, 버전이 없다 -> 누구의 게임 인스턴스가 옳은 지 모른다

2. Listen Server
    - 게임 클라이언트 중 하나가 서버 역할을 수행.
    - 클라이언트(리슨 서버)는 게임 세션을 호스팅하며 다른 클라이언트가 이에 연결
    - 서버가 게임을 플레이함

3. Dedicated Server
    - 별도의 컴퓨터(전용 서버)가 게임 세션을 호스팅하는 역할
    - 클라이언트는 이 서버에 연결하여 게임을 플레이
    - 서버가 게임을 플레이하지 않음 -> 그래픽을 렌더링할 필요가 없음

 

언리얼 엔진은 Autoritative Client-Server 모델을 적용하고 있음

 

이렇게 시각화해서 구분지어주는 글은 별로 없지만, 각 개념의 장단점은 찾아보면 굉장히 잘 나와있으니 다른 블로그를 참고할 것 

 


이제 Unreal Engine을 사용해서 서버를 구현할 때 알아야 할 핵심 개념들을 정리해놓을건데,

처음 개념을 보는 사람은 따로 찾아보고 다시 정리하는 용도로 보는 것이 나을 듯

 

복제 (Replicate)

서버에서 클라이언트까지의 데이터 분포를 의미

 

복제된 오브젝트 (Replicated)

- 연결된 모든 클라이언트와 서버 간에 정보가 공유되는 “네트워크 오브젝트”가 존재
- 이 오브젝트를 복제된 오브젝트라고 한다 (이 조건에서 네트워크로 상태 공유가 가능한 듯)

 

*Actor : 배치할 수 있는 오브젝트를 의미

*Component : 액터에 부착하는 기능

 

Unreal Engine 계층 구조 내에서, AActor를 상속받은 모든 것은 복제될 수 있다.

 

네트워크 역할

모든 복제된 액터에 대해 3가지 역할이 있음

 

1. Role_Authority

    - 서버 상에 존재하는 복제된 액터 버전의 역할을 항상 수행

    - 캐릭터 A가 있다고 가정해보면, 서버에서 생성된 캐릭터 A의 역할을 의미

 

2. Role_AutonomousProxy

    - 소유한 클라이언트에 존재하는 액터의 버전으로 간주

    - 캐릭터를 보유한 클라이언트에서의 캐릭터 A의 역할

 

3. Role_SimulatedProxy

    - 다른 모든 클라이언트에 있는 액터 버전

    - 캐릭터 A를 조종할 수 없는 다른 클라이언트에서 생성된 캐릭터 A의 역할

 

원격 프로시저 호출 (Remote Procedure Calls)

- 오브젝트의 서버 or 클라이언트 버전이 기능을 실행하도록 지시하는 방법

- Local로 호출되지만, 다른 컴퓨터의 오브젝트 인스턴스에서 원격으로 실행됨

 

RPC의 쓰이는 용도

1. Client

    - 클라이언트 RPC는 서버에서 호출되어야 한다

    - 클라이언트 RPC가 클라이언트 or 비소유 클라이언트에서 호출되면 함수는 로컬로만 실행

 

2. Server

    - 서버 RPC는 소유한 클라이언트에서 호출돼야 한다. —> RPC는 서버에서 실행

    - 비소유 클라이언트가 실행하면 함수는 drop되고 실행되지 않음

 

3. NetMultiCast

    - 서버에서 호출되면 서버와 연결된 모든 클라이언트에서 실행

    - 클라이언트에서 호출되면 소유 여부에 관계없이 로컬에서만 실행