[Unreal Engine] 멀티플레이에서 서버의 역할, 언리얼 서버 관련 용어 정리
게임 서버에 관련해 어느 정도 개념 정립이 돼서 블로그에 정리를 해본다.
간단 단어 정리
1. Host :
- 네트워크 상에서의 컴퓨터 또는 장치를 가리키지만, 해당 글에서는 네트워크에서 중요한 역할을 하는 개별 컴퓨터나 장치를 일컫는다.
2. Hosting :
- 컴퓨터 네트워크에서, 특정 기능 또는 서비스를 다른 사용자에게 제공하고 관리하는 것
3. Client-Server model :
- 네트워크 아키텍처에서 클라이언트가 서비스나 자원을 요청하고, 서버가 이 요청을 처리하고 응답하는 상호작용 모델을 의미.
- 즉, Client의 역할과 Server의 역할이 분리되어 있음
서버 방식 in 멀티플레이어 게임
멀티플레이어 게임에서, 클라이언트와 서버의 구성에 따라 크게 3가지 방식으로 나뉜다.
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
- 서버에서 호출되면 서버와 연결된 모든 클라이언트에서 실행
- 클라이언트에서 호출되면 소유 여부에 관계없이 로컬에서만 실행