📌 gRPC란?


gRPC(Google Remote Procedure Call)는 Google에서 개발한 고성능, 범용 RPC(Remote Procedure Call) 프레임워크이다.

기존의 REST API가 JSON을 사용하여 HTTP 기반으로 통신하는 반면, gRPC는 Protocol Buffers(ProtoBuf)라는 직렬화 방식을 사용하고, HTTP/2 기반으로 통신하여 더욱 빠르고 효율적인 데이터 교환이 가능하다.

 

특징

  • ✅ 고성능
    • HTTP/2Protocol Buffers를 사용하여 낮은 지연시간높은 처리량
  • 다양한 언어 지원
    • Java, Go, Python, C++, JavaScript 등 다양한 언어에서 지원
  • 스트리밍 지원
    • 단방향/양방향 스트리밍을 지원하여 효율적인 데이터 처리 가능
  • ✅ 강력한 인터페이스 지원
    • Protocol Buffers를 사용하여 API 정의
    • 작은 메시지 크기, 빠른 직렬화/역직렬화 속도 제공
  • ✅ 보안
    • 기본적으로 SSL/TLS 통한 보안 연결 지원

 

📚 gRPC의 역사와 등장 배경


gRPC의 탄생 배경

gRPC는 2015년 Google이 오픈소스로 공개한 RPC(Remote Procedure Call) 프레임워크이다.

  • Google 내부에서는 "Stubby”라는 RPC 시스템을 사용하여 서비스 간 통신을 수행했으며, 이를 기반으로 외부 개발자들도 사용할 수 있도록 gRPC를 개발하였다.

 

gRPC가 등장한 이유

  • 마이크로서비스의 등장 ➡️ 서비스 간 빠르고 효율적인 통신 필요
  • HTTP/2의 발전 ➡️ 다중 스트리밍, 압축 전송 지원
  • REST API의 한계 ➡️ 느린 속도, JSON 오버헤드, 실시간 스트리밍 부족

✔ gRPC는 대규모 시스템에서 빠르고 안정적인 서비스 간 통신을 위해 개발되었다.

 

 

RPC(Remote Procedure Call)란?


 

RPC 네트워크 상에서 다른 서버의 함수를 마치 로컬 함수처럼 호출할 수 있도록 하는 기술이다.

✔ REST API는 리소스 중심 (ex. /users/{id})

✔ RPC는 메서드 중심 (ex. getUser(id))

 

RPC의 동작 방식

gRPC는 클라이언트가 서버의 함수를 직접 호출하는 것처럼 원격에서 실행되는 함수(RPC)를 호출합니다.

이 과정에서 .proto 파일을 사용하여 메시지 및 서비스 인터페이스를 정의하고, 이를 바탕으로 자동으로 코드를 생성하여 클라이언트와 서버에서 사용합니다.

  1. 클라이언트가 서버의 특정 메서드를 호출 (getUser(id))
  2. 서버에서 해당 메서드를 실행한 후 결과를 클라이언트로 반환

 

gRPC 🆚  REST API 비교

비교 항목 gRPC REST API
통신 프로토콜 HTTP/2, TCP HTTP/1.1
데이터 포맷 Protocol Bufferes (바이너리) JSON (텍스트)
속도 빠름 (바이너리 전송) 상대적으로 느림 (텍스트 기반)
요청-응답 방식 RPC 방식 (메서드 호출) RESTful 방식 (리소스 중심)
스트리밍 지원 단방향/양방향 스트리밍 지원 기본적으로 미지원
언어 지원 다중 언어 (Java, Go, Python emd) 다중 언어 지원
사용 사례 마이크로서비스, 클라우드 기반 애플리케이션, 멀티 플랫폼 서비스 (웹, 모바일 등), IoT, 실시간 데이터 처리 및 스트리밍 전통적인 웹 API, CRUD 서비스

 

✔ 즉, gRPC는 고성능 API가 필요한 마이크로서비스 환경에서 REST보다 유리하다.

 

 

Protocol Bufferes란?


Protocol Bufferes(ProtoBuf)는 Google이 개발한 직렬화(Serialization) 포맷으로, 텍스트 기반의 JSON이나 XML보다 훨씬 작은 크기와 빠른 속도를 제공한다.

 

ProtoBuf의 핵심 특징

바이너리 데이터 사용 -> JSON보다 크기가 작고, 전송 속도가 빠름

스키마 기반 데이터 구조 -> .proto 파일을 통해 데이터 구조를 명확하게 정의

다양한 언어 지원 -> 자동으로 Java, Python, Go, C++ 등으로 코드 생성 가능

 

ProtoBuf 🆚 JSON (HTTP REST API) 비교

비교 항목 ProtoBuf (gRPC) JSON (REST API)
데이터 형식 바이너리(Binary) 텍스트(Text)
전송 크기 작음 (~70% 감소)
처리 속도 빠름 느림 (파싱 비용 높음)
스키마 (타입 체크) 명확한 타입 정의 (.proto vkdlf) 동적 타입 (런타임 오류 가능)
다중 언어 지원 자동 코드 생성 (Java, Python 등) 가능하지만 수동 파싱 필요
가독성 사람이 직접 읽기 어려움 텍스트 기반으로 가독성 좋음

 

✔ 즉, gRPC + ProtoBuf는 속도와 효율성을 제공하지만, 사람이 직접 데이터를 읽기는 어렵다.

 

Protocol Buffers 사용 예제

ProtoBuf 파일 정의 (.proto 파일)
syntax = "proto3";

package example;

message User {
  int32 id = 1;
  string name = 2;
  string email = 3;
}
  • id, name, email 필드를 가진 User 메시지 정의
  • 각 필드에는 고유한 숫자(1, 2, 3)가 할당됨 ➡️ 바이너리 변환 시 크기 최소화

 

 

gRPC의 클라이언트-서버 아키텍처


 

gRPC는 클라이언트-서버 모델을 기반으로 작동하며, .proto 파일을 사용하여 API 인터페이스를 정의하고, 이를 기반으로 자동 코드 생성을 지원한다.

 

✔ gRPC는 네트워크 복잡성과 데이터 직렬화/역직렬화 과정을 관리한다.