가. 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
•
gRPC vs REST, https://www.imaginarycloud.com/blog/grpc-vs-rest/