원격 프로시저 호출(영어: remote procedure call, 리모트 프로시저 콜, RPC)은 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게하는 프로세스 간 통신 기술이다. 다시 말해, 원격 프로시저 호출을 이용하면 프로그래머는 함수가 실행 프로그램에 로컬 위치에 있든 원격 위치에 있든 동일한 코드를 이용할 수 있다.
객체 지향의 원칙을 사용하는 소프트웨어의 경우 원격 프로시저 호출을 원격 호출(remote invocation) 또는 원격 메소드 호출(remote method invocation)이라고 일컫는다.
client stub
은 클라이언트의 주소공간 내에 존재한다.client stub
이 파라미터들을 Mashalling을 진행하고 메시지에 복사한다. Marshalling 은 정해진 규격으로 파라미터들을 전환하는 작업을 의미한다. client stub
은 원격 서버 머신으로 메세지를 보내는 계층인 transport layer
로 메세지를 보낸다.transport layer
는 메세지를 server stub
으로 보낸다. server stub
은 전달된 파라미터 값들을 Unmashalling 하고 Server application 으로 전달한다.server stub
으로 반환된다. server stub
은 결과 값들을 모아서 메세지에 넣고, transport layer
에 메세지를 보낸다.transport layer
는 결과 메세지를 다시 client transport layer
로 보내고 client transport layer
는 그 결과를 또 client stub
에게 전달한다.client stub
은 반환 파라미터들과 실행 결과값을 다시 Unmashalling 한다..Procedure 와 Function ( 함수 ) 의 차이는 return 값이 있느냐 없느냐의 차이이다.
def add(a, b): # Function
return a + b
def add(a, b): # Procedure
print(a + b)
RPC Runtime 시스템은 RPC 메커니즘의 기반이 되는 네트워크 통신을 처리하는 루틴과 서비스 집합의 라이브러리이다. RPC 호출 과정에서 클라이언트 측과 서버 측 런타임 시스템의 코드 핸들 바인딩, 적절한 프로토콜을 통한 통신 설정, 클라이언트와 서버 간의 통화 데이터 전달 및 통신 오류를 처리한다.
스텁의 기능은 프로그래머가 작성한 응용 프로그램 코드에 투명성을 제공하는 것이다.
가장 유연한 솔루션은 동적 바인딩을 사용하고 RPC가 처음 만들어질 때 런타임에 서버를 찾는 것. 클라이언트 스텁이 처음 호출되면 네임 서버에 연결하여 서버가 있는 전송 주소를 결정한다.
Dynamic binding e.g)
함수명, 인자, 반환값에 대한 데이터 타입이 저장된 IDL 파일을 'rpcgen' 컴파일러를 이용하여 Stub 코드를 자동으로 생성.
https://ko.wikipedia.org/wiki/원격프로시저호출
https://www.geeksforgeeks.org/remote-procedure-call-rpc-in-operating-system/