📌 gRPC란?
gRPC(Google Remote Procedure Call)는 Google에서 개발한 고성능, 범용 RPC(Remote Procedure Call) 프레임워크이다.
기존의 REST API가 JSON을 사용하여 HTTP 기반으로 통신하는 반면, gRPC는 Protocol Buffers(ProtoBuf)라는 직렬화 방식을 사용하고, HTTP/2 기반으로 통신하여 더욱 빠르고 효율적인 데이터 교환이 가능하다.
✔ 특징
✅ 고성능
- HTTP/2, Protocol 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 파일을 사용하여 메시지 및 서비스 인터페이스를 정의하고, 이를 바탕으로 자동으로 코드를 생성하여 클라이언트와 서버에서 사용합니다.
- 클라이언트가 서버의 특정 메서드를 호출 (getUser(id))
- 서버에서 해당 메서드를 실행한 후 결과를 클라이언트로 반환
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는 네트워크 복잡성과 데이터 직렬화/역직렬화 과정을 관리한다.
'기술(Tech) > Network & System' 카테고리의 다른 글
[gRPC] Protocol Buffers(ProtoBuf): 고성능 데이터 직렬화 포맷 (0) | 2025.02.15 |
---|---|
모바일 애플리케이션 및 웹 애플리케이션 최적화 전략 (1) | 2025.02.09 |
REST API vs. GraphQL: 어떤 것을 선택해야 할까?💭 (0) | 2025.02.09 |