# 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