gRPC는 구글에서 만든 RPC 시스템입니다. gRPC를 설명하기에 앞서 RPC가 무엇인지 설명을 합니다.

RPC란?

RPC는 Remote Procedure Call로 프로세스간 통신 기법 중 하나입니다. 다른 프로세스에 있는 함수를 호출할때, 마치 같은 프로세스 내에 있는 것처럼 호출할 수 있습니다. 클라이언트는 일반 로컬 메소드를 호출하는 것처럼 사용하면 됩니다. RPC는 다양한 환경, 플랫폼에 제약없이 사용할 수 있어 분산 시스템 기법에 효과적입니다.

Caller/Callee

Client(Caller)와 Server(Callee)는 사용자가 필요한 비지니스 로직을 작성하는 레이어

IDL(Interface Definition Language)을 사용하여 서로의 인터페이스를 명시

Stub

StubComplier가 IDL을 기반으로 언어에 맞는 코드를 생성

Parameter 객체를 Message로 Marshalling/Unmarshalling하는 레이어

Stub은 RPC의 핵심 개념이라고 볼 수 있음.

서버와 클라이언트는 서로 다른 주소 공간을 사용 하므로 함수 호출에 사용된 매개 변수를 꼭 변환해줘야함. 그렇지 않으면 메모리 매개 변수에 대한 포인터가 다른 데이터를 가리키게 됨.

client의 stub은 함수 호출에 사용된 파라미터의 변환(Marshalling) 및 함수 실행 후 서버에서 전달 된 결과의 변환을 담당

server stub은 클라이언트가 전달한 매개 변수의 역변환(Unmarshalling) 및 함수 실행 결과 변환을 담당

RPC Runtime

Client와 Server를 연결하는 레이어

통신을 담당하면 에러 처리도 진행

gRPC란?

gRPC는 구글에서 개발한 RPC 시스템입니다. 기본적인 개념은 RPC와 동일하지만 특징으로 HTTP/2 기반으로 양방향 스트리밍을 지원하고 HTTP/2를 사용함으로써 메세지의 압축률과 성능이 좋습니다. 

gRPC 특징

높은 생산성과 다양한 언어 및 플랫폼 지원

gRPC는 서비스와 메시지를 정의하기 위해서 Protocol Buffers를 사용합니다. 아래와 같은 프로토콜 버퍼의 IDL만 정의하면 서비스와 메세지에 대한 소스코드가 자동으로 생성하고 데이터를 주고 받을 수 있습니다.

service Grpc {
 // 서비스의 RPC 정의
 rpc CallTest (Request) returns (Response) {}
}

// 요청 메시지
message Request {
 string name = 0;
}

// 응답 메시지
message Response {
 string message = 1;
}


위의 예제 코드와 같이 프로토콜 버퍼의 IDL을 정의하면 아래와 같이 다양한 언어와 플랫폼에서 사용할 수 있습니다.

HTTP/2 기반의 양방향 스트리밍

gRPC는 HTTP/2 기반으로 통신합니다. HTTP/2는 일반적인 요청/응답 방식이 아니고 서버와 클라이언트가 서로 동시에 데이터를 스트리밍으로 주고 받을 수 있습니다. 


높은 메시지 압축률과 성능

HTTP/2를 기반으로 하면서 또 하나의 장점으로는 HTTP 기반 전송보다 높은 헤더 압축률을 보장합니다. 또한 프로토콜 버퍼의 데이터는 바이너리이기 때문에 변환 작업없이 빠르게 처리할 수 있고 JSON, XML과 다르게 메서드, 클래스와 같은 데이터 구조를 표현할 수 있습니다. 

이와 같이, 더 많이 압축이 된다는 것은 전송할 데이터의 크기가 줄어든다는 것이므로 네트워크 트래픽이 줄어들고 시스템 리소스를 절약하여 성능을 높일 수 있습니다.

gRPC 어디에 적합할까?

gRPC는 대부분의 아키텍쳐에 사용할 수 있지만 MSA에 가장 적합한 기술입니다. 

gRPC를 활용하면 비니지스 로직에 집중하여 빠른 서비스 개발이 가능하고, 간단한 설치와 빠른 배포가 가능합니다. 또한 다양한 언어와 플랫폼 지원으로 ployglot한 언어와 기술스택을 지향하는 MSA의 철학과 동일합니다. 프로토콜 버퍼의 IDL을 활용한 서비스 및 메시지 정의는 MSA의 다양한 기술 스택으로 인해 발생하는 단점을 보완하고 많은 서비스 간의 API 호출로 인한 성능 저하를 개선할 수 있습니다. MSA를 기반으로 하면서 분산처리를 위해서 필요한 보안, API Gateway, 로그 추적, 모니터링, 상태 체크 등의 기능들을 추가 개발할 수도 있습니다.


하지만 gRPC를 사용하면서 기존 많이 사용하고 있는 HTTP1.1이 아닌 HTTP2를 사용하기 때문에 공부하고 이해해야 하는 기술들이 많습니다.

따라서 gRPC, HTTP2 등 기반 기술이 많기 때문에 러닝 커브가 존재합니다.



'공부' 카테고리의 다른 글

gRPC란?  (1) 2020.09.27
[UML] 시퀀스 다이어그램 (Sequence Diagram)  (1) 2020.08.01
UML 다이어그램  (0) 2020.08.01
코루틴이란?  (0) 2020.02.23
라이브러리, 모듈, 프레임워크 란  (0) 2019.02.05
백업 vs 아카이브 차이점  (0) 2019.01.19
절차지향 VS 객체지향  (1) 2018.12.22
  1. ihp001 2020.09.28 13:43 신고

    감사합니다 ㅎㅎ