이런 이슈 in 개발

[gRPC] 패킷의 마지막 String이 잘리는 이슈

바람 멘토 2023. 3. 21. 18:30
반응형

정의한 proto로 java에서 python을 host로 하여 통신을 하는 중에 간헐적(주당 수차례)으로 발생한 이슈다.

message A {
  string message = 1;
  int32 number = 2;
  repeated int32 index = 3;
  string lang = 4;
  string options = 5;
}

options 값이 없이 들어오는 경우가 간헐적으로 발생하였다.

이유는 정확히 파악이 안되었는데,

오~래 전에 C++로 서버 제작했을 때 마주한 버그 중에 고정 길이 패킷이 아닌 경우 유사한 현상을 경험했었다.

특히 마지막에 문자열 데이터를 가지고 있는 패킷들에서 송신 또는 수신 시 문자열 처리 중 오류로 마지막 문자열들이 사라지는 현상들이었다.

 

문자열이란 것이 Encoding 방식을 정해서 사용하지 않으면 문제를 발생시키는 요소인지라

혹시나 하는 생각에 다음과 같이 마지막에 고정길이 변수(valid)를 두어서 패킷의 마지막을 명확히 하였다.

message A {
  string message = 1;
  int32 number = 2;
  repeated int32 index = 3;
  string lang = 4;
  string options = 5;
  int32 valid = 6;
}

원인은 정확히 확인 안되었지만, 위의 조치로 1개월 이상 options 필드가 없이 수신되는 경우는 현재까지 발생하지 않고 있다. 

 

grpc

A high performance, open source, general-purpose RPC framework - grpc

github.com

 

반응형