gRPC란 무엇인가

2023. 11. 26. 15:30바삭바삭 IT/안드로이드

gRPC에 대해 알아보기 전에 RPC(Remote Procedure Call)에 대해 알아봅시다.

 

Local Procedure Call과 Remote Procedure Call의 차이는 무엇일까요?

Local Procedure Call vs Remote Procedure Call

Local Procedure Call은 코드를 수행하기 위한 프로세스 내의 함수 호출을 말합니다.

Remote Procedure Call은 A서버에서 B서버의 코드를 수행하는 것을 가능케 하는 방법입니다.

https://www.youtube.com/watch?v=gnchfOojMk4

 

RPC 구현체

대표적인 예로 구글에서 만든 gRPC가 있습니다.

많은 서비스들이 데이터 센터들과 함께 수많은 마이크로 서비스를 연결하기 위해 RPC 메카니즘으로 gRPC를 사용하고 있다고 합니다.

 

gRPC가 핫한 이유

  1. 개발자 에코시스템
    gRPC는 Protocal Buffers를 데이터 교환 포맷으로 사용하므로 서버와 클라이언트가 언어와 플랫폼으로부터 자유롭게 개발할 수 있습니다. (https://grpc.io/docs/languages/) 이런 특징은 다른 RPC 프레임워크에서는 없다고 하네요.

  2. 고성능
    크게 두가지 이유가 있는데요, 첫번째 이유는 위에서 말한 Protocal Buffers 입니다. Protocal Buffers는 매우 효율적인 바이너리 인코딩 포맷으로 JSON보다 훨씬 빠르다고 합니다.
    두번째 이유는 gPRC는 규모의 스케일을 위해 HTTP/2를 기반으로 만들어졌기 때문입니다. gPRC가 사용하는 HTTP/2 스트림은 single long-lived TCP 연결에서 여러개의 메시지들의 스트림을 가능하게 합니다. 이는 클라이언트와 서버사이의 작은 TCP 커넥션들에서도 많은 동시적인 RPC 호출을 다룰 수 있게 합니다.
     

gRPC 는 어떻게 동작하는가

간단하게 gRPC 클라이언트에서 gRPC 서버로 통신하는 플로우를 따라가 봅시다.

gPRC 클라이언트는 주문하기 서비스를 담당하고 있습니다.

gPRC 서버는 결제하기 서비스를 담당하고 있습니다.

https://www.youtube.com/watch?v=gnchfOojMk4

 

  1. 주문하기 클라이언트에서 결제를 위해 결제하기 서버에 gRPC call를 호출할때 빌드타임때 gRPC에 의해 자동 생성된 클라이언트 코드를 호출합니다. (이 코드를 client stub이라고 부릅니다.)
  2. gPRC는 client stub에서 전달하는 data를 Protocal Buffers로 인코딩 해서 로우레벨인 transport layer로 전송합니다. 
  3. gPRC는 네트워크를 통해 데이터를 HTTP/2 데이터 프레임 스트림으로 전송합니다. (네트워크 최적화와 바이너리 인코딩으로 인해 JSON보다 5배 빠르다고 합니다.)
  4. 결제하기 서버가 네트워크로 부터 패킷을 수신합니다.
  5. 이를 디코딩하고
  6. 서버 어플리케이션을 실행합니다.
  7. 서버 어플리케이션으로 부터 반환된 결과는
  8. 다시 Protocal Buffers로 인코딩 되어
  9. 로우레벨인 transport layer로 전송됩니다.
  10. 주문하기 클라이언트에서 패킷을 받고
  11. 이를 디코딩합니다.
  12. 디코딩한 결과를 클라이언트 어플리케이션으로 보냅니다.

왜 아직 gPRC 사용이 적은가

위에서 보다시피 나름(?) 간단한 구현이 가능해 보입니다. 하지만 아직 널리 사용되진 않는 것 같습니다. 왜 그럴까요?

gPRC는 로우레벨 HTTP/2에 의존하고 있습니다. 크롬, 사파리 등 gPPC 클라이언트의 웹 요청을 컨트롤 할 수준의 브라우저가 현재 없습니다. 

브라우저에서 gPRC 호출은 proxy의 도움으로 만들 수 있는데요, (이를 gRPC-Web이라고 부릅니다.) 하지만 아직 완전히 호환되지 않는다고 하네요. 

 

gRPC는 언제 빛을 발할까

에너지와 대역폭에 제한적인 모바일(안드로이드, IOS 등)에서 꽤 효과적일 수 있습니다. 실제로 네이티브 모바일 클라이언트에서 gPRC의 사용률도 증가하고 있습니다.

개인적인 생각으로 JSON 대비 몇 배나 빠르다는 점이 굉장히 장점인 것 같습니다.

다음 페이지에서는 직접 gRPC를 사용한 체험기를 남겨볼 수 있기를 바라며... 이만 마무리 하겠습니다.

 


https://www.youtube.com/watch?v=gnchfOojMk4

 

반응형