정의
- 원격 프로시저 호출(Remote Procedure Call)
- 운영 체제에서 사용되는 고수준 통신 패러다임을 제공하는 프로토콜
- RPC는 통신 프로그램 간에 메시지 데이터를 전달하기 위해 TCP/IP, UDP와 같은 저수준 전송 프로토콜이 존재한다고 가정
- 고수준이기 때문에 저수준 프로토콜보다 더욱 추상화된 형태
- 네트워크를 통해 서로 다른 컴퓨터, 프로세스 간 통신을 지원하는 기술
- 클라이언트-서버 모델 사용
- 원격 통신을 로컬 통신처럼 사용 가능
XDR
- eXternal Data Representation(XDR)
- 원격 통신에서 데이터 표현을 표준화
- RPC 프로토콜은 XDR을 기반으로 구축
- RPC 클라이언트-서버가 통신에서 전달한 값을 자동으로 서로 간 합의된 포맷으로 변환함
- 서로 다른 시스템 간에도 문제없이 데이터를 주고받을 수 있음
Local Procedure Call Model
- 원격 프로시저 호출(RPC) 모델은 로컬 프로시저 호출 모델과 유사
- 로컬 프로시저 호출 모델은 내 프로그램의 함수 호출 과정이라고도 표현 가능
- Caller(호출자)가 함수에 넘길 매개변수(인수) 저장
- 함수(프로시저, Callee)로 제어권을 넘김
- 함수 실행이 끝나면 제어권이 다시 Caller에게 돌아옴
- Caller는 함수의 결과를 받아서 이후 실행을 계속
Remote Procedure Call Model
- RPC는 Local Procedure Call Model와 유사한 방식으로 작동
- 외부 프로그램의 함수(원격 프로시저)를 내 프로그램의 함수(로컬 프로시저)인 것처럼 호출할 수 있는게 핵심
- IDL을 사용하여 서버의 호출 규약을 정의
- IDL(Interface Definition Language)에서 프로시저의 통신 규약(이름, 인자, 반환값의 데이터 타입 등)을 정의
- XDR 프로토콜을 사용해 클라이언트-서버 간 합의된 포맷을 사용하기 위함
- stub을 클라이언트, 서버 프로그램에 포함하여 빌드
- 빌드 후 클라이언트는 자신의 함수를 호출하는 것처럼 동일하게 stub에 정의된 함수를 호출할 수 있게 된다.
- stub 코드는 데이터형을 XDR 형식으로 변환(marshalling)하여 RPC 호출을 실행한다.
- 서버는 수신된 프로시저 호출에 대한 처리 완료 후, 서버 stub이 결과값을 XDR 변환(unmarshalling)하여 반환한다.
- 최종적으로 클라이언트 프로그램은 서버의 결과값을 반환받는다.
핵심
- RPC의 핵심은 외부 프로그램의 함수를 내 프로그램의 함수인 것 처럼 호출
- 클라이언트가 호출할 수 있는 함수 리스트를 서버, 클라이언트 모두 stub으로 내장
- 클라이언트-서버 간 데이터 전달 포맷을 통일(XDR)
- 클라이언트는 stub에 내장된 함수를 미리 서버와 합의해둔 데이터 포맷으로 호출할 수 있음