Nodejs

 

 NestJS에서 Protobuf 컴파일하기: protoc로 gRPC 타입 생성하기

 

NestJS 기반의 프로젝트에서 gRPC를 활용하려면 .proto 파일을 TypeScript로 변환하는 과정이 필요합니다. 이 글에서는 protoc를 활용해 .proto 파일을 컴파일하고, NestJS에서 사용할 수 있는 타입 정의를 생성하는 방법을 정리합니다.

 

1. 환경 준비

먼저 필요한 패키지를 설치합니다. pnpm을 사용하는 경우 다음 명령어를 실행하세요:

pnpm add  @grpc/grpc-js @grpc/proto-loader ts-proto

설치가 완료되면 protoc 버전을 확인합니다:

protoc --version

예: libprotoc 3.28.2

 

 

2.변환 명령어 설정

기존 강의에서는 복잡한 CLI 명령어를 사용했지만, 더 간단하고 유지보수하기 쉬운 방식으로 변경합니다. package.json에 다음 스크립트를 추가하세요:

"scripts": {
  "proto:gen": "npx protoc --ts_proto_out=./libs/common/src/grpc --ts_proto_opt=nestJs=true,addGrpcMetadata=true -I ./proto ./proto/*.proto"
}

이제 다음 명령어로 모든 .proto 파일을 한 번에 변환할 수 있습니다:

pnpm run proto:gen

???? 폴더 구조

변환된 파일은 다음 위치에 생성됩니다:

libs/
└── common/
    └── src/
        └── grpc/
            ├── user.ts
            ├── product.ts
            ├── payment.ts
            ├── order.ts
            └── notification.ts

 

 

3. 변환된 타입 예시

예를 들어 user.proto를 변환하면 다음과 같은 TypeScript 정의가 생성됩니다:

export interface RegisterUserRequest {
  token: string;
  name: string;
  age: number;
  profile: string;
}

export interface ParseBearerTokenResponse {
  sub: string;
}

 

서비스 정의도 자동으로 생성됩니다:

export interface UserServiceClient {
  RegisterUser(request: RegisterUserRequest): Observable<RegisterUserResponse>;
}

export interface UserServiceController {
  RegisterUser(request: RegisterUserRequest): Promise<RegisterUserResponse> | Observable<RegisterUserResponse>;
}

 

 

 

 

 

about author

PHRASE

Level 60  라이트

교육의 목적은 기계를 만드는 것이 아니라, 인간을 만드는데 있다. -루소

댓글 ( 0)

댓글 남기기

작성