마이크로 서비스를 구성하기 위한 통신 방법 : gRPC

inshining·2022년 12월 10일
0
post-thumbnail

gRPC 이전에 RPC에 대해 알아보자

RPC? (Remote Procedure Call)

프로세스 단에서 함수를 호출하여 코드를 실행하곤 한다. 이를 원격(Remote)하는 기술이 RPC이다. 하나의 머신에서 다른 머신의 코드를 실행하는 기술인데. 사용자 입장에서 마치 단순 함수를 호출하는 것과 같다.

gRPC?

gRPC는 구글에서 만든 RPC 기술의 구현체이다. gRPC는 크게 두 가지 특징이 있다.

  • 프로그래밍 언어에 제약 없이 사용할 수 있는 기술임

  • 빠른 통신 속도

    gRPC는 REST 통신 방법과 같이 클라이언트와 서버로 구성되어 있다. 요청과 응답이라는 액션이라는 점에서 REST와 같지만 http/2를 기반으로 하기 때문에 고성능과 걍량화에 최적화된 네트워크 통신을 자랑한다.

대다수 프로그래밍 언어에 호환 가능한 기술?

gRPC는 현재 인기 많은 프로그래밍 언어를 지원한다. 파이썬, 자바, 스위프트와 같은 언어뿐만 아니라 구글에서 만든 Golang, Dart 로 gRPC를 사용할 수 있다. gRPC에서 지원하는 프로그래밍 언어 중에서 언어 선택의 제약이 없다. 마치 Schema를 정의하듯 proto 라는 이름 확장자를 가진 단순 텍스트 파일을 정의하면 언어의 제약 없이 사용할 수 있다.

proto 확장자의 파일을 하나 정의하면 Protocol Butters에서 각 프로그래밍 언어에서 사용할 수 있는 형태 파일로 변환해준다. 이 과정에서 Client stub, Server Stub 이라는 인터페이스를 생성한다. Client Stub을 사용하면 Server 측에 요청할 수 하여 결과를 반환 받을 수 있다. 반대로 Server Stub은 요청을 받을 수 있는 형태이다.

빠른 통신 속도?

대게 API 통신은 Json 형태로 주고 받는데. gRPC는 json 포맷보다 5배나 빠른 속도라고 한다. 이는 Protocol Bufferf를 사용하기 때문이다. 각 프로그래밍 언어로 된 stub을 호출하면 encoded 한 후에 Protocol Buffer가 바이트 단위로 서버로 전송한다. http/2에서 최적화된 바이트 단위로 보내기 때문에 통신 속도에서 우위를 점할 수 있다. 또한, http/2의 스트림 메세지 기능을 사용해서 순차적으로 바이트 코드를 보내서 통신 속도를 안정적으로 유지할 수 있다.

어떻게 gRPC를 활용할 수 있을까?

마이크서비스를 운용할 때, gRPC를 사용하기 가장 적절하다. 다양한 프로그래밍 언어를 지원하기 때문에 언어 선택에 제약이 없으면, 기존 마이크로 서비스에 이식하기 좋다. 내부 통신망으로 http/2를 사용할 수 있기 때문에, gRPC를 선택하기에 네트워크 제약이 없다.

기존 REST 통신을 대체할 수 있을까?

결론부터 말하자만 당분간 대체하기 어렵다. 기존 브라우저에서 http/2에 최적화되어 있지 않기 때문에 gRPC를 사용하기 어렵기 때문이다. 굳이 써야 한다면, Proxy 서버를 사용하면 가능하다. 브라우저에서 요청을 http/1.1로 통신하고 Proxy 서버가 내부 서비스들과 통신을 gRPC를 사용하는 방법이 있다. 이를 gRPC-Web이라고 한다.

profile
가능한 최선을 다하고 싶다

0개의 댓글