RPC란
RPC 탄생 배경
MSA(Micro Service Architecture)
구조로 서비스를 만들다보면, 다양한 언어와 프레임워크로 개발되는 경우가 잦다. 이런 Polyglot
한 구조에서는 프로토콜을 맞춰서 통신해야 하는 비용이 발생한다. 이 경우에 RPC를 이용하여 언어에 구애받지 않고, 원격에 있는 프로시저를 호출하여 조금 더 비즈니스 로직에 집중하는 개발을 할 수 있다.
RPC 개념
- RPC(Remote Procedure Call)란 프로세스간 통신을 위해 사용하는 IPC(Inter Process Communication) 방법의 한 종류이다. 원격지의 프로세스에 접근하여 프로시저 또는 함수를 호출하여 사용한다. 말 그대로 원격지의 프로시저를 호출하는 것이다.
- 일반적으로는 프로세스는 자신의 주소 공간 안에 존재하는 함수만 호출하여 실행 가능하다. 하지만, RPC를 이용하면 다른 주소 공간에서 동작하는 프로세스의 함수를 실행할 수 있게 된다. 위에도 언급했듯, 분산 컴퓨팅 환경에서 프로세스 간 상호 통신 및 컴퓨팅 자원의 효율적인 사용을 위해서 발전된 기술이다.
- RPC는 분산 컴퓨팅과 client-server를 베이스로 한 앱을 위한 기술이다. RPC는 일반적인 로컬 프로시저 호출을 확장하는 것을 기반으로 한다. 그래서 호출된 프로시저의 필요가 호출하는 프로시저 처럼 같은 주소 공간에 존재하지 않는다. 두 프로세스들이 같은 시스템에 있거나 다른 시스템에 존재하며 네트워크가 그들을 연결하는 형태로 존재한다.
💡 프로시저와 함수의 차이?????
- 함수는
인풋에 대비한 아웃풋의 발생
을 목적으로 한다.
- 프로시저는
결과 값에 집중하기 보단 '명령 단위가 수행하는 절차'
를 목적으로 한다.
RPC 동작 흐름 이미지 (Client - Server process)
- RPC (원격 프로시저 호출)는 응용 프로그램이 네트워크를 통해 서로 통신할 수 있도록 하는 통신 유형이다. 한 응용 프로그램의 기능이나 프로시저를 다른 응용 프로그램에서 호출할 수 있으므로 분산 컴퓨팅과 더 큰 확장성이 가능하다.
- RPC 는 호출 응용 프로그램(클라이언트 라고도 함)에서 다른 응용 프로그램(서버 라고도 함)으로 요청을 보내고 응답을 받는 방식으로 작동한다. 요청은 일반적으로 매개변수 및 반환 값과 같이 실행해야 하는 절차에 대한 정보가 포함된 데이터 패킷으로 전송된다.
- 서버가 패킷을 수신하면 이를 처리하고 관련 데이터 또는 결과와 함께 응답을 반환한다.
RPC 동작 원리
- 클라이언트가 일반적인 방식으로 파라미터를 넘겨 client stub procedure를 호출한다.
client stub
은 클라이언트를 소유한 주소의 공간 내에 거주한다.
client stub
이 파라미터들을 메세지로 모은다. 여기서 모은다는 것에 파라미터의 표현을 표준 포맷으로 변경하고 각 파라미터를 복사해서 메세지로 넣는 것도 포함된다.
client stub
은 원격 서버 머신으로 메세지를 보내는 계층인 transport layer
로 메세지를 보낸다.
- 서버에서,
transport layer
는 메세지를 server stub
으로 보낸다. server stub
은 또 파라미터들을 모아주고 일반적인 프로시저 호출 메커니즘을 사용하여 요구된 서버 루틴을 호출한다.
- 서버 프로시저가 완료될 때, 서버 프로시저는
server stub
으로 반환된다. (이를테면 일반적인 프로시저 호출 반환값을 통해), server stub
은 결과 값들을 모아서 메세지에 넣고, transport layer
에 메세지를 보낸다.
transport layer
는 결과 메세지를 다시 client transport layer
로 보내고 client transport layer
는 그 결과를 또 client stub
에게 전달한다.
client stub
은 반환 파라미터들과 실행 결과값을 다시 해제한다.