# 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
적은 코드로 쉽게 개발을 시작한 후,
대규모 요청을 처리하게 확장가능
---
### Works across languages and platforms
자동으로 생성되는 클라이언트, 서버 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 를 사용
- 다른 대안도 사용가능
---
```proto
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
```proto
rpc SayHello(HelloRequest) returns (HelloResponse);
```
---
### Server streaming RPC
- 클라이언트가 요청하면 서버는 스트림을 반환하는 RPC
- gRPC 가 응답의 순서를 보장
```proto
rep LotsOfReplies(HelloRequest) returns (stream HelloResponse);
```
---
### Client streaming RPC
- 클라이언트가 스트림으로 요청하는 RPC
- gRPC 가 요청 스트림의 순서를 보장
```proto
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
```
---
### Bidirectional streaming RPC
- 양 방향에서 스트림을 사용하는 RPC
- 두 스트림은 독립적으로 동작하므로 원하는 순서대로 읽고 쓸 수 있음
- 각 스트림의 순서는 보장됨
```proto
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);
```
---
## Using the API
---
## References
- https://grpc.io/
- https://github.com/hueypark/grpc-tutorial