RPC
1. RPC?
RPC(Remote Procedure Call) 원격 프로시저 호출이라는 뜻으로 프로세스 간 통신을 지원해주며 IPC 방식 중 하나이다.
별도 원격 제어를 위한 코딩 없이 다른 네트워크에 위치하는 함수나 프로시저를 실행할 수 있게 하는 프로세스 간 통신 기술이다.
즉, 원격 프로시저 호출을 이용하면 프로그래머는 함수가 실행 프로그램이 존재하는 로컬 위치
에 있든, 원격 위치
에 있든 상관 없이 동일한 기능을 수행할 수 있음을 의미한다.
예를 들어, 컴퓨터 A에 “주문하기” 기능을 실행하려고 하는데, 이 기능은 컴퓨터 B에 구현되어 있다. 이때 컴퓨터 A는 RPC를 통해 컴퓨터 B에 있는 “주문하기” 기능을 실행하라고 요청하면, 컴퓨터 B는 “주문하기” 기능을 실행한 결과를 컴퓨터 A에게 보내준다.
함수 vs 프로시저
- 함수 : Input에 따른 Output 발생을 목적으로 한다. Return 값을 가져가며, Client 단에서 처리되기 때문에 간단한 계산, 수치 등을 도출할 때 사용된다.
- 프로시저 :
명령 단위가 수행하는 절차
에 집중한 개념. Server 단에서 처리되기 때문에 함수보다 큰 단위의 실행, 프로세싱 등을 할 때 사용된다.
2. RPC 목표
- 클라이언트 - 서버 간의 커뮤니케이션에 필요한 상세 정보는 최대한 감춘다. (언어나 환경에 구애받지 않는다.)
- 클라이언트와 서버는 일반 메소드를 호출하는 것처럼 원격의 프로시저를 호출할 수 있다.
3. RPC 동작 방식
stub
이란 프로시저 호출을 추상화하는 작은 코드 조각이다. RPC에서 stub
은 클라이언트와 서버 사이에 원격 프로시저 호출을 처리하기 위해 사용된다.
- 클라이언트가 파라미터를 넘겨 client sub procedure를 호출한다.
client stub
은 클라이언트를 소유한 주소 내에 거주한다. clinet stub
은 파라미터 메시지로 모은다. 모은다의 표현을 표준 포맷으로 변경하고, 각 파라미터를 복사해서 메시지로 넣는 것이다.clint stub
은 원격 서버 머신으로 메시지를 보내는 계층인transport layer
로 메시지를 보낸다.- 서버에서
transport layer
는 메시지를sever stub
으로 보낸다. server stub
은 결과 값들을 모아서 파라미터 메시지로 모은다.- 서버 프로지서는
sever stub
으로 반환된다. server stub
은 결과 값들을 모아서 메시지에 넣고,transport layer
로 보낸다.transport layer
는 해당 결과 메시지를client transport layer
로 보내고,client transport layer
는 그 결과를client stub
으로 보낸다.client stub
은 반환 파라미터들과 실행 결과값을 다시 해체한다.
4. IDL을 이용한 RPC 동작 방식
IDL(Interface Defintion Language)
을 사용하여 서버의 호출 규약을 정의한다.- 함수명, 인자, 반환값에 대한 데이터 형이 저장된
IDL
파일을rpcgen
컴파일러를 이용하여stub
코드를 자동으로 생성한다. stub
은 원시소스코드(c코드 등)의 형태로 만들어지므로 클라이언트, 서버 프로그램에 포함하여 빌드한다.stub
코드는 데이터형을 XDR(External Data Representation) 형식으로 변환한여 RPC 호출을 실행한다.- 서버는 수신된 함수/프로시저 호출에 대한 처리 완료 후, 결과값을 XDR 변환하여 반환한다.
- 최종적으로 클라이언트 프로그램은 서버의 결과값을 반환받는다.
RPC 장단점
- 하부 네트워크의 프로토콜을 신경쓰지 않아도 되기 때문에, 고유 프로세스 개발 집중이 가능
- 프로세스간 통신 기능을 비교적 쉽게 구현하고 정교한 제어 가능
- 호출 실행과 반환 시간이 보장되지 않음
- 보안이 보장되지 않음
RPC는 구현체가 없어 구현이 어렵다는 단점이 있어, 데이터 통신을 우리에게 익숙한 Web을 활용해보려는 시도로 이어져 REST가 등장했다.