NestJS 기초 (7) 환경 변수 관리하기

2022. 10. 6. 18:36·개발/NestJS

애플리케이션은 보통 서로 다른 환경에서 작동하며, 환경에 따라 다른 설정을 사용합니다. 예를 들어, 개발자의 로컬 환경과 개발된 기능을 사용자에게 배포하기 전에 테스트하는 스테이지 환경, 마지막으로 실제 운용하는 프로덕션 환경이 있을 것입니다. 각 환경에 따라 데이터베이스를 포함한 다른 설정이 사용될 수 있습니다. 이를 관리하는 좋은 방법은 설정 변수를 환경에 저장하는 것입니다.

 

Node.js 애플리케이션에서는 보통 .env 파일을 사용합니다. 이는 키-값 페어로 구성되며 각 키는 해당 환경의 특정 값을 나타냅니다. 서로 다른 환경에서 앱을 실행하려면 해당하는 .env 파일로 변경하면 됩니다. 예를 들면, .dev.env, .stage.env, .production.env가 될 수 있을 것입니다.

 

Nest에서 사용되는 가장 좋은 방법은 ConfigModule을 사용하여 적절한 .env 파일을 로드하는 것입니다. 다음과 같은 명령어를 통해 이를 설치할 수 있습니다.

$ npm i --save @nestjs/config

환경 변수 설정하기

패키지 설치가 완료됐다면 ConfigModule을 불러올 수 있습니다. 보통 이를 루트 AppModule로 불러온다음 .forRoot() 정적 메소드를 사용하여 제어합니다. 이를 통해 환경 변수 키/값 페어가 파싱되어 resolved됩니다.

// app.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot(),
    TypeOrmModule.forRoot({
    type: 'mysql',
    host: process.env.host,
    port : Number(process.env.DB_PORT),
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    entities: [User],
    synchronize: true,
  })],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

위 코드는 프로젝트의 루트 디렉토리에서 .env를 불러오며 환경 변수를 process.env에 할당합니다.

.env 파일은 다음과 같이 구성할 수 있습니다.

// .env

DB_HOST = '127.0.0.1'
DB_PORT = 3306
DB_USERNAME = 'root'
DB_PASSWORD = 'password'
DB_DATABASE = 'database'

.env 파일에는 시크릿 키와 같이 민감한 정보가 함께 저장되는 경우가 많으므로 이를 .gitignore 파일에 추가해줘야 합니다.

커스텀 환경 변수 경로 설정

기본적으로 패키지는 .env 애플리케이션의 루트 디렉토리를 탐색합니다. 다른 환경 변수 파일 경로를 설정하려면 다음과 같이 envFilePath 를 사용할 수 있습니다.

ConfigModule.forRoot({
    envFilePath: '.development.env',
});

또한 여러 .env 파일의 경로들을 설정할 수도 있습니다. 이를 동적으로 구성하는 자세한 방법은 여기를 참조해보시기 바랍니다.

ConfigModule.forRoot({
  envFilePath: ['.env.development.local', '.env.development'],
});

글로벌 모드

ConfigModule을 다른 모듈에서도 사용하고자 원한다면 이를 임포트해야 할 것입니다. 또는 다음과 같이 글로벌 모듈로 설정하여 임포트 없이 사용할 수 있습니다.

ConfigModule.forRoot({
    isGlobal: true,
})

참고 자료

  • https://docs.nestjs.com/techniques/configuration

'개발 > NestJS' 카테고리의 다른 글

NestJS 기초 (8) 미들웨어  (0) 2022.10.07
NestJS 기초 (6) 모듈  (0) 2022.10.04
NestJS 기초 (5) 프로바이더  (0) 2022.10.04
'개발/NestJS' 카테고리의 다른 글
  • NestJS 기초 (9) 예외 처리
  • NestJS 기초 (8) 미들웨어
  • NestJS 기초 (6) 모듈
  • NestJS 기초 (5) 프로바이더
휘Hwi
휘Hwi
여행, 사진, 개발, 책 이야기를 기록하는 여행자 휘의 블로그 𓂍
Klook.com
  • 휘Hwi
    휘: 끝나지 않은 이야기
    휘Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 기록
        • 일상 에세이
        • 인사이트
        • 투자와 재테크
        • 코인 이야기
        • 아카이빙
        • 집무실 레터
        • 사랑에 대하여
        • 번역 이야기(完)
        • 프리랜서 일지(完)
      • 여행
        • 🌎 세계 여행기 S1 (完)
        • 🌊 삼삼한 여행기 (完)
        • 🚶 온더로드
        • 🇯🇵 일본
        • 🏝️ 발리
        • 🇻🇳 베트남
        • 🇱🇰 스리랑카
        • 🇮🇳 인도
        • 🇹🇭 태국
        • 🇸🇬 싱가포르
        • 🇦🇺 호주
        • 🇭🇰 홍콩
        • 🇰🇷 한국
        • 🍚 여행자의 한 끼
        • ℹ️ 여행 정보
      • 사진
        • 사진가
        • 사진 이론과 생각
        • 사진 관련 정보
      • 영상
        • 파이널컷 모션 공부
        • 고프로 GoPro
        • 영상 관련 정보
      • 책
        • 책 읽고 쓰기
      • 개발
        • 티스토리
        • Internet
        • HTML
        • CSS
        • JavaScript
        • Typescript
        • React
        • Node.js
        • Express
        • NestJS
        • Python
        • Django
        • MySQL
        • MongoDB
        • AWS
        • Deployment
        • Terminal
        • Git
        • Glossaries
        • Articles
        • Projects
        • TIL;
      • 미분류
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
휘Hwi
NestJS 기초 (7) 환경 변수 관리하기
상단으로

티스토리툴바