마이크로서비스 간 내부 통신을 gRPC로 전환한 지 1년이 됐다. 솔직한 평가를 남긴다.

좋았던 것

스키마가 곧 문서다. proto 파일이 단일 진실 공급원이 되면서 “이 필드 타입이 뭐죠?” 같은 질문이 사라졌다.

service OrderService {
  rpc GetOrder (GetOrderRequest) returns (Order);
  rpc WatchOrders (WatchRequest) returns (stream OrderEvent);
}

서버 스트리밍이 생각보다 유용했다. 주문 상태 변경을 폴링하던 코드가 스트림 구독 한 줄로 바뀌었다.

아쉬웠던 것

  • grpcurl 없이는 눈으로 요청을 확인할 방법이 없어 디버깅 진입장벽이 있다
  • 로드밸런싱이 L4에서 안 되고 클라이언트 사이드 LB가 필요했다
  • proto 레포의 버전 관리 규칙을 정하는 데 팀 간 협의가 오래 걸렸다

결론

트래픽이 많고 서비스 간 계약이 자주 바뀌는 조직이라면 도입할 가치가 있다. 서비스가 서너 개뿐이라면 REST + OpenAPI로 충분하다.