본문 바로가기

업무상식

gRPC

GRPC

Introduction

gRPC는 인터페이스 정의 언어(Interface Definition Language: IDL) 및 기본 메시지 교환 형식으로 프로토콜 버퍼(protocol buffer)를 사용한다.

Overview

gRPC에서는, 다른 장치에 있는 Server Application을, 마치 같은 환경에 있는 object처럼 Client가 직접적으로 호출할 수 있도록 해준다.
이는 분산 환경 App나 Service를 좀더 쉽게 생성할 수 있도록 도와준다.

많은 RPC 시스템처럼, gRPC는 parameters와 return type을 사용하여 원격으로 호출할 수 있는 메서드를 지정하여 서비스를 정의한다는 아이디어를 기반으로 한다.

서버 측에서, 인터페이스를 구현하고 gRPC 서버를 실행하여 클라이언트 호출을 처리하고, 클라이언트에는 서버와 동일한 방법을 제공하는 stub(일부 언어에서는 클라이언트라고 함)이 있습니다.


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

gRPC 클라이언트와 서버는 다양한 환경에서 실행되고 서로 통신할 수 있으며 gRPC에서 지원하는 모든 언어로 작성할 수 있다.

프로토콜 버퍼(Protocol Buffer) 작업

grpc는 데이터 직렬화를 위한 구글의 오픈소스 기술인 Protocol Buffer를 기본적으로 사용하고 있다.
(JSON과 같은 다른 데이터 형식과도 함께 사용 가능)

Protocol Buffer 맛보기

Protocol buffer를 작업하기 위한 첫 번째 단계는 proto file에 직렬화(serialize) 하려는 데이터의 구조를 정의하는 것이다.

proto file은 .proto 확장자가 있는 일반 텍스트 파일

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

message : protocol buffer 구조를 표현

데이터 구조를 정의 했다면, protoc 컴파일러를 사용하여 원하는 언어로 접근할 수 있는 클래스를 생성한다. 이 작업을 통해 name()이나 set_name()과 같은 accessors(접근자)를 뿐만 아니라, 원시 바이트에서 전체 구조를 serialize/parse 할 수 있는 메서드가 생성된다.

Protocol buffer로 지정된 RPC 메서드 parameter 및 return types을 사용하여 일반 proto 파일에서 gRPC 서비스를 정의한다.


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

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}