원격 프로시저 호출


원격 프로시저 호출


원격 프로시저 호출(RPC)은 서버 상의 클라이언트 간에 프로그램의 프로시저 혹은 함수를 호출하는 기술이다.

기본적으로 클라이언트-서버 기반으로 동작하고, 클라이언트가 서버에 요청을 보내면, 서버가 요청된 작업을 수행한 후 클라이언트로 다시 반환한다.

클라이언트는 원격 프로시저를 호출하고, 서버는 요청된 해당 프로시저를 수행하고 반환한다.

이를 중개하는 코드가 있는데, 이를 스텁(Stub)이라 한다. 스텁은 클라이언트와 서버 양쪽에서 RPC 호출을 중개한다. 클라이언트 쪽에서 패키징을 하고, 서버 쪽에서 이를 언패키징해서 수행하도록 한다.

RPC


RPC의 동작 방식


  1. 클라이언트 -> 스텁 호출 후 파라미터 전달

  2. 스텁이 파라미터를 메시지로 패키징하는 마샬링 수행

  3. 메시지를 전송 계층으로 전달, 이를 원격 서버로 전송

  4. 서버의 전송 계층은 이를 스텁으로 전달, 스텁에서 이를 언패키징하는 언마샬링 수행

  5. 서버 루틴을 호출하여 작업 수행

  6. 작업 완료 후 결과를 스텁으로 전송 후 마샬링

  7. 다시 클라이언트로 보내고, 클라이언트 스텁에서 다시 언마샬링

  8. 결과를 전달 받음


RPC의 종류


  • 콜백 RPC : 프로세스가 클라이언트와 서버 역할을 모두 수행

  • 브로드캐스트 RPC : 클라이언트의 요청이 네트워크 상 모든 서버에 전송

  • 배치모드 RPC : 클라이언트 측에서 여러 RPC 요청을 모아 서버로 한 번에 전송


RPC의 장점


  • 고수준 프로그래밍 언어에서 일반 프로시저 호출을 사용해서 클라이언트와 서버가 통신할 수 있도록 한다.

  • 메시지가 전달되는 방식에 대한 세부사항을 숨긴다.

  • 로컬과 분산 환경 모두에서 사용이 가능하다.

  • 코드 재사용성이 높다.


언리얼에서의 RPC


언리얼 엔진에서의 RPC는 네트워크를 통해 원격에 있는 함수를 호출하는 방식을 말한다.

주로 멀티플레이 게임에서 클라이언트와 서버 간 통신, 상태를 동기화하는 데 사용된다.


언리얼 엔진에서의 RPC 종류


  • 서버 RPC : 클라이언트에서 호출해서 서버에서 실행되는 함수. 서버에서의 처리가 필요한 경우에 사용

  • 클라이언트 RPC : 서버에서 호출되어 클라이언트에서 실행되는 함수. 특정 클라이언트에 한정된 이벤트를 실행시키는 데 사용된다.

  • 넷멀티캐스트 RPC : 서버에서 호출되며, 해당 서버와 연결된 모든 클라이언트에서 실행됨.