[CS] gRPC(google Remote Procedure Call)

개발者·2022년 5월 13일
0

CS

목록 보기
6/6

RPC(Remote Procedure Call) 란 ?

  • RPC란?

    별도의 원격 제어를 위한 코딩 없이 다른 주소공간에서 함수나 프로시저를 실행할 수 있게 해주는 프로세스간 통신 기술이다. 다시 말해, 원격 프로시저 호출을 이용하면 프로그래머는 함수가 실행 프로그램에 로컬 위치에 있든 원격 위치에 있든 동일한 코드를 이용할 수 있다.

gRPC(google Remote Procedure Call) 란?

gRPC에서 클라이언트 애플리케이션은 다른 시스템의 서버 애플리케이션에 있는 메서드를 로컬 개체인 것처럼 직접 호출할 수 있으므로 분산 애플리케이션과 서비스를 쉽게 만들 수 있다.

많은 RPC 시스템에서와 마찬가지로 gRPC는 서비스를 정의하고, 매개 변수와 반환 유형을 사용하여 원격으로 호출할 수 있는 메서드를 지정하는 아이디어를 기반으로 한다.

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

클라이언트는 서버와 동일한 방법을 제공하는 스텁(일부 언어에서는 그냥 클라이언트라고 함)을 가진다.

ProtoBuf(Protocol Buffer) 란 ?

  • google에서 개발한 구조화된 데이터를 Serialization 하는 기법이다.
  • 데이터 유형, 데이터 타입 등을 1byte로 식별하고, 주어진 length 만큼만 읽어서 용량이 작다.

Proto File

Proto File 은 message로 정의한다.

1. Message

syntax = "proto3";

message Person {
	string name = 1;
	int32 id = 2;
	bool has_ponycopter = 3;
}
  • message 이름은 CamelCase, field 이름은 snake 형태로 사용하는것을 권장.
  • field 이름을 숫자로 시작할 수 없다. ( 1_name → name_1)
  • field 는 고유한 번호를 가지게 되는데, 1 ~ 536,870,911 까지 사용 가능하다(19000 ~ 19999는 reversed된 값으로 사용불가)
  • required, optional, repeated 옵션을 사용할 수 있다.
    • required - 반드시 하나의 필드를 가져야한다.
    • optional - 없거나 하나만 가져야 하는 필드.
    • repeated - 반복적으로 여러번 사용될 수 있다. 순서는 보존된다.

2. Package

pakage는 message 타입 이름을 중첩없이 구분할 때 사용한다. 명확하게 구분할 수 있게 명시해준다.

package zzz.bbb;
message Abc {
	// ...
}

message Def {
	zzz.bbb.Abc abc = 1;
}

3. Service

  • RPC를 통해 Server가 Client에게 제공할 함수의 형태를 정의한다.
  • CamelCase를 권장한다.
  • 기본적으로 단일 요청/응답으로 동작하지만, stream 옵션을 주면 RPC를 구현할 수 있다.
service HelloWorld {
	rpc Hello (HelloRequest) returns (HelloResponse);
}
service HelloWorld {
	rpc Hello (stream HelloRequest) returns (stream HelloResponse);
}

Reference

profile
solrasido

0개의 댓글