RPC란 무엇인가..?

J-USER·2022년 2월 18일
0

지개넓얕

목록 보기
3/5
post-thumbnail

RPC란 무엇일까?

별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 리모트의 함수나 프로시저를 실행 할 수 있게 해주는 프로세스간 통신

기존에는 프로세스간 통신을 위해 소켓통신, RPC 같은 방식이나 RPC를 활용한 CORBA, RMI 같은 방식을 많이 사용했다면 현재는 웹기술의 발달로 인한 SOAP, REST 등과 같은 방식들이 대세를 이루고 있다고 합니다.
2015년 구글에서는 RPC와 웹기술을 혼합한 gRPC를 처음 발표하기도 했고 많은 사람들의 관심을 받기도 했었죠

RPC 모델은 분산컴퓨팅 환경에서 많이 사용되어왔으며, 현재에는 MSA에서 마이크로 서비스간에도 많이 사용되는 방식입니다. 서로 다른 환경이지만 서비스간의 프로시저 호출을 가능하게 해줌에 따라 언어에 구애받지 않고 환경에 대한 확장이 가능하며, 좀 더 비지니스 로직에 집중하여 생산성을 증가시킬 수 있습니다.

프로시저와 함수

"프로시저 또는 함수를 호출한다" 라는 내용을 보면 함수와 프로시저에 차이점에 대해서 궁금하실 수 있는데, 함수의 경우 일반적으로 "인풋에 대비한 아웃풋이 발생을 목적"으로 하며, 프로시저는 결과값에 집중하기 보단 "명령 단위가 수행하는 절차"를 의미하는 것을 목적으로 합니다.

결과적으로 구조상의 차이는 없으나 목표에 따라 구분을 하고 있습니다.

RPC의 동작은 어떻게 이루어질까?

동작 과정

  1. 우선 IDL(Interface Definition Language)를 통해 호출에 대한 인터페이스를 정의합니다.

  2. IDL에 의해 정의된 인터페이스는 client의 stub과 server의 skeleton 생성의 기반이 되며, rcpgen(유틸리티)를 통해 각각의 stub과 skeleton을 생성합니다.

  3. 클라이언트는 리모트의 프로시저를 사용하기 위해 설계된 스텁의 프로시저를 호출하고, 프로시저 호출에 필요한 인자와 비지니스에 로직에 필요한 메소드를 호출합니다.

  4. 스텁은 서버가 이해할 수 있는 형태로 데이터의 캐스팅 진행하고, 서버 측 RPC로 호출을 진행합니다.

  5. 서버는 수신된 호출에 대한 데이터를 처리합니다.

  6. 서버측 RPC 프로토콜은 처리된 데이터를 캐스팅하여 클라이언트로 응답합니다.

설명

  1. IDL이란 말그대로 인터페이스에 대한 정의를 진행하는 언어이며, 각각의 시스템을 연결하는 고리가 됩니다.
    RPC를 사용하는 Client와 Server간에 같은 형태의 언어를 사용할 수도, 그렇지 않을 수도 있습니다. 다른 언어간의 프로시저가 서로의 요청에 대해서 이해하기 위해서는 인터페이스를 통해 규칙을 명세해두고 각자의 시스템이 이해할 수 있는 형태로의 변형이 필요합니다.

  2. 정의된 IDL을 기반으로 rcpgen이라는 rpc 프로토콜 컴파일러를 통해 코드(stub)가 생성됩니다. 스텁을 통해 Client는 프로시저 호출을 위한 참조자가 생겼고, Server는 프로시저 이해를 위한 참조가 생기게 됩니다.

  3. RPC 호출을 위해 필요한 파라메터를 넣어 호출을 진행합니다.

  4. 작성된 코드를 통해 생성된 데이터는 RPC 프로토콜의 XDR 필터를 통해 인코딩되어(데이터 캐스팅) 서버로 전송됩니다.

  5. 서버측 RCP 프로토콜은 클라이언트로부터 전달 받은 데이터를 디코딩하고 데이터를 처리합니다.

  6. 서버에서는 처리된 데이터를 XDR 필터를 통해 인코딩하고 클라이언트에게 전달하여 줍니다. 데이터를 전달 받은 클라이언트는 인코딩된 데이터를 다시 디코딩하고 결과 값을 받아보게 됩니다.

profile
호기심많은 개발자

0개의 댓글