HTTP/2
사용. 그렇기 때문에 기본적으로 외보에서 노출되어야 하며, 로드밸런서가 필요한 경우 로드밸런서가 HTTP/2를 지원해야함service
로 정의 함unary
: request/reponse를 1회 받을 때만 TCP 커넥션을 맺고 처리하는 방식 (HTTP 방식과 유사하지만 gRPC의 unary
가 성능은 훨씬 좋음)stream
: 지속적으로 데이터를 보내고 받는 소켓 통신과 같이 사용 가능gRPC는 ProtoBuf를 service interface와 payload message를 표현
// service interface
service HelloService {
rpc SayHello (HelloRequest) returns (HelloResponse);
}
// payload message
message HelloRequest {
string greeting = 1;
}
message HelloResponse {
string reply = 1;
}
rpc SayHello(HelloRequest) returns (HelloResponse);
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);
gRPC는 service method 종류에 따라 lifecycle이 다름
가장 단순한 RPC의 경우 (단일 request, 단일 response)
이외의 다른 종류의 RPC의 경우에는 여기 참조
gRPC를 이용한 API 구현이 가능함
.proto
파일을 통해 gRPC는 server/client 코드를 제공함message
: 데이터를 주고 받을 포맷repeated
: Array로 string item을 여러개 받겠다는 의미service
: 실제 데이터 통신을 어떻게 주고 받을지 정의. 웹서비스의 API 정의서rpc updateOrders
의 경우 Order 메세지를 지속적으로 보내고 서버는 unary로 응답rpc processOrders
의 경우 input과 output 모두에서 stream을 넣어 양쪽 세션 유지protofile.pb.go
파일 생성# protoc 설치 후 go 언어로 빌드하기 위해 protoc-gen 사용
go install google.golang.org/protobuf/cmd/protoc-gen-gogo
# proto compile
protoc -I . protofile.proto --gogo_out=.
extension
기능을 활용할 것# gogoproto와 googleapis를 import 해서 빌드하는 protoc command
# -I 옵션은 --include_imports 플래그
protoc -I=./github.com/gogo/protobuf -I=./googleapis -I=. --
gofast_out=plugins=grp:output/ test/test.proto