• logo

      SeolMyeongTang

  • 얘! HTTP API말고 gRPC 써보렴

    2021년 12월 15일

    지난 주에 MSA에 관한 주제를 소개했습니다. MSA 방식을 이용하면 서비스별로 구축할 수 있으며, 이들은 HTTP API를 통해 통신을 합니다. 흔히 RESTful한 규칙에 따라 통신을 합니다. RESTful 방식으로 사람이 쉽게 해석을 하고 문서화 할 수 있게 되었지만 네트워크를 통한 통신으로 overhead가 증가하게 됩니다. 이러한 네트워크 통신 overhead를 줄이기 위해 떠오르는 통신 방법이 있습니다. 바로 gRPC입니다.

    HTTP API에 대해 조금 더 살펴봅시다. 데이터를 받고 싶어하는 사용자와 데이터를 제공하는 서비스가 있다고 생각해봅시다. 사용자는 서비스에 데이터 request를 보냅니다. 서비스는 사용자의 request를 받고 이에 따른 response를 건네줍니다. 이 때 request와 response의 내용을 보면 다소 복잡하게 이루어져있는 것을 확인할 수 있습니다. 서비스가 대규모로 커지고 HTTP API 통신이 증가하게 됩니다. 이 과정에서 발생하는 네트워크 overhead는 대규모 서비스 운영에 발목을 잡게 됩니다. gRPC는 이러한 문제로부터 보다 자유로워질 수 있습니다.

    HTTP API 통신 과정
    HTTP API 통신 과정

    gRPC는 Google사가 개발한 RPC 기반 프레임워크입니다. google Remote Procedure Call의 약자로 기존의 RPC 개념과 웹기술을 합쳐 Google이 통신 overhead를 줄이는데 맞춰 개발했습니다. RPC는 프로세스간 통신 방법 중 하나인 IPC(Inter-Process Communication)의 한 종류로, 원격(Remote)으로 함수(Procedure)를 호출(Call)하여 통신하는 방법입니다. 다시 풀어보면, gRPC는 로컬에서 함수를 호출하면 실행 되듯이 한 서버에서 다른 서버의 함수를 호출하면 실행되도록 만든겁니다. 함수 호출하듯이 통신을 하고 HTTP2 통신 방법 채택으로 기존의 HTTP 보다 압축된 통신을 할 수 있게 됩니다.

    gRPC의 통신 과정에 대해 알아보도록 합시다. gRPC는 Protocol Buffer(이하 protobuf)라는 것을 가지고 메시지를 정의하고 주고 받습니다. 새로운 용어가 나왔지만 천천히 살펴봅시다. protobuf에 대해 Google은 다음과 같이 설명합니다.

    protobuf는 XML, JSON과 같은 직렬화 데이터 구조 포맷이라고 생각하시면 됩니다. IDL(Interface Definition Language)의 도움으로 protobuf를 정의합니다. IDL로 작성한 protobuf로 메시지를 정의하고 protoc라는 컴파일러로 빌드하면 server/client 간 통신하는 코드를 언어별로 생성해줍니다. 즉, 구현부와 통신 채널이 분리되어 서비스별로 독립적으로 다른 언어로 구성하는데 유용해집니다. protobuf에 대한 간단 작성 가이드가 궁금하신 분은 다음의 링크를 참고하면 좋을 것 같습니다.

    PROTOBUF
    message Person {
      string name = 1;
      int32 id = 2;
    }
    
    Protocol Buffer 통신 방식
    Protocol Buffer 통신 방식

    gRPC 사용 방법에 대해 간략하게 정리를 해보면 다음과 같습니다.

    1. 메시지 정의를 위한 protobuf 포맷으로 IDL 작성
    2. 각 언어에 맞게 protobuf를 빌드하여 server/client 코드 생성
    3. gRPC을 통해 함수 호출하듯이 server/client 통신

    gRPC는 go, python, Node, C++, Java, PHP, Ruby 등 다양한 언어와 플랫폼을 지원합니다. 독립적인 서비스를 구성할 수 있는 MSA 구조와 궁합이 잘 맞습니다. MSA를 공부하다보면 자연스럽게 gRPC가 왜 나오게 되는지 알 수 있는 시간이였으면 좋겠습니다. MSA와 gRPC에 대한 좋은 영상을 공유하면서 이만 물러나겠습니다 ==3

    gRPC 와 python 을 활용한 Microservice 개발기 - 송지형 - PyCon.KR 2019