본문 바로가기
프로그래밍/gRPC

gRPC의 통신 패턴

by 나도한강뷰 2022. 8. 20.

https://www.youtube.com/watch?v=KGAernd-42M

 

gRPC기반의 통신 패턴은 4가지가 있다.

1. 단일 RPC

client는 단일 request를 서버로 보내고, 서버는 그에대한 세부정보를 response로 보내는 단순한 형태

package ecommerce;

service OrderManagement {
    rpc addOrder(Order) returns (google.protobuf.StringValue);
}

message Order {
    string id = 1;
    repeated string items = 2;
    string description = 3;
    float price = 4;
    string destination = 5;
}

 

와 같은식으로 기존과 동일하게 작성해주면 된다.

이때 서버는 order message와 nil에러를 반환하게 되는데, nil error는 rpc가 종료되었다는 것을 알리는 방법이 된다.

 

2. 서버 스트리밍

client가 단일 요청을 보내게되면, gRPC server는 생성된 response를 지속적으로 보내게 되고, response를 모두 전송하고 나면 후행 메타데이터로 클라이언트에 전송해 스트리밍의 끝을 알린다.

package ecommerce;

service OrderManagement {
	rpc searchOrders(google.protobuf.StringValue) returns (stream Order);
}

message Order {
    string id = 1;
    repeated string items = 2;
    string description = 3;
    float price = 4;
    string destination = 5;
}

returns의 값을 stream으로 정의 내려준다.

이때 서버는 stream.send 메서드를 사용해서 스트림에 지속적으로 기록할 수 있으며, 단일 스트리밍과 마찬가지로 nil err로 스트림의 끝을 표시한다.

client는 recv 메서드를 사용해서 스트리밍의 끝까지 메세지를 지속적으로 받아온다.

 

3. 클라이언트 스트리밍

client는 여러 request를 서버에 보내고, 서버는 단일 response를 client로 전송한다. 이때 모든 request를 수신하고 response를 보내는게 아닌, 상황에 따라서 유도리있게 response를 보내면 된다.

package ecommerce;

service OrderManagement {
    rpc updateOrders(stream Order) returns (google.protobuf.StringValue);
}

message Order {
    string id = 1;
    repeated string items = 2;
    string description = 3;
    float price = 4;
    string destination = 5;
}

client쪽에 stream을 붙여서 proto를 정의해주면 된다.

 

4. 양방향 스트리밍

client는 메세지 스트림으로 server에 요청을 보내고, server또한 메세지 스트림으로 응답을 해준다. 

package ecommerce;

service OrderManagement {
    rpc processOrders(stream google.protobuf.StringValue) returns (stream CombinedShipment);
}

message CombinedShipment {
    string id = 1;
    string status = 2;
    repeated Order ordersList = 3;
}

 

이러한 gRPC는 msa에서 아래 그림과 같이 활용된다.

 

그림참조 : https://junhee-ko.github.io/2020/12/26/grpc-patterns/

코드참조: https://github.com/grpc-up-and-running/samples

 

[gRPC 시작에서 운영까지] 3장_gRPC 통신 패턴

gRPC 기반 애플리케이션에서 사용되는 네 가지 통신 패턴을 정리한다. Unary RPC Server Streaming RPC Client Streaming RPC Bidirectional Streaming RPC Unary RPC 위 방식이 Unary RPC 패턴을 따른 것이다.클라이언트는 orde

junhee-ko.github.io

 

'프로그래밍 > gRPC' 카테고리의 다른 글

gRPC 동작 원리  (0) 2022.08.22
gRPC 소개  (0) 2022.08.14