티스토리 뷰

반응형

📌 NestJS + Kubernetes & 마이크로서비스 배포: 실전 가이드

42. NestJS 환경 구성 및 설정 관리 전략 – Dev, Stage, Prod 환경 분리하기


마이크로서비스 프로젝트가 커질수록 운영 환경 분리는 필수입니다.
로컬 개발(Dev), 스테이징(Stage), 프로덕션(Prod) 환경마다 다른 DB, API, 보안 키 등이 사용되기 때문입니다.
이번 글에서는 NestJS 프로젝트에서 다양한 환경을 체계적으로 분리하고, 보안과 효율성을 높이는 방법을 다룹니다. 🌍


✅ 1. 환경 분리의 필요성

환경 특징

Dev 개발자 개인 환경, mocking 가능
Stage 실제 배포 환경과 동일, QA 테스트용
Prod 실제 사용자 대상, 보안과 성능 최우선

코드베이스는 하나, 환경만 다르게 구성하는 것이 핵심입니다.


✅ 2. NestJS의 환경 설정 기본 방식

NestJS는 @nestjs/config 모듈을 통해 .env 파일 기반 설정을 지원합니다.

📦 설치

npm install @nestjs/config

📂 main.ts

import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: `.env.${process.env.NODE_ENV || 'dev'}`,
    }),
  ],
})

예시: .env.dev, .env.stage, .env.prod

# .env.dev
PORT=3000
DATABASE_URL=postgres://localhost/devdb
JWT_SECRET=dev-secret

✅ 3. 환경 변수 사용 예시

📂 config.service.ts

@Injectable()
export class ConfigService {
  constructor(@Inject(ConfigService) private config: ConfigService) {}

  get databaseUrl(): string {
    return this.config.get<string>('DATABASE_URL');
  }
}

환경에 따라 .env.* 파일을 자동으로 로드하도록 처리


✅ 4. 실행 환경 설정 방법

로컬 개발 시

NODE_ENV=dev nest start

GitHub Actions 또는 Dockerfile 내 환경 주입

ENV NODE_ENV=prod

✅ 5. Kubernetes 환경에서 환경 설정 분리

  • ConfigMap → 일반 설정 (PORT, MODE)
  • Secret → 민감 설정 (JWT_SECRET, DB_PASSWORD)

📂 configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: nestjs-config
data:
  NODE_ENV: "prod"
  PORT: "3000"

📂 secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: nestjs-secret
type: Opaque
data:
  JWT_SECRET: cHJvZF9zZWNyZXQ= # base64 인코딩

📂 deployment.yaml 내 적용

envFrom:
  - configMapRef:
      name: nestjs-config
  - secretRef:
      name: nestjs-secret

✅ 6. 환경 설정 전략 정리

구분 추천 방법

로컬 개발 .env.dev 파일 직접 사용
팀 협업/스테이징 .env.stage + GitHub Secrets or CI 설정
운영 환경 K8s ConfigMap/Secret 연동
민감 정보 절대 Git에 커밋 ❌, secret manager 사용 추천

✅ 결론: 환경 설정은 프로젝트 신뢰성과 직결된다

✅ 모든 환경별 설정을 .env 또는 K8s 리소스로 분리
✅ 민감 정보는 안전하게 보호 (Secret, Vault, GitHub Secret)
✅ @nestjs/config 모듈로 구성하면 유지보수가 쉬움
✅ Dev → Stage → Prod로 무중단 전환도 가능해짐

다음 글에서는 NestJS에서 Observability(가시성) 구현을 위한 구조: 로그, 메트릭, 트레이싱을 통합하는 전략을 다룰 예정입니다. 📊


🔍 다음 글 예고: NestJS Observability 실전 – 로그, 메트릭, 트레이싱 한 번에

📌 다음 편: 43. NestJS Observability 구축 전략


 

NestJS 환경 구성,NestJS 설정 관리,NestJS 환경 변수,NestJS .env 사용법,NestJS ConfigModule,NestJS K8s 설정,NestJS Secret 관리,NestJS 환경 분리 전략,NestJS Dev Stage Prod,NestJS 환경 보안

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함
반응형