개발/NestJs

3. 외부환경파일

희묭 2023. 10. 20. 11:46

3. 외부환경파일


1) 설치

  • @nestjs/config : 설정 파일을 외부에서 가져오기 위한 nestjs에서 제공되는 모듈
  • cross-env : os에 종속되지 않고, 플랫폼 표준화를 하기위해 필요한 라이브러리
  • joi : 형식에 대한 유효성 검사

아래와같이 설치한다

yarn add @nestjs/config 
yarn add cross-env 
yarn add joi

2) cross-env로 환경변수 주입

package.json에 cross-env NODE_ENV=실행환경 추가

"start:dev": "cross-env NODE_ENV=dev nest start --watch",
"start:prod": "cross-env NODE_ENV=prod node dist/main",

3) @nestjs/config로 환경변수 호출

app.module.ts 에 config모듈을 import
validationSchema 를 통해 문법을 검사

import { ConfigModule } from '@nestjs/config';
import * as Joi from 'joi';
imports: [
	ConfigModule.forRoot({
		isGlobal: true,
		envFilePath: process.env.NODE_ENV === 'dev' ? '.env.dev' : '.env.test',
		ignoreEnvFile: process.env.NODE_ENV === 'prod',
		validationSchema: Joi.object({
			NODE_ENV: Joi.string().valid('dev', 'prod').required(),
			DB_HOST: Joi.string().required(),
			DB_PORT: Joi.string().required(),
			DB_USERNAME: Joi.string().required(),
			DB_PASSWORD: Joi.string().required(),
			DB_SID: Joi.string().required(),
		}),
    }),
]

최상위 디렉토리에 .env.dev 파일생성

DB_HOST=IP
DB_PORT=포트
DB_USERNAME=계정
DB_PASSWORD=비밀번호
DB_SID=sid

4) 생성한 환경설정 적용

예제로 데이터베이스 설정 항목들을 외부환경설정에거 가져옴

TypeOrmModule.forRoot({
	type: 'oracle',

	host: process.env.DB_HOST,
	port: +process.env.DB_PORT,
	username: process.env.DB_USERNAME,
	password: process.env.DB_PASSWORD,
	sid: process.env.DB_SID,
	
	entities: [cm_dsplist_act, CtCtlproc, AiFlashcd],
	synchronize: false,
	// logging: true,
})