본문 바로가기

Backend/Node.js

Node.js env 환경변수 관리 (초간단)

참고로 실습환경은 express-generater로 생성한 프로젝트 기준입니다.

다른 프로젝트에서도 동일한 방법으로 적용 가능하나 타이핑하는 내용은 다를 수 있습니다.

 

우선 package.json을 열어주세요.

그리고 package.json에 scripts를 수정해줍니다.

아래 환경 별로 변수를 추가해줄거구요.

  • local: 로컬 환경
  • dev: 개발 환경
  • prod: 운영 환경

초기 package.json scripts

npm start를 터미널에서 입력하면 node 서버가 실행되게 되어있습니다.

 

{
  "scripts": {
    "start": "node ./bin/www"
  }
}

수정한 package.json scripts

npm startnpm run local을 입력하면 local 환경변수가 적용된 node서버가 실행될거구요.

npm run dev는 개발환경, npm run prod는 운영환경이 될겁니다.

 

{
  "scripts": {
    "start": "npm run local",
    "local": "profile=local node ./bin/www",
    "dev": "profile=dev node ./bin/www",
    "prod": "profile=prod node ./bin/www"
  }
}

 

자 이렇게 스크립트를 수정했으면 이걸 어떻게 써먹냐?

전 config.js라는 파일을 만들어줍니다.

그리구 여기에 환경변수들을 관리하면 됩니다.

config.js

process.env 변수 안에는 우리가 package.json 안에 scripts에 작성한 profile의 값을 받아올 수 있어요.

해당 값을 받아와서 아래와 같이 구현하면 실제 비즈니스 로직에선 mongo와 mail 관련된 환경변수들을 사용하면 됩니다.

 

const profile = process.env.profile

module.exports = {
  local: {
    mongo: {
      uri: 'mongodb://localhost:27017/demo',
    },
    mail: {
      address: 'local@mail.com',
      password: 'abc1234!',
    },
  },
  dev: {
    mongo: {
      uri: 'mongodb+srv://demo:demo1234!@dev-mongodb.tistory.com',
    },
    mail: {
      address: 'dev@mail.com',
      password: 'abc1234!',
    },
  },
  prod: {
    mongo: {
      uri: 'mongodb+srv://demo:demo1234!@mongodb.tistory.com',
    },
    mail: {
      address: 'prod@mail.com',
      password: 'abc1234!',
    },
  }
}[profile]

일단 이게 작업은 끝이에요!

 

이제 실제 위의 config를 사용해볼게요.

환경변수를 사용해야하는 대표적인 케이스는 데이터베이스 정보 관리이죠.

그래서 mongodb를 간단하게 연결해보았습니다.

db connection하는 기능을 수행하기 때문에 config에 정의한 변수 중에 mongo만 가져오면 됩니다.

mongo.connection.js

const mongoose = require('mongoose')
const { uri } = require('../config')['mongo']

console.log(`Connecting to mongo database...`)
mongoose.connect(uri, {
  appname: 'Demo Application',
  useNewUrlParser: true,
  useUnifiedTopology: true,
  useFindAndModify: false,
  useCreateIndex: true,
})

const connection = mongoose.connection
connection.on('error', console.error)
connection.once('open', () => {
  console.log(`Connected to mongo database!`)
})

 

메일 발송을 위한 설정 파일도 만들어볼게요.

mail.transport.js

const nodemailer = require('nodemailer')
const { address, password } = require('../config')['mail']

const transport = nodemailer.createTransport({
  service: 'gmail',
  host: 'smtp.gmail.com',
  port: 465,
  secure: true,
  auth: {
    user: address,
    pass: password,
  },
})

module.exports = transport

 

위의 파일을 기반으로 하여 어떻게든 커스텀하셔서 사용하시면 되요!

환경 변수가 점점 너무 많아지면 local,dev,prod 따로 파일을 분리하시는게 보기 편하실거에요.

'Backend > Node.js' 카테고리의 다른 글

Node.js 메일 발송 (nodemailer)  (0) 2021.01.26
Node.js (Express) mongoose 연동  (0) 2020.12.05
Node.js 패스워드 암호화 - bcrypt  (0) 2020.12.05
Node.js Logging 설정 (winston)  (0) 2020.09.04
Node.js exception handler - custom error  (0) 2020.09.04