RPC는 원격 프로시저 호출이라는 뜻으로, 네트워크 상의 다른 컴퓨터에 있는 프로그램을 로컬 컴퓨터에서 호출하여 사용하는 프로토콜입니다. 즉, 분산 네트워크 환경에서 프로시저나 함수를 마치 로컬에 있는 것처럼 사용할 수 있게 해줍니다. 프로세스간 통신을 위해 사용하는 IPC(Inter Process Communication) 방법의 한 종류이다
참고* 프로세스들은 기본적으로 메모리를 공유하지 않기 때문에 각자 자신의 일만 한다. 하지만 필요에 따라 프로세스간 정보를 교환해야하는데 이때 별도 수단을 이용해 프로세스 통신하는 방법론을 통칭해 IPC라 한다.
예) socket, RPC, REST
RPC는 원격 호출에 사용되는 프로토콜임에도 불구하고 구체적인 네트워크 전송은 다양한 하부 프로토콜 중 하나를 사용하도록 유연하게 설계되어 있다. 따라서 RPC의 전송 프로토콜(transmit protocol)로서 TCP/IP, UDP, HTTP등을 사용할 수 있다
REST | RPC | |
---|---|---|
Protocol | HTTP | 프로토콜에 무관 (TCP, UDP, HTTP, WebSocket, ...) |
Scheme | Resource 기반의 API 인터페이스(예) 강아지 목록을 반환하는 API 를 GET /dogs 로 설계 | Action 기반의 API 인터페이스(예) 강아지 목록을 반환하는 API 를 POST /listDogs 로 설계 |
Design | RESTful API 는 Stateless 를 전제 | 제약이나 규약이 없음 |
예시)
예를 들어, 우리가 웹 서버와 데이터베이스 서버가 각각 다른 컴퓨터에 위치해 있다고 상상한다. 이 때 웹 서버가 데이터베이스 서버에 있는 데이터를 필요로 할 때, 웹 서버는 일반적으로 데이터베이스 서버에 요청을 보내고 그 결과를 받아옵니다.
하지만 RPC를 사용하면, 웹 서버는 마치 자신의 컴퓨터에 있는 로컬 함수를 호출하는 것처럼 간단하게 데이터베이스 서버에 있는 함수를 호출할 수 있다. 웹 서버는 데이터베이스 서버에 있는 함수를 마치 로컬에 있는 것처럼 사용할 수 있게 해주는 것이 RPC입니다.
즉, RPC 는 서버와 클라이언트가 통신하기 위한 API 의 통신 패러타임 중 하나이고, REST API 와 비교될 수 있는 차원의 개념이라고 할 수 있다.
RPC 는 기본적으로 정해진 구조를 갖고있지는 않지만, 기본적인 Terminology 를 몇가지 갖고있다.
RPC 모델은 분산 컴퓨팅 환경에서 많이 사용됐으며, 현재는 MSA에서 마이크로 서비스 간에 많이 사용한다. 서로 다른 환경이지만 서비스간의 프로시저 호출을 가능하게 해줌에 따라 언어에 구애받지 않고 환경에 대한 확장이 가능하며, 좀 더 비즈니스 로직에 집중하여 생산성을 증가시킬 수 있다.