gRPC란?
구글이 개발한 오픈 소스 원격 프로시저 호출 시스템(RPC)이다. 호출을 위해 TCP/IP 프로토콜과 HTTP2.0 프로토콜을 사용하고 IDL(Interface Definication Language)로 protocol buffer를 사용한다.
RPC(Remote Procedure call)란?
한 프로그램이 네트워크의 세부 정보를 이해하지 않고도 네트워크 안의 다른 컴퓨터에 있는 프로그램에서 서비스를 요청하는 프로토콜
HTTP 2.0
HTTP(Hypertext Transfer Protocol)는 웹 환경에서 사용되는 통신 프로토콜로 OSI 7 Layer에서 최상위인 Application Layer에서 사용한다.
HTTP에 대한 역사
HTTP는 기본적으로 서버-클라이언트 구조를 따라 HTTP 프로토콜 통신을 위해서는 클라이언트는 서버로 Requst를 보내고 Response를 받는 형태를 갖는다.
HTTP 2.0은 한 Connection으로 동시 여러개 메시지를 주고받으며, 비동기적으로 1.1버전에 비해 효율적이다.
IDL(Interface Definition Language)
서버와 클라이언트가 정보를 저장하는 규칙이다.
XML(eXtensible Markup Langauge)
데이터를 정의하는 규칙을 제공하는 마크업언어로 다른 프로그래밍 언어와 달리 XML은 다체적으로 컴퓨팅 작업을 수행할 수 없다. 데이터를 저장하고 전달하기 위해 만들어졌다.
JSON(JavaScript Object Notation)
기존 XML의 가독성과 속도를 보완하여 등장한 것으로 key-value구조를 갖는다.
Protocol buffer(proto)
구조화된 데이터를 직렬화하는 방식으로 유선이나 데이터 저장을 목적으로 서로 통신할 프로그램을 개발할때 유용하다. 프로토콜 버퍼는 데이터를 이진수로 변환하는 특징이 있다. 그렇기에 다음과 같은 장점을 가진다.
1. 빠른 전송 속도
2. CPU 사용량 감소
3. 파일크기의 감소
4. XML대비 가독성이 좋다.
proto 코드 예시
syntax = "proto3";
option java_package = "com.grpc.education";
option java_multiple_files = true;
package education;
message EmptyRequest{
}
message BasicRequest {
string message = 1;
}
message BasicResponse {
string message = 1;
string statusCode = 2;
string statusMessage = 3;
}
gRPC
gRPC는 protocol buffer와 RPC를 사용한다.
2022.12 당시, IDL로는 proto3를 사용하며 호환하는 언어로는 Java, C++, Python, Java Lite, Ruby, JavaScript, Objective-C, C#을 호환한다.
gRPC의 핵심은 분산으로 클라이언트 으용 프로개름을 서버에서 함수를 원격 호출할 수 있어 MSA(Micro Service Architecture)를 구현하기 수월하다. gRPC 서버에서는 Stub을 통한 호출을 처리할 수 있다.
gRPC 구조
Reference.