본문 바로가기
Programming/Communication

gRPC-web 사용하기

by 드로니뚜벅이 2022. 12. 8.

"원격 프로시저 호출(Remote Procedure Call, RPC)"로 알려진 분산 클라이언트-서버 통신 방식은 적어도 80년대초부터 사용되었습니다. 그러나 gRPC로 알려진 구글의 구현은 시스템 간 웹 통신을 가능하게 하는 성능 중심 프레임워크로 2015년에 개발되어 공개되었습니다. 내부적으로 최신 HTTP/2 프로토콜을 활용하도록 설계된 gRPC는 클라이언트와 서버 간의 양방향 통신을 지원할 뿐만 아니라 요청 혹은 응답당 여러 메시지를 전송할 수 있는 스트리밍 기능도 지원합니다. 따라서 고성능, 높은 처리량의 응용프로그램을 구축하는 데 매우 효율적입니다.

gRPC-web 브라우저 적용 삽질기

Javascript 기반으로 브라우저에서 gRPC를 사용하려고 하였지만, 적용하지 못한 내용에 대한 기록입니다.

gRPC에 대해서 간략히 설명하고 gRPC 라이브러리를 이용하여 node.js 기반의 Application을 만드는 과정, 그리고 브라우저와 back-end 사이에 grpc-web을 사용하여 직접 통신할 수 없는 이유를 작성하였습니다.

 

gRPC

gRPC는 Google이 개발한 고성능 오픈소스 범용 RPC 프레임워크입니다. gRPC에서 클라이언트 애플리케이션은 다른 머신의 서버 애플리케이션에 있는 메소드를 로컬 객체처럼 직접 호출할 수 있으므로 분산 애플리케이션 및 서비스를 더 쉽게 만들 수 있습니다.

RPC는 네트워크 상 원격에 있는 서버의 서비스를 호출하는데 사용되는 프로토콜로 IDL(Interface Definition Language)로 인터페이스를 정의한 후 이에 해당하는 Skeleton 과 Stub 코드를 통해 프로그래밍 언어에서 호출해서 사용하는 방식입니다. 최근에는 HTTP를 활용한 RESTful이 많이 활용되어서 RPC는 거의 사용이 되지 않으나 요청/응답을 위한 규약이 명시적이지 않다는 단점으로 인해 다시 RPC의 방식을 채용한 프레임워크들이 나오기 시작했습니다.

gRPC는 자바, C/C++ 뿐만 아니라 Node.js, Python, Ruby, PHP, Go, Android 기반, Objective-C 등 다양한 언어들을 지원함으로 서버간 뿐만이 아니라 클라이언트 어플리케이션이나 모바일 앱에서도 사용이 가능합니다.

 

gPRC 구조

gRPC는 기존 RPC와 마찬가지로 IDL(Interface Definition Language)을 기반으로 원격으로 프로시저를 호출할 수 있는 방법을 제공합니다. 기본적으로 gRPC는 서비스 인터페이스와 페이로드 메시지의 구조를 표현하기 위해 Protocol Buffers를 IDL로 사용합니다.
JSON등 다른 직렬화 방식을 사용할 수도 있습니다.

Protocol Buffers는 구조화된 데이터를 직렬화하여 압축하기 때문에 JSON, XML에 비해 전송 속도가 빠릅니다.

(직렬화: 객체의 내용을 바이트 단위로 변환하여 파일 혹은 네트워크를 통해 스트림(송수신)이 가능하도록 함)

 

 

 

참고사이트

 

 

 

'Programming > Communication' 카테고리의 다른 글

ttySx, ttyUSBx, ttyACMx  (0) 2023.08.15
Apache Thrift  (0) 2022.12.05
D-Bus IPC System  (0) 2022.12.05
MQTT (Message Queue Telemetry Transport): mosquitto  (0) 2022.12.05