Search

Basic Concept

가. gRPC

1) RPC

RPC(Remote Procedure Call): 별도의 코드작업 없이 네트워크 상 다른 주소 공간의 함수를 마치 로컬 환경의 함수처럼 실행시킬 수 있는 프로세스 간 통신기술

2) gRPC

gRPC(Google Remote Procedure Call): HTTP 2.0 프로토콜을 기반으로 구현된 RPC API 기술
RPC API model을 IDL(Interface Description Language)로 표현하여 remote procedure을 직관적으로 사용 가능
→ Default IDL은 Protocol Buffer

3) HTTP 1.1 vs HTTP 2

HTTP 1.1: request-response model
→ 복수의 사용자로부터 복수의 요청 수신 시, 한 번에 하나의 요청 처리 가능
HTTP 2: client-response model
→ 복수의 사용자로부터 복수의 요청 수신 시, 동시 처리 가능

나. gRPC vs REST

1) Comparison of Features

HTTP 1.1 vs HTTP 2
→ gRPC: 'HTTP 2'의 특성(스트리밍 통신, 양방향 통신 가능)과 'HTTP 1.1'의 특성(단방향 통신) 모두 활용 가능
→ REST: 'HTTP 1.1', 'HTTP 2'에서 모두 단방향 통신만 활용 가능
Browser Support
→ gRPC: HTTP 1.1과 HTTP 2 사이에서 동작하기 위해 gRPC-web과 proxy layer가 필요함
→ REST: 모든 Browser에서 사용 가능
Payload Data Structure
→ gRPC: Payload Data를 직렬화하기 위해 Protocol Buffer를 기본설정으로 채택함. Buffer는 binary data이기 때문에 특히 수치 데이터 전송 시 REST에 비해 성능 이점이 있음
→ REST: JSON or XML 포맷으로 데이터를 송수신함
Code Generation Features
→ gRPC: gRPC 자체적으로 native code generation feature가 있음
→ REST: third-party tool(Swagger나 Postman)을 사용하여 code 생성 가능(or API request 생성 가능)

2) Comparison of When to use

gRPC 사용 권장 환경
→ internal/private systems: 제한된 브라우저 환경을 통제할 수 있는 시스템에서 사용하기 적절
→ real-time streaming: HTTP 2에서 지원하는 streaming communication 활용 가능
→ IoT system: 대용량 수치 데이터 전송 환경에서 가벼운 메시지 포맷으로 통신 가능
→ mobile application: 가벼운 메시지 전송, 웹브라우저 사용하지 않는 환경에서 무거운 HTTP 프로토콜 대체 가능
REST 사용 권장 환경
→ public systems: 모든 브라우저 환경에서 정상 동작해야 하는 서비스에 적절

다. Protocol Buffer

1) 정의

구조화된 데이터를 직렬화하는 오픈소스 매커니즘
gRPC에서 IDL과 기본적인 메시지 교환형식으로 사용

2) 특징

버퍼는 바이너리 데이터이기 때문에 JSON에 비해 가벼움
→ 특히 수치 데이터는 버퍼로 전달하면 최적화된 데이터 전송 가능
공개적으로 사용 규격이 정의된 문법으로 Proto2, Proto3가 있음
proto2, proto3는 사용 용도가 다름
→ proto2는 보다 구체적으로 데이터 구조 명시
→ proto3는 보다 간결하게 데이터 구조 명시
프로토콜 버퍼를 언어중립적으로 사용하기 위해서는 이를 매개하는 컴파일러 필요
→ 트랜스파일러에 가까움
→ brew install로 설치가 가능하나 proto file의 위치를 찾기 어려움으로 설치파일 또는 압축파일을 받아서 설치하는 것을 권장
Well-known types
→ JSON과 같이 유연한 객체를 만들기 위해 사용
→ Struct 타입이 JSON에 가장 잘 맞는 Well known type
→ JSON → JSON 형식
Stub: gRPC의 전신이 Stubby(google에서 사용한 비표준 RPC 기술)
Server Reflection: 클라이언트 파일을 클라이언트와 서버에 모두 가지고 있어야 하지만 본 기능을 사용하면 Server에서만 클라이언트 파일을 가지고 있고 이를 각 클라이언트에 반영
secure connection
→ 본 설정이 되어 있다면 RPC URL을 날릴 때, 관련 인증서가 없으면 통신 불가

Reference