gRPC

곽태민·2023년 5월 3일
0

TIL

목록 보기
21/65
post-custom-banner

gRPC란?


gRPC는 Google에서 개발한 어디서나 실행할 수 있는 오픈소스 고성능 RPC 프레임워크다. RPC는 Remote Procedure Call의 줄임말로 원격 프로시저 호출이라고 한다.

RPC별도의 원격 제어를 위한 코딩없이 다른 주소공간에서 함수나 프로시저를 실행할 수 있게 해주는 프로세스간 통신 기술이다. 특히 MSA구조에서 각 서버가 다른 언어와 프레임 워크로 개발되었더라도 RPC는 문제없이 서버간 통신이 가능하다.

gRPC를 사용하면 원격에 있는 어플리케이션의 메서드를 로컬 메서드처럼 직접 호출이 가능하여 분산 어플리케이션과 서비스를 보다 쉽게 만들 수 있다.

gRPC는 RPC 시스템과 마찬가지로 서비스를 정의하고, 서비스를 위한 매개변수와 반환 값을 가지는 메서드를 만든다는 아이디어를 가지고 있다.

서버 측은 정의한 서비스 규격에 따라서 인터페이스를 구현하고 gRPC 서버를 실행하여 클라이언트 호출을 처리한다. 클라이언트 측에서는 서버와 동일한 방법을 제공하는 stub이 있다.

stub


stubRPC의 핵심 개념으로 Parameter 객체를 Message로 Marshalling/Unmarshalling하는 레이어다.

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

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

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

Protocol Buffer


gRPC는 IDL(Interface Definition Language)로 Protocol Buffer를 사용한다.

Protocol Buffer는 직렬화 데이터 구조로, 어떤 언어나 플랫폼에서도 통신 프로토콜이나 데이터 저장을 사용할 때 구조화된 데이터를 전환하게 해주는 방법이다. 직렬환 종류에는 대표적으로 Json과 XML이 있다.

Protocol Buffer로 작업할 때는 .proto 파일에서 직렬화할 데이터 구조를 정의한다. Protocol Buffer는 하나의 프로그래밍 언어가 아닌 여러 프로그래밍 언어를 지원하기 때문에, 특정 언어에 종속성이 없는 형태로 데이터 타입을 정하는데, 이 파일을 .proto 파일이라고 한다.

Protocol Buffer의 데이터는 일련의 key - value 형태의 쌍을 포함하는 작은 논리적 레코드인 메시지로 구성된다.

message Car {
	int32 id = 1;
	string name = 2;
}

이런 proto 파일을 protoc 컴파일러로 컴파일을 하면 데이터에 접근할 수 있는 각 언어에 맞는 형태의 데이터 클래스를 생성한다.

만들어진 클래스는 각 필드를 위한 접근자 외에도 전체 구조를 바이트로 직렬화하거나 바이트로부터 전체 구조를 파싱하는 메서드들을 제공한다.

gRPC 특징


  1. 높은 생산성과 다양한 언어 및 플랫폼 지원
    • gRPC는 서비스와 메시지를 정의하기 위해서 Protocol Buffer를 사용한다.
    • Protocol Buffer의 IDL만 정의하면 서비스와 메시지에 대한 소스코드가 자동생성되며 데이터를 주고 받을 수 있다.
  2. HTTP/2 기반의 양방형 스트리밍
    • gRPC는 HTTP/2 기반으로 통신하는데, HTTP/2는 하나의 TCP 연결이 여러 개의 양방형 스트리밍을 지원한다.
  3. 성능의 이점
    • gRPC는 HTTP/2 레이어 위에서 Protocol Buffer를 사용하여 직렬화된 바이트 스트림으로 통신하여 JSON 기반의 통신 대비 더 가볍고 통신 속도가 빠르다.
    • 그래서 latency 감소와 더 많은 트래픽을 처리할 수 있는 성능의 이점이 있다.
profile
Node.js 백엔드 개발자입니다!
post-custom-banner

0개의 댓글