Development/Nest.js
[NestJS] Configuration 환경변수 설정 [@nestjs/config, cross-env, joi]
Tunko
2021. 4. 10. 19:07
설치
터미널에서 Nestjs 에서 제공하는 config 패키지 설치
npm i --save @nestjs/config
환경 변수 파일을 조건에 따라 읽기 위한 패키지 설치
npm i cross-env
환경변수 유효성 검사를 위한 패키지 설치
npm i joi
프로젝트 최상단에 파일 생성
.env.dev
.env.test
package.json 파일 해당라인 수정
- cross-env 패키지를 이용해 환경변수를 할당한뒤 nest start 명령을 실행한다.
// 수정전
"start:dev": "nest start --watch",
"start:prod": "node dist/main",
// 수정후
"start:dev": "cross-env NODE\_ENV=dev nest start --watch",
"start:prod": "cross-env NODE\_ENV=prod node dist/main",
- ignoreEnvFile : 설정은 프로젝트 배포시엔 환경파일 .env 을 넘기지 않도록 하는 설정이다.
- validationSchema : Joi 를 이용해 package.json 에서 설정한 NODE_ENV 에 설정한 환경변수가 유효한지 검사한다. (‘dev’ or ‘prod’) 검사
- Joi 옵션중 하나인 required는 필수요소이다. 누락되면 안됨을 의미함.
- NOED_ENV 는 package.json 에서 명령어로 설정
- DB_HOST, DB_PORT, DB_USERNAME, DB_PASSWORD, DB_NAME 은 .env 파일에 설정되어있다.
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: process.env.NODE_ENV == 'dev' ? '.env.dev' : '.env.test'}),
ignoreEnvFile: process.env.NODE_ENV === 'prod',
validationSchema: Joi.object({
NOED_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_NAME: Joi.string().required(),
}),
]
...
.gitignore 에 추가
.env.dev
.env.test
.env 파일 내용 설정
DB_HOST=localhost
DB_PORT=0000
DB_USERNAME=xxxxx
DB_PASSWORD=xxxxx
DB_NAME=xxxxx
app.module.ts 설정
import * as Joi from 'joi'
TypeOrmModule.forRoot({
type: 'postgres',
host: process.env.DB_HOST,
port: +process.env.DB_PORT,
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
synchronize: true,
logging: true,
entities: [],
}),
반응형