1. gRPC 설치 (2025년)
1. 필수 패키지 설치
pnpm install @nestjs/microservices @grpc/grpc-js @grpc/proto-loader
@nestjs/microservices → NestJS에서 gRPC 클라이언트/서버 기능 제공
@grpc/grpc-js → Node.js 공식 gRPC 구현체 (네이티브 모듈 필요 없음)
@grpc/proto-loader → .proto 파일 로딩
2. proto 파일 생성
예: proto/hero.proto
syntax = "proto3";
package hero;
service HeroService {
rpc FindOne (HeroById) returns (Hero) {}
}
message HeroById {
int32 id = 1;
}
message Hero {
int32 id = 1;
string name = 2;
}
3. NestJS 서버 설정 (gRPC Provider)
main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { MicroserviceOptions, Transport } from '@nestjs/microservices';
import { join } from 'path';
async function bootstrap() {
const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
transport: Transport.GRPC,
options: {
package: 'hero',
protoPath: join(__dirname, '../proto/hero.proto'),
},
});
await app.listen();
}
bootstrap();
4. 서비스 구현
hero.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class HeroService {
findOne(data: { id: number }) {
return { id: data.id, name: 'Superman' };
}
}
5. 모듈 등록
import { Module } from '@nestjs/common';
import { HeroService } from './hero.service';
@Module({
providers: [HeroService],
})
export class AppModule {}
6. 클라이언트에서 호출
NestJS에서도 클라이언트를 만들 수 있고, 외부 Node.js/Go/Python 클라이언트에서도 호출할 수 있습니다.
NestJS 클라이언트 예제:
import { ClientGrpc, Client, Transport } from '@nestjs/microservices';
import { join } from 'path';
import { Injectable, OnModuleInit } from '@nestjs/common';
interface HeroService {
findOne(data: { id: number }): any;
}
@Injectable()
export class HeroClient implements OnModuleInit {
@Client({
transport: Transport.GRPC,
options: {
package: 'hero',
protoPath: join(__dirname, '../proto/hero.proto'),
},
})
private client: ClientGrpc;
private heroService: HeroService;
onModuleInit() {
this.heroService = this.client.getService<HeroService>('HeroService');
}
getHero() {
return this.heroService.findOne({ id: 1 });
}
}
✅ 정리하면:
NestJS에서는 npm으로 설치 (@nestjs/microservices, @grpc/grpc-js, @grpc/proto-loader)
proto 정의 후 NestJS Microservice Transport=GRPC 설정
서비스 구현 후 클라이언트에서 호출 가능
2. gRPC 설치 방식 변화 (운영체제별 → 언어별)
1. 초기 (2015~2019)
**Node.js gRPC 패키지(grpc)**는 C++ 기반 네이티브 애드온을 사용.
결과적으로 설치 시 OS마다 빌드 툴이 필요했음:
Windows → Visual Studio Build Tools, Python2, node-gyp 필수
Linux → gcc, make
macOS → Xcode Command Line Tools
설치 중 "precompiled binary not found" 오류가 자주 발생 → 직접 빌드 필요.
따라서 gRPC는 운영체제별 설치 가이드가 필수적이었음.
2. 전환기 (2018~2020)
커뮤니티와 구글 내부에서 "운영체제 의존성을 줄이자"는 요구가 커짐.
grpc 패키지는 유지보수 비용이 크고, Node.js 새 버전이 나올 때마다 빌드 호환 문제가 발생.
이에 따라 순수 JavaScript 기반 구현체 개발이 시작됨 → @grpc/grpc-js.
3. 현재 (2020~현재)
@grpc/grpc-js 정식 출시 → Node.js에서 네이티브 빌드 의존성이 사라짐.
설치 방식 변화:
예전: 운영체제별 빌드 툴 준비 → npm install grpc
지금: 단순히 npm install @grpc/grpc-js @grpc/proto-loader
따라서 gRPC 문서도 운영체제별 가이드 → 언어별 가이드로 개편.
Python, Go, .NET 등도 마찬가지로 "언어별 패키지 설치" 중심으로 단순화됨.
4. 정리
변화 시점: 약 2019~2020년 사이
이유: 네이티브 모듈의 OS별 빌드 문제, 유지보수 비용, 설치 오류 다발
결과: 지금은 운영체제 상관없이, 언어별 설치 패키지만 사용하면 됨
3.@grpc/proto-loader vs protoc
1. @grpc/proto-loader
Node.js 런타임에서 .proto 파일을 읽어들이는 라이브러리
실행 시점(runtime)에 .proto → JS 객체로 변환해서 gRPC 서버/클라이언트가 바로 사용 가능
즉, 코드 생성 없이 동적 로딩
NestJS 예제에서 많이 쓰는 방식
import * as protoLoader from '@grpc/proto-loader';
import * as grpc from '@grpc/grpc-js';
const packageDef = protoLoader.loadSync('hero.proto', {});
const proto = grpc.loadPackageDefinition(packageDef);
2. protoc (Protocol Buffers Compiler)
구글에서 제공하는 실행 파일 (C++ 기반 컴파일러)
.proto 파일을 언어별 소스 코드로 사전 컴파일해줌
예: protoc --js_out=... --grpc-web_out=... hero.proto
TypeScript/JavaScript에서는 ts-proto, grpc-tools 같은 플러그인과 같이 쓰기도 함.
즉, 정적 코드 생성 방식
✅차이 정리

NestJS 공식 문서나 예제에서는 보통 @grpc/proto-loader만 설치해서 런타임 로딩을 사용합니다.
✅ 하지만 TypeScript에서 타입 안전성을 높이고 싶다면 → protoc + ts-proto 조합을 많이 씁니다.
4.Windows에서 protoc 설치 방법 (2025년 기준)
Protocol Buffers Compiler(protoc)는 .proto 파일을 각 언어별 코드로 변환해주는 도구입니다. 윈도우 환경에서 설치하는 방법은 다음과 같습니다.
1. 최신 릴리스 다운로드
GitHub의 공식 저장소로 이동: protocolbuffers/protobuf Releases
최신 버전의 protoc-<버전>-win64.zip 파일을 다운로드합니다.
예: protoc-27.3-win64.zip
2. 압축 해제
다운로드한 ZIP 파일을 원하는 경로에 압축 해제합니다.
예: C:\tools\protoc
(폴더 안에는 bin, include 디렉토리가 있음)
3. 환경 변수 등록
시작 메뉴 → 환경 변수 편집 검색 → PATH 편집
C:\tools\protoc\bin 경로를 추가
4. 설치 확인
PowerShell 또는 CMD에서 다음 명령 실행:
protoc --version
정상적으로 설치되었다면 예를 들어:
libprotoc 27.3
이 출력됩니다.
5. 사용 예시
예: hero.proto 파일을 JavaScript/TypeScript 코드로 변환
JavaScript 코드 생성
protoc --js_out=import_style=commonjs,binary:./generated --grpc_out=./generated --plugin=protoc-gen-grpc=node_modules/.bin/grpc_tools_node_protoc_plugin hero.proto
TypeScript 코드 생성(ts-proto 플러그인 사용)
protoc --plugin=protoc-gen-ts=node_modules/.bin/protoc-gen-ts --ts_out=./generated hero.proto
6. 요약
protoc = .proto를 코드로 변환하는 컴파일러
윈도우 설치 방법: GitHub 릴리스 ZIP 다운로드 → 압축 해제 → PATH 등록 → protoc --version 확인
NestJS/Node.js에서 타입 안전성을 원한다면 protoc + ts-proto 조합 사용을 권장













댓글 ( 0)
댓글 남기기