NestJS 설정(config)

바그다드·2023년 11월 26일
0
post-thumbnail

개발을 진행하다보면 db나 api와 관련해서 예민한 정보들이 하드코딩되면 다른 사람들에게 노출될 수 있는 위험이 있다.
뿐만 아니라 개발이나 운영 환경에 따라 설정값이 바뀔 수 있다. 따라서 이런 설정값들은 별도의 설정 파일로 구분해 관리해줘야 한다.

모듈 설치

윈도우에서는 기본적으로 환경변수를 지원하지 않아 모듈을 설치해야함

// node 윈도우 환경변수 모듈
npm install -g win-node-env
// config 모듈
npm install config --save

설정 파일 생성

루트 디렉토리에 config파일 생성

  • default
    운영환경에 관계 없이 공통으로 쓰이는 설정값이 들어간다.
server:
  port: 3000

db:
  type: 'postgres'
  port: 5432
  database: 'board-app'

jwt:
  expiresIn: 3600
  • development
    개발환경에 필요한 설정값이 들어간다.
db:
  host: 'localhost'
  username: 'postgres'
  password: 'password'
  synchronize: true

jwt:
  secret: 'secret'
  • production
    운영환경에 필요한 설정값이 들어간다.
db:
  synchronize: false

설정값 적용

그럼 이 설정값들을 어떻게 활용하는지 예시를 확인해보자.

import { TypeOrmModuleOptions } from "@nestjs/typeorm";
import * as config from 'config'; // 설정 파일 import

// 설정파일에서 db키값만 가져옴
const dbConfig = config.get('db');

export const typeORMConfig: TypeOrmModuleOptions ={
    type: dbConfig.type,
    host: process.env.RDS_HOSTNAME || dbConfig.host,
    port: process.env.RDS_PORT|| dbConfig.port,
    username: process.env.RDS_USERNAME || dbConfig.username,
    password: process.env.RDS_PASSWORD || dbConfig.password,
    database: process.env.RDS_DB_NAME || dbConfig.database,
    entities: [__dirname + '/../**/*.entity.{js,ts}'], // 엔티티 등록
    synchronize: dbConfig.synchronize
}
  • 'config'로부터 값을 import 받아 get메서드로 db관련 정보를 가져와 기존에 하드코딩 되어 있던 부분에 넣어줬다.
  • process.env.RDS_HOSTNAME || dbConfig.host,
    여기서 ||는 처음 값이 없다면 두번째 값이 들어간다는 뜻인데,
    process.env.RDS_HOSTNAME에는 AWS의 환경변수 같은 값들이 들어간다.
profile
꾸준히 하자!

0개의 댓글