NestJS · gRPC

gRPC 서비스 간 통신의 계약과 실패 처리

gRPC 통신은 빠른 RPC 호출을 쓰는 문제가 아니라, proto 계약과 deadline, retry, error status, service discovery를 함께 정하는 서비스 경계다.

01

계약 작성

proto 파일에 request, response, service method를 명시하고 버전 호환성을 고려한다.

02

서버 구현

Nest controller가 @GrpcMethod로 proto service method를 구현한다.

03

클라이언트 호출

client stub이 method를 호출하고 timeout, metadata, auth context를 전달한다.

04

오류 처리

deadline exceeded, unavailable, invalid argument를 REST 오류와 다르게 다룬다.

Proto
공유 계약 필드 번호와 타입이 호환성의 핵심
번호 재사용 금지
Deadline
시간 제한 느린 하위 서비스가 호출자를 무한 대기시키지 않음
전파 정책 필요
Metadata
문맥 전달 trace id, auth token, tenant id 같은 부가 정보
민감값 관리
Status
실패 의미 NOT_FOUND, UNAUTHENTICATED, UNAVAILABLE 등
재시도 가능 여부와 연결

호환성 · 시간 제한 · 재시도 점검

호환성 proto 필드 번호와 optional 정책을 안전하게 바꾼다.
시간 제한 모든 외부 gRPC 호출에 deadline이 있다.
재시도 멱등 호출만 retry 대상이 된다.
추적 서비스 간 trace id가 끊기지 않는다.