노트

gRPC

gRPC (gRPC Remote Procedure Calls)

백엔드#network#http · 연결된 개념 6개

쉽게 말하면

gRPC는 미리 약속한 버튼 배치표(.proto)로 여러 언어용 리모컨을 찍어 내서, 다른 서버의 함수를 내 함수처럼 누르게 해 주는 도구예요. 신호는 JSON보다 작은 바이너리라 빠르죠.

비유가 깨지는 곳 리모컨과 달리 신호가 끊길 수 있어서 호출마다 deadline을 주고 넘으면 양쪽에서 취소해요. 또 브라우저는 HTTP/2 프레임을 직접 다루지 못해 주로 서비스 사이 내부 통신에 써요.

gRPC는 다른 프로세스·서버의 함수를 내 함수처럼 부르는 RPC 프레임워크다. 인터페이스를 Protocol Buffers(protobuf)로 정의하고, 그 정의에서 여러 언어의 클라이언트·서버 코드를 생성하며, HTTP/2 위에서 바이너리로 통신한다.

syntax = "proto3";
 
service UserService {
  rpc GetUser (GetUserRequest) returns (User);
  rpc WatchUsers (WatchRequest) returns (stream User);   // 서버 스트리밍
}
 
message GetUserRequest { int64 id = 1; }
message User { int64 id = 1; string name = 2; }

구성 요소

  • protobuf: 인터페이스 정의 언어(Interface Definition Language, IDL)이자 직렬화(serialization) 형식. 필드 번호로 인코딩해 JSON보다 작고 빠르며, 번호를 지키면 필드 추가에도 하위 호환된다
  • 코드 생성: .proto에서 스텁(stub)을 만들어 타입이 맞지 않는 호출을 컴파일 단계에서 잡는다
  • HTTP/2: 바이너리 프레이밍(binary framing), 연결 하나에 여러 요청을 동시에 싣는 멀티플렉싱(multiplexing), 헤더 압축(header compression)
  • 통신 방식 4가지: 단항(unary), 서버 스트리밍(server streaming), 클라이언트 스트리밍(client streaming), 양방향 스트리밍(bidirectional streaming)
  • 채널(channel): 서버로의 연결을 추상화한 객체. 재사용한다
  • deadline·취소: 호출마다 마감 시간을 주면 넘었을 때 양쪽에서 취소된다. 다운스트림 호출이 업스트림을 붙잡는 일을 막는다(업스트림과 다운스트림)
  • 인터셉터(interceptor): 인증·로깅 같은 횡단 관심사(cross-cutting concern)를 호출 앞뒤에 끼운다

REST·GraphQL과 비교

RESTGraphQLgRPC
계약관례·OpenAPI스키마.proto
형식주로 JSONJSON바이너리
브라우저그대로그대로프록시(gRPC-Web) 필요
강점단순, 캐시클라이언트가 필드 선택서비스 간 고성능·스트리밍

브라우저는 HTTP/2 프레임을 직접 다루지 못해 gRPC를 바로 쓸 수 없으므로, 주로 마이크로서비스 사이 내부 통신에 쓴다. NestJS도 gRPC 트랜스포트를 공식 지원한다. 같은 함수 호출처럼 보여도 네트워크는 실패한다는 점을 잊지 않게 하는 것이 RPC 설계의 핵심이다(누수 추상화의 법칙).

출처: gRPC 소개 · gRPC 핵심 개념: RPC 종류 · Deadlines · Channels

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • DRF 파서·렌더러와 콘텐츠 협상

    DRF에서 파서(Parser)는 요청 본문을 파이썬 자료형으로 바꾸고, 렌더러(Renderer)는 응답 데이터를 클라이언트가 받을 형식으로 바꾼다. 어떤 렌더러를 쓸지는 요청의 Accept 헤더를 보고 고르는데, 이를 콘텐츠 협상(content negotiation)이라 한다.

  • 그래프

    정점(vertex, 노드)과 정점들을 잇는 간선(edge)으로 이루어진 자료구조. 트리도 그래프의 한 종류다. SNS 친구 관계, 지도와 경로, 웹 페이지 링크, 추천 시스템, 패키지 의존성처럼 "무엇과 무엇이 연결돼 있다"는 모든 것을 표현한다. 이 지식 맵도 노트를 정점, 링크를 간선으로 한 그래프다.

  • Kafka

    Kafka는 이벤트(메시지)를 디스크의 추가 전용 로그(append-only log)에 쌓아 두고, 여러 소비자가 각자 읽은 위치를 기억하며 꺼내 가게 하는 분산 이벤트 스트리밍 플랫폼(distributed event streaming platform)이다. 흔히 메시지 큐(message queue)라고 부르지만 동작은 큐보다 로그에 가깝다.

  • 로컬 퍼스트 아키텍처

    클라이언트 기기의 로컬 데이터를 진실의 원천(Source of Truth)으로 삼고, 서버는 동기화와 백업을 맡는 설계 방식. 전통적인 "서버가 원천, 클라이언트는 요청해서 그린다" 구조를 뒤집어 로컬 DB → UI 렌더링 → 백그라운드 동기화 순서로 흐른다.

  • HTTP와 HTTPS

    HTTPS는 HTTP(Hypertext Transfer Protocol) 메시지를 TLS(Transport Layer Security)로 감싸 보내는 방식이다. HTTP 자체는 바뀌지 않고, 그 아래에 암호화 계층이 하나 끼어든다. 기본 포트는 HTTP가 80, HTTPS가 443이다.

보기 옵션