RPC란?
별도의 원격 제어를 위한 코딩 없이 다른 주소공간에서 함수나 프로시저를 실행할 수 있게 해주는 프로세스간 통신 기술이다. 다시 말해, 원격 프로시저 호출을 이용하면 프로그래머는 함수가 실행 프로그램에 로컬 위치에 있든 원격 위치에 있든 동일한 코드를 이용할 수 있다.
gRPC에서 클라이언트 애플리케이션은 다른 시스템의 서버 애플리케이션에 있는 메서드를 로컬 개체인 것처럼 직접 호출할 수 있으므로 분산 애플리케이션과 서비스를 쉽게 만들 수 있다.
많은 RPC 시스템에서와 마찬가지로 gRPC는 서비스를 정의하고, 매개 변수와 반환 유형을 사용하여 원격으로 호출할 수 있는 메서드를 지정하는 아이디어를 기반으로 한다.
서버는 이 인터페이스를 구현하고 gRPC 서버를 실행하여 클라이언트 호출을 처리한다.
클라이언트는 서버와 동일한 방법을 제공하는 스텁(일부 언어에서는 그냥 클라이언트라고 함)을 가진다.
Proto File 은 message로 정의한다.
syntax = "proto3";
message Person {
string name = 1;
int32 id = 2;
bool has_ponycopter = 3;
}
required
, optional
, repeated
옵션을 사용할 수 있다.required
- 반드시 하나의 필드를 가져야한다.optional
- 없거나 하나만 가져야 하는 필드.repeated
- 반복적으로 여러번 사용될 수 있다. 순서는 보존된다.pakage는 message 타입 이름을 중첩없이 구분할 때 사용한다. 명확하게 구분할 수 있게 명시해준다.
package zzz.bbb;
message Abc {
// ...
}
message Def {
zzz.bbb.Abc abc = 1;
}
stream
옵션을 주면 RPC를 구현할 수 있다.service HelloWorld {
rpc Hello (HelloRequest) returns (HelloResponse);
}
service HelloWorld {
rpc Hello (stream HelloRequest) returns (stream HelloResponse);
}