[Back-end] gRPC

Geun·2022년 3월 29일
0

Back-end

목록 보기
39/74

gRPC

gRPC는 구글에서 개발한 고성능 RPC 프레임워크이다.
Java, C ++, Python, Java Lite, Ruby, JavaScript, Objective-C 및 C#에서 사용 가능하다.
RPC(Remote Procedure Call)는 별도의 원격 제어를 위한 코딩없이 다른 주소공간에서 함수나 프로시저를 실행할 수 있게하는 프로세스간 통신기술이다.

gRPC를 이용하면 원격에 있는 애플리케이션의 메서드를 로컬 메서드인 것처럼 직접 호출할 수 있기 때문에 분산 애플리케이션과 서비스를 보다 쉽게 만들 수 있다.

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

stub

stub은 RPC의 핵심 개념으로 parameter 객체를 Message로 marshalling/unmarshalling하는 레이어이다.

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

  • client의 stub은 함수 호출에 사용된 파라미터의 변환(marshalling) 및 함수 실행 후 서버에서 전달된 결과의 변환 담당
  • server의 stub은 클라이언트가 전달한 매개변수의 역변환(unmarshalling) 및 함수 실행결과 변환을 담당한다.

protocol buffer

gRPC는 IDL(Interface Definition Language)로 protocol buffer를 사용한다.

protocol buffer는 직렬화 데이터 구조이다.
어떤 언어나 플랫폼에서 통신 프로토콜이나 데이터 저장을 사용할 때 구조화된 데이터를 전환하게 해주는 방법이다.
직렬화의 종류로 JSON과 XML이 있다.

특징

  • 높은 생산성, 다양한 언어 및 플랫폼 지원
    gRPC는 서비스와 메시지를 정의하기 위해 Protocol buffer를 사용한다.
    프로토콜 버퍼의 IDL만 정의하면 서비스와 메시지에 대한 소스코드가 자동으로 생성되고 데이터를 주고받을 수 있다.
  • HTTP/2 기반의 양방향 스트리밍
    gRPC는 HTTP/2 기반으로 통신한다. HTTP/2는 하나의 TCP연결이 여러개의 양방향 스트리밍을 지원한다.
  • 성능
    gRPC는 HTTP/2 레이어 위에서 Protocol buffer를 사용해 직렬화된 바이트 스트림으로 통신하여 JSON 기반의 통신보다 더 가볍고 빠르다.

참고자료

https://velog.io/@dojun527/gRPC%EB%9E%80
https://grpc.io/docs/
https://thenewstack.io/grpc-lean-mean-communication-protocol-microservices/

0개의 댓글