Skip to main content

gRPC

gRPC(Google Remote Procedure Call)란, Google에서 개발한 고성능 RPC 프레임워크이다. gRPC에서 데이터를 교환할 때 protobuf를 사용한다.


gRPC 동작 방식

grpc

gRPC는 다음과 같이 동작한다. gRPC 클라이언트가 gRPC 서버에 요청을 보내고, 응답을 받는 시나리오를 작성한 예시이다.

  1. .proto 파일로부터 자동으로 생성된 gRPC 코드를 빌드하게 되면, encoding(혹은 marshalling, packing) 되어 **Client Stub**이 생성된다.
  2. 생성된 **Client Stub**를 gRPC Runtime에 Transport Layer(전송계층)로 전달한다.
  3. Stream의 형태로 HTTP/2 프토로콜로 서버의 Transport Layer로 전달된다.
  4. 서버의 gRPC Runtime에 Transport Layer로부터 패킷을 전달 받고, 이를 decoding(혹은 unmarshalling, unpacking)한다.
  5. Decoding된 데이터는 서버의 로컬에서 호출된다.
  6. 위 1~5와 마찬가지로, 응답 메시지를 **Stub**형태로 encoding 하고, 이를 gRPC 클라이언트에 HTTP/2 프로토콜로 전달한다.

gRPC의 장점

gRPCHTTP 2.0을 사용하며, HTTP/2 Streams로 TCP 프로토콜 위에서 통신하기 때문에, 하나의 connection에서 여러 개의 stream을 요청할 수 있다. 또한, protobuf를 통한 type-safe한 개발이 가능하다.

이때 HTTP/2의 경우, 단순히 메시지를 binary 형태로 전달하는 Binary Protocol이지만, 어떻게 메시지를 구조화하고 직렬화 하는지에 대한 매커니즘(protobuf)을 사용하는 것이 gRPC이다. HTTP/2의 경우, 일반적인 웹 애플리케이션을 위한 프로토콜로 사용되며, gRPC의 경우 분산 시스템이나 마이크로서비스 아키텍처에 사용된다.

또한, gRPC에서 공식 라이브러리로 다양한 언어를 지원한다. 현재 지원하는 언어(또는 런타임 환경)는 다음과 같다.

  • C# / .NET
  • C++
  • Dart
  • Go
  • Java
  • Kotlin
  • Node.js
  • Objective-C
  • PHP
  • Python
  • Ruby
Related Links