gRPC

김유경·2025년 7월 29일
1

gRPC란?

gRPC는 Google이 개발한 고성능 오픈소스 RPC(Remote Procedure Call) 프레임워크입니다. RPC란 원격 서버의 함수를 마치 로컬 함수처럼 호출할 수 있게 해주는 프레임워크입니다.

  • 클라이언트는 원격 서버의 메서드를 로컬 함수처럼 호출
  • 서버는 실제 비즈니스 로직을 구현하고 응답 제공
  • gRPC 프레임워크가 네트워크 통신, 데이터 직렬화, 에러 처리 등을 담당


gRPC vs REST API

특징REST APIgRPC
프로토콜HTTP/1.1HTTP/2
데이터 포맷JSON (텍스트)Protocol Buffers (바이너리)
성능상대적으로 느림빠름
스트리밍제한적4가지 스트리밍 지원
타입 안정성런타임에 확인컴파일 타임에 확인

gRPC와 Protocol Buffers의 관계

gRPC는 내부적으로 데이터를 주고받을 때 Protocol Buffers (protobuf)를 사용합니다.

  • gRPC: 서비스 정의, 네트워크 통신, 원격 호출 관리
  • Protocol Buffers: 데이터 구조 정의, 직렬화/역직렬화
syntax = "proto3";
package user;

// 데이터 구조 정의 (Protocol Buffers)
message User {
  int32 id = 1;
  string name = 2;
  string email = 3;
}

message GetUserRequest {
  int32 user_id = 1;
}

// 서비스 정의 (gRPC)
service UserService {
  rpc GetUser(GetUserRequest) returns (User);
  rpc CreateUser(User) returns (User);
  rpc ListUsers(Empty) returns (stream User);
}

gRPC의 4가지 통신 방식

1) Unary RPC (단일 요청-응답)

가장 기본적인 형태로, 하나의 요청에 하나의 응답을 받습니다.

service Calculator {
  rpc Add(AddRequest) returns (AddResponse);
}

message AddRequest {
  int32 a = 1;
  int32 b = 2;
}

message AddResponse {
  int32 result = 1;
}

2) Server Streaming RPC (서버 스트리밍)

하나의 요청에 대해 서버가 여러 개의 응답을 스트림으로 전송합니다.

service FileService {
  rpc DownloadFile(DownloadRequest) returns (stream FileChunk);
}

message DownloadRequest {
  string filename = 1;
}

message FileChunk {
  bytes data = 1;
  int32 chunk_number = 2;
}

3) Client Streaming RPC (클라이언트 스트리밍)

클라이언트가 여러 개의 요청을 보내고, 서버가 하나의 응답을 반환합니다.

service FileService {
  rpc UploadFile(stream FileChunk) returns (UploadResponse);
}

message UploadResponse {
  string file_id = 1;
  int64 total_size = 2;
}

4) Bidirectional Streaming RPC (양방향 스트리밍)

클라이언트와 서버가 동시에 여러 메시지를 주고 받습니다.

service ChatService {
  rpc Chat(stream ChatMessage) returns (stream ChatMessage);
}

message ChatMessage {
  string user_id = 1;
  string message = 2;
  int64 timestamp = 3;
}

참고 링크

🔗 공식 문서
🔗 kt cloud 기술 블로그

0개의 댓글