RPC
XDR 위에 구현 된 IPC의 한 형태로, 원격 혹은 분산되어 있는 컴퓨터의 운영체제에서 사용되는 고수준의 커뮤니케이션 패러다임을 제공하는 프로토콜이다.
RPC 자체는 "전송계층" 프로토콜이 아니지만, 기존에 통신하던 방법을 사용하는데, 프로그램 간 메시지 데이터를 전달하기 위해 TCP/IP 혹은 UDP와 같은 저수준 통신 프로토콜을 사용한다. RPC를 통해, 논리적인 client-server 통신 시스템을 구현할 수 있다.
또한, 원격(remote)인지의 여부와 상관없이, 하나의 머신에서 다른 머신의 부분적인 프로그램(subroutine)을 실행시킬 수 있다. 이로써 RPC 프로토콜은 원격의 프로시저를 마치 로컬 프로시저처럼 동작시킬 수 있다.
RPC 프로토콜은 XDR라고 하는 원격 통신에서 데이터의 표현을 표준화 하는 프로토콜 위에 만들어졌다.
LPC vs RPC
그렇다면 **LPC(Local Procedure Calls)**와 **RPC(Remote Procedure Calls)**의 차이는 무엇일까? RFC 1831에서 다음과 같이 설명한다.
- 예외 처리
- RPC 사용 시, 원격 서버나 네트워크 요청 실패에 대한 예외 처리를 반드시 수행해야 한다.
- 전역변수와 side-effects
- 서버는 클라이언트의 메모리 주소 공간에 접근할 수 없기 때문에, 숨겨진 인자(argument)는 전역 변수로 사용될 수 없거나 side-effects가 발생한다.
- 성능
- RPC가 LPC보다 수십, 수백 배 이상 더 느리다.
- 인증
- RPC는 보안되지 않은 네트워크를 통해 전달될 수 있기 때문에, 인증 과정이 필요할 수 있다.
RPC의 Transport Independency로 인한 특징
RPC 프로토콜은 서로 다른 여러 전송 계층 프로토콜에서 구현될 수 있다. 그리고 RPC 프로토콜은 메시지가 어떻게 전달되는지 상관없이, 메시지 내용의 해석에만 집중하기 때문에, 전송계층 프로토콜에 대한 정보를 얻을 수 없다.
이처럼 RPC 자체는 신뢰성 있는 데이터 전송을 보장하지 않기 때문에, 전송 계층 프로토콜의 유형을 알아야 할 필요가 있다.
만약, 연결지향 프로토콜인 TCP라면 문제가 되지 않지만, UDP 프로토콜 위에서 실행되고 있을 경우, RPC에서 제공하지 않는 시간초과, 재전송, 중복 감지 를 구현해야 한다.