gRPC - ?

NuJey·2025년 5월 27일
post-thumbnail

gRPC

gRPC는 Google에서 개발한 오픈 소스 고성능 원격 프로시저 호출(Remote Procedure Call, RPC) 프레임워크로, 분산 시스템 간의 효율적인 통신을 지원합니다. gRPC는 HTTP/2를 전송 프로토콜로 사용하고, Protocol Buffers(프로토콜 버퍼)를 인터페이스 정의 언어(IDL) 및 메시지 직렬화 형식으로 활용합니다.


🌐 gRPC 개요

gRPC에서는 클라이언트 애플리케이션이 다른 머신에 있는 서버 애플리케이션의 메서드를 로컬 객체처럼 직접 호출할 수 있어, 분산 애플리케이션과 서비스를 쉽게 만들 수 있습니다. gRPC는 서비스 정의를 중심으로 하며, 원격으로 호출할 수 있는 메서드와 그 매개변수 및 반환 유형을 지정합니다. 서버 측에서는 이 인터페이스를 구현하고 클라이언트 호출을 처리하는 gRPC 서버를 실행합니다. 클라이언트 측에서는 서버와 동일한 메서드를 제공하는 스텁(stub)을 사용합니다.


🧩 핵심 구성 요소

1. 서비스 정의 및 프로토콜 버퍼

gRPC는 기본적으로 Google의 오픈 소스 구조화된 데이터 직렬화 메커니즘인 Protocol Buffers를 사용합니다. 먼저 .proto 확장자를 가진 텍스트 파일에서 직렬화할 데이터의 구조를 정의합니다. Protocol Buffers 데이터는 메시지로 구조화되며, 각 메시지는 필드라고 하는 일련의 이름-값 쌍을 포함합니다.

protoc 컴파일러를 사용하여 프로토 정의에서 원하는 언어의 데이터 액세스 클래스를 생성합니다. 이러한 클래스는 각 필드에 대한 간단한 접근자와 전체 구조를 원시 바이트로 직렬화/파싱하는 메서드를 제공합니다.

message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}

2. 서비스 및 메서드 정의

gRPC 서비스는 일반적인 .proto 파일에서 정의되며, RPC 메서드의 매개변수와 반환 유형은 Protocol Buffers 메시지로 지정됩니다.

gRPC는 protoc과 특별한 gRPC 플러그인을 사용하여 .proto 파일에서 코드를 생성합니다. 이렇게 하면 gRPC 클라이언트 및 서버 코드와 메시지 유형을 채우고 직렬화/검색하는 데 사용할 수 있는 일반적인 Protocol Buffers 코드가 생성됩니다.

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

💡 주요 특징

  • IDL 기반 통신: .proto 파일로 서비스 정의
  • 다양한 언어 지원: Java, Go, Python, Kotlin 등
  • HTTP/2 기반: 멀티플렉싱, 서버 스트리밍 지원
  • 빠르고 가볍다: JSON보다 더 빠른 직렬화

🚀 gRPC의 장점

  • 다양한 언어 지원: Java, Go, Python, C++, Ruby 등 다양한 언어를 지원하여, 서로 다른 언어로 작성된 서비스 간의 통신이 가능합니다.
  • HTTP/2 기반: 멀티플렉싱, 서버 푸시, 스트리밍 등 HTTP/2의 기능을 활용하여 효율적인 통신을 제공합니다.
  • 경량의 메시지 포맷: Protocol Buffers를 사용하여 JSON보다 더 작고 빠른 메시지 직렬화를 지원합니다.
  • 양방향 스트리밍 지원: 클라이언트와 서버 간의 양방향 스트리밍을 지원하여, 실시간 통신이 가능합니다.

🛠️ gRPC 사용 예시

예를 들어, 인증 서비스(auth-service)에서 사용자 서비스(user-service)에 사용자 존재 여부를 확인하는 요청을 보낼 때, gRPC를 사용하여 효율적인 통신을 구현할 수 있습니다.


📚 참고 자료

0개의 댓글