gRPC 101
간단하고 빠르게 게임서버 만들기
gRPC
A high performance,
open source
universal
RPC framework
RPC(Remote procedure call)
원격 프로시저 호출
왜 gRPC 인가?
- Simple service definition
- Start quickly and scale
- Works across languages and platforms
- Bi-directional streaming and integrated auth
Simple service definition
강력한 바이너리 직렬화 툴셋인,
Protocol Buffers 를 활용해 서비스를 정의함
Start quickly and scale
적은 코드로 쉽게 개발을 시작한 후,
대규모 요청을 처리하게 확장가능
자동으로 생성되는 클라이언트, 서버 stubs 를 사용해
다양한 언어와 플랫폼을 지원함
- C#, C++, Dart, Go, Java, Kotlin, Node, Objective-C, PHP, Python, Ruby
Bi-directional streaming
and integrated auth
HTTP/2 기반의 양방향 스트리밍
완전히 통합된 인증
왜 gRPC 인가?(개인적 생각)
충분히 많이 검증됨(성능과 안정성 둘 다)
Core concepts, architecture
and lifecycle
서비스 정의
- 함수와 비슷하게 서비스 정의
- 기본은 Protocol Buffers 를 사용
- 다른 대안도 사용가능
service HelloService {
rpc SayHello (HelloRequest) returns (HelloResponse);
}
message HelloRequest {
string greeting = 1;
}
message HelloResponse {
string reply = 1;
}
정의가능 함수
- Unary RPC
- Server streaming RPC
- Client streaming RPC
- Bidirectional streaming RPC
Unary RPC
일반 함수처럼 하나의 요청에 하나의 응답을 반환하는 RPC
rpc SayHello(HelloRequest) returns (HelloResponse);
Server streaming RPC
- 클라이언트가 요청하면 서버는 스트림을 반환하는 RPC
- gRPC 가 응답의 순서를 보장
rep LotsOfReplies(HelloRequest) returns (stream HelloResponse);
Client streaming RPC
- 클라이언트가 스트림으로 요청하는 RPC
- gRPC 가 요청 스트림의 순서를 보장
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
Bidirectional streaming RPC
- 양 방향에서 스트림을 사용하는 RPC
- 두 스트림은 독립적으로 동작하므로 원하는 순서대로 읽고 쓸 수 있음
- 각 스트림의 순서는 보장됨
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);