[NestJS] ENV 설정하기

Hannah·2023년 4월 14일
0

nestjs

목록 보기
9/9
post-thumbnail

! 읽기 전
이 시리즈에 있는 모든 글은 블로그 지향 기반 개발 & 공식 문서 기반으로 작성되었습니다 내용은 정확하지 않을 수도 있으며, 100% 신뢰하지 마시길 바랍니다


ENV 파일 세팅하기

1. 패키지 다운로드

pnpm install @nest/config cross-env

2. 설정 적용

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: `.${process.env.NODE_ENV}.env`,
    })
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}
  • 옵션
    • envFilePath
      • 응용 프로그램에서 env 파일을 찾습니다
      • 경로를 지정하려면 파일경로를 입력합니다
      • 여러개도 설정할 수 있습니다 (envFilePath: ['.env.development.local', '.env.development'],)
    • ignoreEnvFile
      • boolean 타입으로 설정합니다
      • 다른 환경에서 보여질지 안보여질지 설정합니다
    • isGlobal
      • boolean 타입으로 설정합니다
      • 전역으로 설정할지 선택합니다

3. 실행 커멘드 바꾸기 (package.json)

{
	// ...
  "scripts": {
    // ...
    "start:dev": "cross-env NODE_ENV=local nest start --watch",
    "start:prod": "cross-env NODE_ENV=dev node dist/main",
		// ...
  },
  "dependencies": {
		// ...
  },
  "devDependencies": {
    // ...
}

4. env 파일 설정

.local.env (root 하위에 위치합니다)

MY_NAME=hannahLocal

.dev.env (root 하위에 위치합니다)

MY_NAME=hannahDev

5. 눈으로 확인해보기

controller.ts

@Controller('app')
export class AppController {

  @Get('/env')
  getHello(): string {
    return process.env.NODE_ENV;
  }

	@Get('/name')
	getName(): string {
		return process.env.MY_NAME;
	}

}

실행

pnpm start:dev
// or
pnpm start:prod

확인해보면 각각의 프로필과 이름이 나옵니다

TypeORM - ENV 설정하기

사실 별거 없다…

app.module.ts

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: `.${process.env.NODE_ENV}.env`,
      ignoreEnvFile: false,
    }),
    TypeOrmModule.forRoot({
      type: 'mariadb',
      host: process.env.DATABASE_HOST,
      port: parseInt(process.env.DATABASE_PORT),
      username: process.env.USERNAME,
      password: process.env.PASSWORD,
      database: process.env.DATABASE,
      logging: process.env.LOGGING === 'true',
      entities: [process.env.ENTITIES],
      synchronize: process.env.SYNCHRONIZE === 'true',
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

이렇게만 설정해주면 되는데… 왜 외부 파일로 설정한거는 로딩을 못하는지 모르겠다. 런타임에 실행되서 그런건가?? 이해할 수 없다ㅏ…

(아는 분… 답변 주세요…ㅠㅜ)

profile
backend developer

0개의 댓글