gRPC 소개

gRPC 소개 (Introduction to gRPC)

다른 머신에 있는 서버의 메서드를, 마치 로컬 객체를 호출하듯 부르고 싶다면 RPC가 그 해법이에요. gRPC는 그런 원격 호출 프레임워크인데, 구글이 만들었고 Protocol Buffers를 인터페이스 정의 언어(IDL)이자 메시지 교환 형식으로 써요.

출처: https://grpc.io/docs/what-is-grpc/introduction/

작동 방식은 이래요. 먼저 .proto 파일에 서비스와 메시지 구조를 정의해요.

message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}

// The greeter service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

이런 정의를 protoc 컴파일러로 각 언어의 코드로 생성해요. 일반 프로토콜 버퍼 코드(필드 접근자·직렬화/파싱)와, gRPC 플러그인이 만들어 주는 클라이언트·서버 코드가 함께 나와요. 서버는 이 인터페이스를 구현하고 gRPC 서버를 띄우고, 클라이언트는 스텁(stub, 언어에 따라 client)이라는 로컬 객체로 같은 메서드를 호출해요.

gRPC 클라이언트와 서버는 아주 다양한 환경에서 서로 통신할 수 있고, 언어도 다를 수 있어요. 예를 들어 자바로 서버를 만들고 Go·Python·Ruby 클라이언트로 붙일 수 있어요. 대부분의 예제는 문법이 간결해진 프로토콜 버퍼 3(proto3)을 사용해요. proto3은 더 많은 언어를 지원하고 proto2 클라이언트/서버 사이 호환성 문제도 덜 일으켜서, gRPC에는 proto3 사용을 권장해요.

더 알아보기