프로그래밍

[gRPC] gRPC란?

Victory_HA 2022. 6. 16. 16:24

참조 : https://chacha95.github.io/2020-06-15-gRPC1
참조 : https://grpc.io/docs/what-is-grpc/introduction/


  • gRPC가 무엇인지 알기전에, 몇가지 추가 개념에 대해 알아봅시다.

RPC

  • RPC(원격 프로시저 호출)는 한 프로그램이 다른 컴퓨터에 있는 프로그램에 서비스를 요청하는 프로토콜입니다.
    • 클라이언트에서 서비스를 요청(function call)하면, 서버에서 서비스를 제공합니다.
  • RPC는 client-server 모델을 사용합니다.

스텁(Stub)

  • 서버와 클라이언트는 다른 주소 공간을 사용합니다.
  • 그래서, 함수호출에 사용되는 매개변수를 변환이 필요한데,
  • 스텁이 담당합니다.

마샬링(Marshalling)

  • 스텁은 클라이언트와 서버 각각에 존재합니다.
  • client Stub은 함수 호출에 사용될 파라미터를 변환(Marshalling),
  • 함수 실행 후 서버에서 전달 된 결과의 변환을 담당합니다.

언마샬링(Unmarshalling)

  • server stub은 클라이언트가 전달한 매개 변수의 역변환(Unmarshalling),
  • 함수 실행 결과를 변환합니다.

IDL(Interface Definition Language)

  • 서버와 클라이언트가 정보를 주고 받는 규칙이 프로토콜이라면,
  • IDL은 정보를 저장하는 규칙입니다.
  • 대표적인 IDL로는 다음의 3가지가 존재합니다.
    • XML
    • Json
    • Protocol buffers(proto)

XML

  • XML(eXtensible Markup Langauge)은 어떠한 데이터를 설명하기 위해 이름을 임의로 지은 태그로 데이터를 감싸며,
  • 태그로 사용자가 직접 데이터 구조를 정의 할 수 있습니다.
  • 데이터를 저장하고 전달하는게 목적입니다.

Json

  • javascript의 부상으로 많이 쓰이고 있는 데이터 구조입니다.
  • XML이 가진 읽기 불편하고 복잡하고 느린 속도 문제를 해결했습니다.
  • key-value로 정의된 구조 자체가 굉장히 사람에게 직관적입니다.

Protocol buffers(proto)

  • Protocol buffers는 구조화(structured)된 데이터를 직렬화(serialization)하기 위한 프로토콜로 XML보다 작고 빠르고 간단합니다.
  • XML 스키마처럼 .proto 파일에 protocol buffer 메세지 타입을 정의합니다.
  • 현재 proto2와 proto3가 있으며, proto3의 사용을 권장합니다.

gRPC

  • gRPC는 Google에서 개발한 RPC(Remote Procedure Call) 시스템입니다.
  • 최신 버전의 IDL로 proto3를 사용합니다.
  • C#에서 사용 가능합니다.
  • SSL/TLS를 사용하여 서버를 인증하고 클라이언트와 서버간에 교환되는 모든 데이터를 암호화합니다.
  • HTTP 2.0을 사용하여 성능이 뛰어나고 확장 가능한 API를 지원합니다.
  • gRPC에서 클라이언트 응용 프로그램을 서버에서 함수를 바로 호출 할 수 있습니다.
  • 서버 측에서는 서버 인터페이스를 구현하고, gRPC 서버를 실행하여 클라이언트 호출을 처리합니다.