본문 바로가기
카테고리 없음

[언리얼] RPC 함수의 키워드: Reliable, WithValidation 신뢰성과 유효성

by 연지니어스 2025. 3. 20.

언리얼 엔진에서 RPC 함수의 Reliable과 WithValidation 기능

언리얼 엔진(UE4)은 멀티플레이어 게임 개발을 위한 강력한 네트워크 기능을 제공한다. 그 중에서 대표적인 것이 바로 RPC(Remote Procedure Call) 함수이다. RPC 함수는 서버와 클라이언트 간 데이터를 주고받기 위한 중요한 수단으로, 이를 통해 실시간 상호작용이 가능하다.

 

RPC 함수에는 두 가지 주요 옵션인 Reliable과 WithValidation이 존재한다. 이 두 가지 옵션은 네트워크 환경에서의 안전성과 신뢰성을 확보하기 위해 사용되며, 올바르게 사용하지 않을 경우 불필요한 네트워크 부하가 발생할 수 있다. 이번 글에서는 Reliable과 WithValidation의 개념과 차이점, 사용법 등을 상세히 알아보고 이해하자.


1. RPC 함수의 기본 개념

언리얼 엔진의 RPC 함수는 서버와 클라이언트 간의 데이터를 교환하기 위한 함수로, 함수 호출이 클라이언트 또는 서버에서 이루어질 때 원격 시스템으로 해당 호출을 전달한다. RPC 함수는 UFUNCTION 매크로를 사용하여 선언되며, Server, Client, NetMulticast 옵션을 통해 호출 방향을 설정할 수 있다.

  • Server: 클라이언트가 서버로 데이터를 전송할 때 사용한다.
  • Client : 서버가 클라이언트로 데이터를 전송할 때 사용한다.
  • NetMulticast : 서버가 모든 클라이언트로 데이터를 전송할 때 사용한다.

2. Reliable의 개념과 사용법

Reliable 옵션은 패킷 손실 없이 데이터를 전송하고자 할 때 사용하는 속성이다. 일반적으로 신뢰성이 중요한 데이터 전송에 사용된다.

Reliable의 특징

  1. 신뢰성 보장 : 패킷이 손실되면 재전송을 통해 반드시 도달하게 한다.
  2. 순서 보장 : 패킷이 도착하는 순서를 보장한다.
  3. 트래픽 증가 : 모든 패킷을 보장하려다 보니 트래픽 부하가 커질 수 있다.

사용 예시

UFUNCTION(Server, Reliable)
void ServerPerformAction(); 

 

Reliable을 사용하는 경우 네트워크 상태가 불안정할 때 성능 저하가 발생할 수 있으며, 부하를 고려하여 필수적인 경우에만 사용하는 것이 중요하다.

 

Reliable이 불필요한 경우 :

  • 주기적 위치 업데이트 : 캐릭터 위치, 회전 정보 등 지속적으로 변화하는 데이터는 일부 패킷 손실이 발생해도 최신 데이터로 덮어쓰면 되므로 Reliable을 사용할 필요가 없다.
  • 시각적 효과나 이펙트 : 폭발이나 파티클 효과 등 시각적 연출은 누락되어도 게임 플레이에 큰 영향을 미치지 않기 때문에 Reliable을 생략하여 성능을 최적화할 수 있다.
  • 상대적으로 덜 중요한 데이터 : 채팅 메시지 등 게임 플레이의 핵심이 아닌 경우 신뢰성을 보장할 필요가 없다.

3. WithValidation의 개념과 사용법

WithValidation 옵션은 서버에서 클라이언트로부터 전송된 데이터를 검증할 때 사용하는 속성이다. 보안상의 이유로 클라이언트 요청을 신뢰할 수 없는 경우 사용된다.

WithValidation의 특징

  1. 보안 강화 : 클라이언트가 보내는 데이터가 유효한지 검사한다.
  2. 부하 증가 : 검증 과정이 추가되어 약간의 성능 저하가 발생할 수 있다.
  3. 선언 필요 : 검증 함수와 실제 호출 함수 두 개를 모두 선언해야 한다.

사용 예시

UFUNCTION(Server, Reliable, WithValidation)
void ServerPerformAction();

bool ServerPerformAction_Validate();
void ServerPerformAction_Implementation(); 

 

언리얼 리플렉션 시스템(UFUNCTION)과의 관계

언리얼 엔진의 리플렉션 시스템(UFUNCTION)은 메타데이터를 통해 함수와 속성을 노출합니다. 이를 통해 네트워크 함수(RPC) 호출이 가능해집니다.

  • 이러한 RPC 함수들은 디컴파일 시 노출될 가능성이 있어, 해커가 악의적으로 호출할 수 있습니다.
  • WithValidation을 통해 이러한 함수를 호출할 때 유효성 검사를 수행하여 불법 호출을 방어할 수 있습니다.

 

WithValidation이 불필요한 경우 :

  • 서버가 데이터를 전송할 때 : 서버에서 클라이언트로 데이터를 보낼 때는 유효성 검증이 필요하지 않다.
  • 게임 플레이에 큰 영향을 주지 않는 데이터 : UI 업데이트 등 클라이언트 전용 처리에서는 검증이 불필요하다.
  • 클라이언트 측에서만 활용되는 정보 : 서버 검증이 의미 없는 로컬 데이터에 대해서는 사용하지 않는다.

Reliable과 WithValidation의 비교

속성 Reliable WithValidation
목적 신뢰성 있는 전송 보장 데이터 유효성 검증
사용 목적 중요 데이터 전송 보안 강화
성능 저하 트래픽 증가로 인한 성능 저하 발생 유효성 검증으로 인한 약간의 부하
주요 특징 패킷 손실 시 재전송, 순서 보장 클라이언트의 데이터 무결성 확인
불필요한 경우 중요하지 않거나 시각적 효과 데이터 서버 전송 데이터 또는 로컬 정보

결론

Reliable과 WithValidation은 언리얼 엔진에서 멀티플레이어 게임을 개발할 때 매우 중요한 요소이다. Reliable은 데이터의 신뢰성을 보장하지만 트래픽 증가로 인한 성능 저하를 유발할 수 있고, WithValidation은 보안성을 강화하지만 성능 부담이 발생할 수 있다.

 

게임 특성과 요구 사항에 따라 두 속성을 적절히 선택하고 사용해야 한다. 중요한 데이터를 전송할 때는 Reliable을 사용하고, 클라이언트의 데이터를 반드시 검증해야 하는 경우 WithValidation을 사용하자. 특히 해킹 위험성이 있는 멀티플레이어 환경에서는 WithValidation을 통한 검증을 철저히 수행하여 보안성을 확보해야 한다.