[gRPC] gRPC 알아보기

728x90
반응형

 

 

 

들어가며

Web 서버로 구성된 프로젝트에서, 서버 클라이언트간에 데이터를 전송하는 방식으로 RESTFul API 에 Json 데이터 포멧을 이용해서 많이 사용합니다. 분명한 장/단점이 있는데요. 클라이언트와의 데이터 포멧은 데이터 파악의 용이한 점으로 인해서 Json 포멧을 많이 사용하고 있습니다. 

 

서버끼리의 통신에도 Json 방식으로 데이터 포멧을 유지하고 있었는데요. 

데이터 구조를 노출하지 않고 (물론 다양한 방법이 존재하지만요.), 서버간의 통신을 gRPC를 이용해서 좀더 빠른 통신을 구성해보는 것이 어떨까 해서 gRPC 에 대해 알아보기로 했습니다. 

 

 


 

gRPC 개요

gRPC는 google Remote Procedure Call 의 약자로서, 이름에서 보이듯 구글에서 만든, 모든 환경에서 실행할수 있는 최신 오픈 소스 고성능의 원격 프로시져 호출 프래임워크 입니다. 

 

RPC는 프로세스 간에 통신을 하기 위한 프레임워크인데, 이를 구글에서 HTTP/2 기반으로 구현한 것이 gRPC 입니다.

 

로드밸런싱, 추척, 상태확인 및 인증을 위한 플러그형 지원을 통해 데이터 센터 안밖에서 서비스를 효율적으로 연결할 수 있습니다. 또한 디바이스, 모바일 앱, 브라우저의 백앤드 서비스에 연결하기 위한 분산 컴퓨팅의 라스트 마일에도 적용할 수 있습니다.

gRPC에서 클라이언트는 로컬 개체인것처럼 다른 서버 응용프로그램의 메서드를 직접 호출할 수 있으므로, 분산 응용 프로그램 및 서비스를 더 쉽게 만들 수 있습니다.

서버측에서 인터페이스를 구현하고 gRPC 서버를 실행하여, 클라이언트 호출을 처리합니다.

 

 

 

 

 

프로토콜 버퍼

기본적으로 gRPC는 프로토콜 버퍼를 사용합니다.

일반적으로 proto2(현재 기본 프로토콜 버퍼 버전)를 사용할 수 있지만 proto3를 gRPC와 함께 사용하면 gRPC 지원 언어의 전체 범위를 사용할 수 있고 proto2 클라이언트와 통신하는 호환성 문제를 피할 수 있으므로 gRPC와 함께 사용하는 것이 좋습니다.

proto3 서버와 그 반대의 경우도 마찬가지입니다.

 

 

 

 

주요 사용 시나리오

  • 마이크로 서비스 스타일의 설계에서 폴리글랏 서비스의 효율적인 연결
  • 모바일 장비, 브라우저 클라이언트의 백엔드 서비스에 연결
  • 효율적인 클라이언트 라이브러리 생성

 

 

 

핵심 특징

  • 11개 언어로 된 관용적 클라이언트 라이브러리
  • 간단한 서비스 정의 프레임워크로 매우 효율적입니다.
  • http/2 기반 전송을 통한 양방향 스트리밍
  • 플러그인 형 인증, 추적, 로드밸런싱 및 상태확인

 

 

 

 

지원 언어

 

Language  OS  Compilers / SDK
C/C++ Linux, Mac GCC 6.3+, Clang 6+
C/C++ Windows 10+ Visual Studio 2017+
C# Linux, Mac .NET Core, Mono 4+
C# Windows 10+ .NET Core, NET 4.5+
Dart Windows, Linux, Mac Dart 2.12+
Go Windows, Linux, Mac Go 1.13+
Java Windows, Linux, Mac Java 8+ (KitKat+ for Android)
Kotlin Windows, Linux, Mac Kotlin 1.3+
Node.js Windows, Linux, Mac Node v8+
Objective-C macOS 10.10+, iOS 9.0+ Xcode 12+
PHP Linux, Mac PHP 7.0+
Python Windows, Linux, Mac Python 3.5+
Ruby Windows, Linux, Mac Ruby 2.3+

 

 

 

 

참조

https://narup.tistory.com/119?category=925261

https://grpc.io/docs/what-is-grpc/introduction/

 

 

 

END


 

 

 

 

728x90