Thrift, gRPC 비교 글에 곧잘 나오는 게 gRPC 는 List, Set 등의 타입 없다는 거여서 그러면 어떻게 처리할까 궁금 했었는데 gRPC 에 포함된 예제 소스 오늘에야 보니 stream 과 repeated 이용하는 두 가지 방식으로 해결할 수 있네요(예제 소스에는 repeated 방식은 포함되어 있지 않습니다). 간단히 정리해보면 ...gRPC 에는 4가지의 기본 Life Cycle 이 있습니다.
- Unary : 우리가 맨 처음 보통 보는 sayHello 같은 경우입니다. req 1 - res 1 인 경우.
- Server streaminig : 단일 요청에 List 성 데이터를 내려보낼 때.
- Client streaming : 2번의 반대.
- Bidirectional streaming : 양 방향 스트림.스트림 방식이 어떻게 동작하는지 보면,
List 타입의 데이터를 다른 RPC 등에서는 chunk 로 한 번에 보내겠지만 gRPC 에서는 stream 에 하나씩 던져 넣고 다 던진 후 상대편의 onCompleted 메서드를 호출합니다. 수신하는 쪽에서는 StreamObserver 가 수신 완료된 걸 감지하고 이후 처리를 해줍니다.
chunk 로 보내는 것에 비해 나눠서 보내주는 방식에는 트레이드 오프가 있을 겁니다. 특히 성능 부분이 그럴텐데 gRPC 는 HTTP/2 를 사용하니 이 약점이 거의 해소됩니다.stream 방식 말고 chunk 로 보내려면 repeated field 를 이용할 수도 있습니다. 이건 구현 예제를 아직 안봐서 뭐라 못하겠지만 그냥 unary 구현과 별 차이 없지 않을까 싶네요.
'Slack 채널 정리' 카테고리의 다른 글
conda-forge (0) | 2019.11.29 |
---|---|
armeria, Thrift 삽질 (0) | 2019.11.29 |
java.xml.bind 에러 (0) | 2019.11.29 |
TGI -> prometheus 전환 (0) | 2019.11.29 |
Conway's Law (0) | 2019.11.29 |