Pinpoint에서 gRPC를 사용해서 통신을 하는 방법이 있기도 하고, 현재 gRPC에 대한 제대로 된 이해조차 없이 무지성 사용중이기에 이를 조금 이해하고자 한다.
gRPC와 비교할만한 군이 REST라고 생각하는데, gRPC에 대해 중점적으로 알아봤다.
gRPC? RPC?
gRPC는 구글이 최초로 개발한 오픈소스 RPC 시스템이다.
(참조: https://ko.wikipedia.org/wiki/GRPC)
원격 프로시저 호출(RPC) 모델을 기반으로 한다는데… 사실 이게 무슨 말인지 하나도 이해가 안간다.
먼저 RPC에 대해서 알아보니 A라는 클라이언트가 있고 B라는 서버가 있으면 A는 B에게 RPC를 통해 요청을 보내고, B는 요청받은 작업을 수행한 뒤 결과를 다시 A에게 반환한다.
이 과정에서 A는 자신이 원격 서버에 요청을 보냈다는 사실이 아닌 로컬 함수를 호출하듯이 동작하는 것이 RPC라고 보면 된다.
이렇게 보면 RPC에 대해서는 조금 이해가 간다.
하지만 gRPC는 또 무엇일까.. gRPC는 몇 가지 최적화와 함께 기존 RPC를 구현하는 시스템이다.
따라서 큰 틀로 보면 RPC안에 gRPC가 있다고 볼 수 있다.
gRPC? REST?
위 2가지는 API 개발에 대한 2가지의 접근 방식이다.
REST는 알다시피 웹 기반 아키텍처로 많이 사용되며, 외부 사용자들도 쉽게 이해할 수 있을 정도의 범용성을 가졌다.
반면에 gRPC는 많은 양의 데이터들을 주고 받는다거나, 고성능 시스템 및 실시간 데이터 통신에 의존성을 가진 서비스에 사용된다.
어떻게 보면 큰 차이점이 있는데 gRPC는 웹 브라우저에서 사용불가하며 REST보다는 복잡하다.
뒷단의 Backend들 또는 거기로 가는 길은 gRPC로 구성하는 것이 오히려 성능적인 측면에서 좋다고 생각하지만
기존 REST형식의 서비스들을 gRPC로 바꾸는 것에는 큰 노력이 필요하다고 생각한다.
사실 이렇게 설명을 해봐야 겪어보지 못하고는 체감을 못한다.
HTTP와 gRPC가 코드쪽에서 어떻게 다른지, 인프라쪽에서는 어떻게 다른지….
직접 써봐야 알겠지만은 간단한 Backend 하나 만들어 볼 때 gRPC를 활용해봐야겠다.