NestJS gRPC

proto 계약이 서버와 클라이언트를 동시에 묶는다

NestJS gRPC 구현은 파일을 여러 개 수정하지만 기준은 하나다. users.proto의 package, service, rpc, message가 런타임 설정과 TypeScript 인터페이스까지 이어져야 한다.

구현 흐름은 proto에서 시작한다

01

proto 정의

rpc GetUserById

요청 메시지와 응답 메시지의 필드 번호를 계약으로 고정한다.

02

gRPC 서버

Transport.GRPC

package, protoPath, url을 설정하고 마이크로서비스로 기동한다.

03

핸들러 연결

@GrpcMethod

proto의 service와 method 이름을 Nest 컨트롤러 메서드에 매핑한다.

04

클라이언트 호출

ClientGrpc

getService로 프록시를 얻고 Observable 결과를 HTTP 응답으로 바꾼다.

엇갈리면 바로 깨지는 값

이름 계약
맞아야 하는 값

package, service, method 이름이 proto와 코드에서 동일하다.

어긋날 때

메서드를 찾지 못하거나 UNIMPLEMENTED 오류로 돌아온다.

채널 계약
맞아야 하는 값

서버 url과 클라이언트 url, protoPath가 같은 대상을 본다.

어긋날 때

연결 실패, deadline 초과, 빈 기본값 응답으로 나타난다.

응답 계약
맞아야 하는 값

not found를 빈 User로 숨길지 gRPC status로 보낼지 정한다.

어긋날 때

호출자는 성공 응답과 도메인 실패를 구분하지 못한다.