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>;
}













댓글 ( 0)
댓글 남기기