gRPC의 rpc 종류

gRPC의 rpc 종류


rest api는 Request/Response을 가집니다. 이와는 다르게 gRPC는 다양한 요청/응답 모델을 제공하고 있습니다. 이런 다양한 통신 모델을 가질 수 있는 이유는 gRPC는 http/2를 기반으로 사용하고 있으며 이에 따라 하나의 커넥션으로 여러개의 데이터를 보낼 수 있는 스트림을 지원하기 때문입니다.

  • Unary RPC
    하나의 request에 하나의 response를 가지는 모델
  • Server Streaming RPC
    하나의 request에 여러개의 response를 가지는 모델
  • Cleint Streaming RPC
    여러개의 request에 하나의 response를 가지는 모델
  • Bidirection Streaming RPC
    여러개의 request에 여러개의 request를 가지는 모델

https://docs.microsoft.com/ko-kr/aspnet/core/grpc/services?view=aspnetcore-6.0

syntax = "proto3";

service ExampleService {
  // Unary
  rpc UnaryCall (ExampleRequest) returns (ExampleResponse);

  // Server streaming
  rpc StreamingFromServer (ExampleRequest) returns (stream ExampleResponse);

  // Client streaming
  rpc StreamingFromClient (stream ExampleRequest) returns (ExampleResponse);

  // Bi-directional streaming
  rpc StreamingBothWays (stream ExampleRequest) returns (stream ExampleResponse);
}

서비스에서 메시지를 보내고 받는 방법은 정의된 메서드 형식에 따라 다릅니다.

스트리밍 호출은 stream 파일에서 stream 키워드를 사용하여 지정됩니다.

stream은 호출의 요청 메시지나 응답 메시지 또는 두 메시지 모두 배치할 수 있습니다.

  • 클라이언트 스트리밍 메서드
    • 메시지를 수신하지 않고도 시작됩니다.
    • requestStream 매개변수는 클라이언트에서 메시지를 읽는 데 사용됩니다. 응답 메시지가 반환되면 클라이언트 스트리밍 호출이 완료됩니다.
    • 클라이언트가 일련의 메시지를 작성하고 제공된 스트림을 사용하여 다시 서버로 보내는 클라이언트 스트리밍 RPC.
    • 클라이언트가 메시지 쓰기를 마치면 서버가 메시지를 읽고 응답을 반환 할 때까지 대기.

Unary RPC
클라이언트에서 서버로 단일 요청, 서버는 단일 응답 하는 형태

rpc xxx(yyyRequest) returns (zzzResponse);

Server Streaming RPC
클라이언트에서 서버로 단일 요청, 서버는 연속적인 스트림 응답 하는 형태
클라이언트는 완료처리가 될때까지 스트림 데이터를 수신함.

rpc xxx(yyyRequest) returns (stream zzzResponse);

Client Streaming RPC
클라이언트에서 서버로 연속적인 스트림 요청, 서버는 단일 응답하는 형태
서버는 완료처리 될때까지 스트림 데이터를 수신함.
수신 도중 스트림을 취소하여 클라이언트의 메시지를 조기에 중단 할 수 있음.

rpc xxx(stream yyyRequest) returns (zzzResponse);

Bidirectional Streaming RPC
클라이언트, 서버 모두 독립적으로 동작하는 스트림을 이용하여 서로가 서로에게 완료처리가 될때까지 연속적인 스트림을 전달.

rpc xxx(stream yyyRequest) returns (stream zzzResponse);

좋은 웹페이지 즐겨찾기