Remote Procedure Call (RPC)
- 분산 시스템에서 원격 서버의 함수를 마치 로컬 함수처럼 호출할 수 있도록 함
- 호출 → serialization → 네트워크 전송 → remote 실행 → 응답 반환
- client는 네트워크 통신의 복잡성을 신경 쓰지 않고 원격 서버의 기능 사용 가능
gRPC
- Google에서 개발한 오픈 소스 RPC Framework이고 다양한 언어 지원
- 기존 HTTP/1.1 기반 REST API 한계를 보완하기 위해 HTTP/2와 Protocol Buffers (Serialization) 기반 설계
- REST 보다 빠르고, 인터페이스 명확하게 정의했고, microservice 간 통신 최적화로 서비스 중심 구조에 맞음
<대충 절차>
- Client Application (Web 서버나 서비스 등?)이 local 함수처럼 remote_funtion(args) 호출
- 실제로는 Client Stub가 Protocol Buffers 등으로 함수를 serialization 하고, 네트워크로 Server Stub으로 보냄
- Server Stub은 de-serialization하고 실제 서버 로직 real_function(args) 호출
- 실행되고 결과 생성됨
- Server Stub은 다시 Serialization하고 client로 응답 보내면 client stub가 받아서 application에 return함
- 개발자는 로컬 처럼 그냥 쓰면 되니까 편함
- 대규모 시스템에서 각 기능을 독립된 서비스로 분리하고 RPC로 연결만 하면 되니까 서비스 중심 설계에 적합
- RPC는 통신 모델이고, gRPC 같은 것들을 framework라고 얘기하고
- protobuf는 IDL (Interface Definition Language) 제공하고 Serialization 같이 직렬화, 인터페이스 정의 도구