목차

     

     


     

     

    RPC (Remote Procedure Call)

     

    네트워크를 통한 함수 리플리케이션 지정하기 


     

    RPC (Remote Procedure Call)란?

     

    RPC(Remote Procedure Call)는

     

    네트워크를 통해 원격 위치에 있는 다른 컴퓨터 또는 서버에 함수를 호출하도록 허용하는 프로토콜이다. 

     

    주로 멀티플레이어 게임에서 사용되며, 클라이언트와 서버 간의 상호작용을 가능하게 한다.

     

    RPC의 핵심 개념은 함수가 로컬 시스템에서 실행되지 않고, 네트워크를 통해 전송된 후 원격 시스템에서 실행된다는 것이다.

     

    RPC 기능은 언리얼 엔진의 Replication 시스템과 밀접하게 연관되어 있다. Replication은 네트워크 멀티플레이어 환경에서 게임 오브젝트와 그 상태들 사이의 동기화를 담당한다.


     

     

    RPC의 종류 :  Client,  Server,  NetMulticast

     

    함수를 RPC 로 선언하려면 UFUNCTION 매크로 내에 Server, Client, NetMulticast 키워드를 명시하여 해당 함수가 어떤 유형의 RPC인지 알려줘야 한다.

     

       
     Client  함수를 서버에서 호출되지만 클라이언트에서 실행되는 RPC 로 선언
     Server  함수를 클라이언트에서 호출되지만 서버에서 실행되는 RPC 로 선언
     NetMulticast  Multicast RPC는 서버에서 호출된 다음 서버는 물론 현재 연결된 모든 클라이언트에서도 실행되도록 고안된 것이다.

     

    UFUNCTION( Client )
    void ClientRPCFunction();
    
    UFUNCTION( Server )
    void ServerRPCFunction();
    
    UFUNCTION( NetMulticast )
    void MulticastRPCFunction();

     


     

     

    RPC 작동원리

     

    RPC는 클라이언트와 서버 간에 함수 호출을 전송하는 방식으로 작동한다. 이는 네트워크를 통해 원격 위치에 있는 다른 컴퓨터 또는 서버에게 함수 실행을 요청하거나, 결과를 반환받는 것을 가능하게 한다.

       
    1.  함수 정의   언리얼 엔진에서 UFUNCTION 매크로를 사용하여 RPC 함수를 정의
      이때, 해당 함수가 어떤 유형의 RPC인지(Server, Client, NetMulticast) 명시
    2.  함수 호출   클라이언트 또는 서버가 해당 RPC 함수를 호출.
      이때 호출하는 쪽이 '클라이언트'일 경우 '서버'로, '서버'일 경우 '클라이언트'로 메시지가 전달.
    3.  메시지 전송   네트워크 프로토콜을 통해 메시지(함수 이름과 인자)가 원격 시스템으로 전송
    4.  함수 실행   원격 시스템에서 메시지를 받으면 해당 시스템에서 그 메시지에 대응하는 함수를 찾아 실행
    5.  결과 반환   만약 RPC가 결과 값을 반환해야 하는 경우(즉, 동기식인 경우), 그 결과 값은 다시 네트워크 프로토콜을 통해 원래 시스템으로 전달되고, 원래의 함수 호출자에게 반환됨.

     


     

     

    RPC 사용시 주의사항

     

       
      네트워크 오버헤드   RPC는 네트워크 통신을 필요로 하기 때문에, 호출 횟수가 많아질수록 네트워크 대역폭에 부담을 줄 수 있다. 따라서 불필요한 RPC 호출은 최대한 줄이는 것이 좋다.
      비동기성   일반적으로, 네트워크 통신은 비동기적이다. 즉, 함수를 호출하고 결과를 받는 사이에 지연이 발생할 수 있다. 이 점을 고려하여 게임 로직을 설계해야 한다.
      보안   클라이언트에서 서버로의 RPC 호출은 잠재적인 보안 위협 요소가 될 수 있다. 클라이언트에서 발생한 데이터나 요청은 항상 신뢰할 수 없으므로, 서버에서는 모든 클라이언트의 요청을 검증해야 한다.
      함수 인자 제한   언리얼 엔진의 RPC 시스템은 일부 데이터 유형만 전송할 수 있도록 제한되어 있다. 복잡한 클래스나 구조체 등을 인자로 사용하려면 직렬화(Serialization) 과정이 필요하다. 
      호출 순서   여러 개의 RPC가 연속적으로 호출될 경우, 그들 사이에 있는 네트워크 지연으로 인해 실제 실행 순서가 코드상의 호출 순서와 다르게 될 가능성도 있다.

     


     

     

    언리얼 공식문서

     

    https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Networking/Actors/RPCs/

     

    RPC

    네트워크를 통한 함수 리플리케이션 지정하기 입니다.

    docs.unrealengine.com

     

     

    https://docs.unrealengine.com/5.0/en-US/rpcs-in-unreal-engine/

     

    RPCs

    Designating function replication across the network

    docs.unrealengine.com


     

    '⭐ Unreal Engine > UE 개념정리' 카테고리의 다른 글

    [Unreal] 언리얼엔진 상속관계(=계층구조)  (0) 2023.04.11
    [Unreal] Unreal Authority  (0) 2023.04.06
    [Unreal] 이벤트 디스패처 Event Dispatcher  (0) 2023.04.02
    Slate UI  (0) 2023.03.27
    [Unreal] UProperty  (0) 2023.03.20