RPC ( Remote Procedure Controller )

김지환·2022년 10월 31일
0

RPC의 정의

원격 프로시저 호출(영어: remote procedure call, 리모트 프로시저 콜, RPC)은 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게하는 프로세스 간 통신 기술이다. 다시 말해, 원격 프로시저 호출을 이용하면 프로그래머는 함수가 실행 프로그램에 로컬 위치에 있든 원격 위치에 있든 동일한 코드를 이용할 수 있다.

객체 지향의 원칙을 사용하는 소프트웨어의 경우 원격 프로시저 호출을 원격 호출(remote invocation) 또는 원격 메소드 호출(remote method invocation)이라고 일컫는다.

가끔 ONC RPC와 DCE/RPC와 같은 비호환 대상을 수행하기 위해 쓰이는 다른 수많은 기술이 있다.

RPC 네트워크 통신흐름

  1. 클라이언트가 파라미터를 넘겨 client stub procedure를 호출한다. client stub은 클라이언트의 주소공간 내에 존재한다.
  2. client stub이 파라미터들을 Mashalling을 진행하고 메시지에 복사한다. Marshalling 은 정해진 규격으로 파라미터들을 전환하는 작업을 의미한다. client stub은 원격 서버 머신으로 메세지를 보내는 계층인 transport layer로 메세지를 보낸다.
  3. 서버에서, transport layer는 메세지를 server stub으로 보낸다. server stub은 전달된 파라미터 값들을 Unmashalling 하고 Server application 으로 전달한다.
  4. 서버 프로시저가 완료될 때, 서버 프로시저는 server stub으로 반환된다. server stub은 결과 값들을 모아서 메세지에 넣고, transport layer에 메세지를 보낸다.
  5. transport layer는 결과 메세지를 다시 client transport layer로 보내고 client transport layer는 그 결과를 또 client stub에게 전달한다.
  6. client stub은 반환 파라미터들과 실행 결과값을 다시 Unmashalling 한다..

Procedure vs Function

Procedure 와 Function ( 함수 ) 의 차이는 return 값이 있느냐 없느냐의 차이이다.

def add(a, b): # Function
	return a + b

def add(a, b): # Procedure
	print(a +  b)

RPC Runtime

RPC Runtime 시스템은 RPC 메커니즘의 기반이 되는 네트워크 통신을 처리하는 루틴과 서비스 집합의 라이브러리이다. RPC 호출 과정에서 클라이언트 측과 서버 측 런타임 시스템의 코드 핸들 바인딩, 적절한 프로토콜을 통한 통신 설정, 클라이언트와 서버 간의 통화 데이터 전달 및 통신 오류를 처리한다.

Stub

스텁의 기능은 프로그래머가 작성한 응용 프로그램 코드에 투명성을 제공하는 것이다.

  • 클라이언트측에서 스텁은 클라이언트의 로컬 프로시저 호출과 런타임 시스템 간의 인터페이스, 데이터 마샬링 및 언마샬링, RPC 런타임 프로토콜을 호출하고 요청 시 바인딩 단계 중 일부를 수행한다.
  • 서버측에서 스텁은 런타임 시스템과 서버에 의해 실행되는 로컬 관리자 절차 사이에 유사한 인터페이스를 제공한다.

Binding

가장 유연한 솔루션은 동적 바인딩을 사용하고 RPC가 처음 만들어질 때 런타임에 서버를 찾는 것. 클라이언트 스텁이 처음 호출되면 네임 서버에 연결하여 서버가 있는 전송 주소를 결정한다.

Dynamic binding e.g)

IDL ( Interface Definition language )

함수명, 인자, 반환값에 대한 데이터 타입이 저장된 IDL 파일을 'rpcgen' 컴파일러를 이용하여 Stub 코드를 자동으로 생성.

  • IDL(Interface Definition Language) : 인터페이스 정의 언어. 어느 한 언어에 국한되지 않는 언어 중립적인 방법으로 인터페이스를 표현함으로써, 구현 언어(C, C++, Java 등)가 아닌 정의 언어로, 구현 언어로의 매핑(mapping)을 지원.

RPC 장단점

장점

  • Multi language 문제를 해결할 수 있다는 매력 포인트가 있음. MSA ( Micro Service Architecture ) 환경이 많아지고 있는 현추세에 잘 어울리는 통신 프로토콜.

단점

  • RESTApi 처럼 널리 사용되는 방식은 아니다 보니 대중적이지 못하고 러닝커브가 분명히 존재함.
  • 보안이 보장되지 않음
  • 호출 실행과 반환 시간이 보장되지 않음.

Reference

https://ko.wikipedia.org/wiki/원격프로시저호출

https://www.geeksforgeeks.org/remote-procedure-call-rpc-in-operating-system/

https://www.slideshare.net/sandpoonia/5-26928882

profile
Developer

0개의 댓글