gRPC 공식문서 (1) - Introduction

JinWooHyun·2021년 1월 21일
0

gRPC 공식 문서

Introduction to gRPC

An introduction to gRPC and protocol buffers.

이 페이지에서는 gRPC 및 Protocol Buffer를 소개합니다.

gRPC는 Protocol Buffer를 IDL (인터페이스 정의 언어) 및 기본 메시지 교환 형식으로 사용할 수 있습니다.

gRPC 및 / 또는 Protocol Buffer를 처음 사용하는 경우이 글을 읽어보세요!

먼저 gRPC가 작동하는 것을보고 싶다면 언어를 선택하고 빠른 시작을 시도해보세요.

Overview

gRPC에서 client application은 마치 로컬 객체 인 것처럼 다른 머신에있는 서버 애플리케이션의 메서드를 직접 호출 할 수 있으므로 분산 애플리케이션 및 서비스를 더 쉽게 만들 수 있습니다.

많은 RPC 시스템에서와 같이 gRPC는 서비스 정의 개념을 기반으로하며 매개 변수 및 반환 유형을 사용하여 원격으로 호출 할 수있는 메서드를 지정합니다.

RPC(Remote Procedure call)이란, 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 리모트의 함수나 프로시저를 실행 할 수 있게 해주는 프로세스간 통신입니다. 즉, RPC를 통해 개발자는 위치에 상관없이 원하는 함수를 사용할 수 있습니다.

서버 측에서 서버는 인터페이스를 구현하고 gRPC 서버를 실행하여 클라이언트 호출을 처리합니다.

클라이언트 측에서 클라이언트에는 서버와 동일한 메소드를 제공하는 stub (일부 언어에서는 클라이언트라고 함)이 있습니다.

gRPC 클라이언트와 서버는 Google 내부 서버에서 사용자 데스크톱에 이르기까지 다양한 환경에서 실행되고 서로 통신 할 수 있으며 gRPC가 지원하는 모든 언어로 작성할 수 있습니다.

예를 들어 Go, Python 또는 Ruby의 클라이언트를 사용하여 자바로 gRPC 서버를 쉽게 만들 수 있습니다.

또한 최신 Google API에는 인터페이스의 gRPC 버전이 있으므로 애플리케이션에 Google 기능을 쉽게 구축 할 수 있습니다.

Working with Protocol Buffers

기본적으로 gRPC는 구조화 된 데이터를 serialize 하기위해 Google의 오픈 소스 메커니즘인 Protocol Buffer를 사용합니다 (JSON과 같은 다른 데이터 형식과 함께 사용할 수 있음).

작동 방식에 대한 간략한 소개입니다. 이미 Protocol Buffer에 익숙하다면 다음 섹션으로 건너 뛰어도됩니다.

Protocol Buffer로 작업 할 때 첫 번째 단계는 proto 파일에서 serialize하려는 데이터의 구조를 정의하는 것입니다. 이것은 확장자가 .proto 인 일반 텍스트 파일입니다.

Protocol Buffer 데이터는 메시지로 구조화되며 각 메시지는 필드라고하는 일련의 key-value 쌍을 포함하는 정보의 작은 논리적 레코드입니다. 다음은 간단한 예입니다.

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

그런 다음 데이터 구조를 지정하면 Protocol Buffer Compiler protoc을 사용하여 proto 정의에서 선호하는 언어로 데이터 액세스 클래스를 생성합니다.

이는 name()set_name()과 같은 각 필드에 대한 간단한 접근 자뿐만 아니라 전체 구조를 raw bytes로 상호 serialize/parse 하는 메서드를 제공합니다.

예를 들어 선택한 언어가 C ++ 인 경우 위 예제에서 Complier를 실행하면 Person이라는 클래스가 생성됩니다.

그런 다음 애플리케이션에서 이 클래스를 사용하여 Person Protocol Buffer 메시지를 채우고, serialize하고, 검색 할 수 있습니다.

Protocol Buffer 메시지로 지정된 RPC 메서드 매개 변수 및 반환 유형을 사용하여 일반 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;
}

gRPC는 특별한 gRPC 플러그인과 함께 protoc을 사용하여 proto 파일에서 코드를 생성합니다.

생성 된 gRPC 클라이언트 및 서버 코드는 물론 메시지 유형을 채우고, serialize하고, 검색하기 위한 일반 Protocol Buffer 코드도 제공됩니다.

아래에 이에 대한 예가 표시됩니다.

선택한 언어로 gRPC 플러그인을 사용하여 protoc을 설치하는 방법을 포함하여 Protocol Buffer에 대한 자세한 내용은 Protocol Buffer 문서를 참조하세요.

Protocol buffer versions

한동안 오픈 소스 사용자가 Protocol Buffer를 사용할 수 있었지만 이 사이트의 대부분의 예제는 약간 단순화 된 구문, 몇 가지 유용한 새 기능 및 더 많은 언어를 지원하는 Protocol Buffer version 3 (proto3)을 사용합니다.

Proto3는 현재 Protocol Buffer GitHub 저장소의 Java, C ++, Dart, Python, Objective-C, C #, 라이트 런타임 (Android Java), Ruby, JavaScript 및 golang/protobuf GitHub repo의 Go 언어 생성기에서 사용할 수 있습니다.

proto3 언어 가이드 및 각 언어에 사용할 수있는 참조 문서에서 자세한 내용을 확인할 수 있습니다.

참조 문서에는 .proto 파일 형식에 대한 공식 사양도 포함되어 있습니다.

일반적으로 proto2 (현재 기본 프로토콜 버퍼 버전)를 사용할 수 있지만 gRPC와 함께 proto3를 사용하는 것이 좋습니다.

gRPC 지원 언어의 전체 범위를 사용할 수있을뿐만 아니라 proto2 클라이언트와의 호환성 문제를 방지 할 수 있기 때문입니다.

proto3 서버 및 그 반대의 경우도 마찬가지입니다.

profile
Unicorn Developer

0개의 댓글