Kotlin gRPC 예제 - (1) gRPC 소개
23 Dec 2019 | Kotlin gRPCgRPC
gRPC는 구글이 공개한 RPC(Remote Procedure Call) 오픈 소스이며, CNCF 차원에서 밀고 있습니다.
여기에서 더 많은 정보를 볼 수 있습니다.
HTTP/2의 특징
HTTP/2 기반으로 되어 있으며 HTTP/1에 비해 다음과 같은 장점을 가집니다.
- HTTP Connection 재사용: 기존 HTTP에서는 매 요청마다 Connection을 새로 가져가지만,gRPC에서는Channel이라는 형태로 기존 Connection을 유지해서 가져갑니다. 덕분에 매번 Connection하는 Cost가 대폭 줄었습니다.
- 멀티플렉싱: gRPC는 하나의 Connection에서 여러 요청을 보낼 수 있습니다. 또한 전송하는 데이터의 우선 순위를 정할 수도 있습니다.
- 메시지 압축: HTTP/2의 헤더 압축 기능을 사용합니다.
- 서버에서 Push 가능: 한 번 Connection이 맺어진 다음부터는 양방향 통신이 되기 때문에 Push기능을 자연스럽게 사용할 수 있습니다.
gRPC와 Protobuf
gRPC는 메시지를 전송하는 IDL(Interface Definition Language)을 Protobuf라는
라이브러리를 사용하고 있습니다.
message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}
Protobuf는 위와 같은 형식으로 되어 있으며, .proto 확장자를 가집니다. protoc라는 컴파일러를 이용해서 메시지를 컴파일 할 수 있으며,
컴파일된 결과물로 서버측과 클라이언트측에서 사용할 수 있는 코드가 생성됩니다.
위 메시지 예제에서 name 이나 id와 같은 필드는 각 언어별로 적절한 Setter/Getter 함수를 자동으로 생성해서 제공해줍니다.
service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
  string name = 1;
}
message HelloReply {
  string message = 1;
}
위 코드를 보면 service와 message가 존재합니다. service는 서버와 클라이언트 양측에서 사용할 함수들의 묶음이라 생각할 수 있으며,
message는 실제로 주고받는 데이터입니다.
