개발이야기/Node&Nest

Nest.js에서 env로 외부 환경요소 주입하기

Roslyn 2024. 1. 19. 10:40
반응형

일단 Nest.js에서 env를 사용하기 위해서 dotenv 라이브러리를 다음과 같이 설치해줍니다.

npm install dotenv

 

만약 클러스터를 이용하고 있다면, 기존 포스트를 참고해 줍니다.

https://roslyndev.tistory.com/33

 

Nest.js 에서 cluster로 요청 격리하기

기본적으로 Node.js를 계승한 Nest.js는 Node.js와 마찬가지로 요청이 격리되지 않는 이슈가 있다. (싱글스레드) 다른 Asp.net, Spring, PHP 등보다 안정성이 떨어지는 건 바로 이 부분인데, 요청이 격리되는

roslyndev.tistory.com

 

이제 .env파일을 만들어 줍니다.

 

각각 파일에 내가 필요로 하는 환경 요소들을 동일하게 넣어줍니다.

다음 내용은 예시니까, 참고만 하세요.

NODE_ENV=development
DATABASE_HOST=localhost
DATABASE_PORT=1433
DATABASE_USERNAME=user_dev
DATABASE_PASSWORD=password_dev
DATABASE_NAME=mydatabase_dev
DATABASE_SYNC=false

 

이제 TypeORM에서 분리된 환경을 적용해 볼까요?

app.module.ts 파일을 열어서 다음과 같이 수정해 줍니다.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './entities';
import { UserService } from './user/user.service';
import { UserController } from './user/user.controller';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      logging:false,
      type: 'mssql',
      host: String(process.env.DATABASE_HOST),
      port: Number(process.env.DATABASE_PORT),
      username: String(process.env.DATABASE_USERNAME),
      password: String(process.env.DATABASE_PASSWORD),
      database: String(process.env.DATABASE_NAME),
      entities: [User],
      synchronize: Boolean(process.env.DATABASE_SYNC),
      extra: {
        options: {
          encrypt: false,
          TrustServerCertificate: true,
        },
      },
    }),
    TypeOrmModule.forFeature([User]),
  ],
  controllers: [AppController, UserController],
  providers: [AppService, UserService],
})
export class AppModule {}

 

이제 npm run start 명령으로 swagger가 잘 동작하는지 확인해 줍니다.

 

 

네, 정상동작이 확인되었습니다.

 

만약 배포환경에서 다른 환경을 원한다면, .env.production 파일을 만들어서 동일한 조건에서 배포환경 값을 입력해 두고, 빌드를 하기 전에, .env.production 파일을 .env 파일로 변경하여 적용하도록 합니다.

 

반응형