gRPC

gRPC는 빠른 호출보다 명확한 계약이 핵심이다

gRPC는 HTTP/2와 Protocol Buffers로 내부 서비스 간 호출을 강하게 타입화한다. NestJS에서는 proto 계약이 서버 핸들러와 클라이언트 프록시를 동시에 묶는다.

gRPC 호출을 만드는 4개 축

HTTP/2

멀티플렉싱

하나의 연결에서 여러 스트림을 처리해 내부 호출 효율을 높인다.

protobuf

스키마 계약

필드 타입과 번호가 서비스 사이 데이터 모양을 고정한다.

stub

프록시 생성

클라이언트는 proto의 서비스 이름으로 타입화된 메서드를 얻는다.

status

오류 의미

not found, deadline exceeded 같은 상태를 호출자 정책으로 바꾼다.

REST 대신 gRPC를 고를 때

계약
REST/JSON

문서와 구현이 따로 움직이면 소비자 오류가 늦게 발견된다.

gRPC/proto

서비스, 메서드, 메시지 타입이 코드 생성 기준으로 고정된다.

성능
REST/JSON

브라우저 친화적이고 디버깅이 쉽지만 payload가 상대적으로 크다.

gRPC/proto

이진 직렬화와 HTTP/2 스트림으로 내부 통신 비용을 줄인다.

사용처
외부 API

공개 API, 브라우저 직접 호출, 간단한 통합에는 REST가 편하다.

내부 호출

서비스 간 고성능 호출, 폴리글랏 팀, streaming 요구에 잘 맞는다.