Seongwon Lim

[node.js] 보안을 위한 dotenv 설치 및 사용 방법 본문

Node.js

[node.js] 보안을 위한 dotenv 설치 및 사용 방법

limsw 2022. 5. 9. 21:13
반응형

What is dotenv?

Dotenv is a zero-dependency module that loads environment variables from a .env file into process.env. Storing configuration in the environment separate from code is based on The Twelve-Factor App methodology.

직역하면 dotenv는 .env 파일에서 process.env로 환경 변수를 로드하는 제로 종속성 모듈이라고 설명하고 있다.

 

dotenv는 프로젝트를 개발할 때 사용되는 Key값, 데이터베이스 비밀번호 등과 같이 공개적으로 제공하기에 민감한 정보들을 외부로 노출시키지 않도록 도와주는 모듈이다. 해당 모듈을 사용함으로써 오픈소스 사이트에 정보가 노출되지 않도록 도와주며 프로젝트의 보안성을 향상시킬 수 있다.

dotenv 모듈 사용 방법

  • npm install dotenv --save

명령어를 통해 모듈을 설치한다.

.env 파일 구성하기

외부로 노출시키고 싶지 않은 정보를 저장하는 위치는 .env 파일이다. 민감한 정보들을 해다 파일에 저장한 뒤 외부 파일에서 로드하여 사용할 수 있다. 예를 들어 Mysql 접속을 위한 데이터베이스 정보를 구성한다고 가정해보자.

// .env
DATABASE_NAME = "testDatabase1"
DATABASE_PORT = 3306
DATABASE_USERNAME = "root"
DATABSE_PASSWORD = "testDatabase1234"
DATABSE_HOST = "127.0.0.1"

위와 같은 정보가 있을 때 메인 파일에서 해당 변수들에 접근하고 싶은 경우 아래와 같이 코드를 작성하면 된다.

 

필자는 메인 파일을 index.js로 정의했다.

// index.js
require('dotenv').config(); // 해당 코드를 사용하고자 하는 파일에 정의
const mysql = require('mysql');

// mysql connection을 위한 변수
const conn = {
    host: process.env.DATABASE_HOST,
    port: process.env.DATABASE_PORT,
    user: process.env.DATABASE_USERNAME,
    password: process.env.DATABASE_PASSWORD,
    database: process.env.DATABASE_NAME
}

이처럼 구성 한 뒤 만약에 db에 접속하고 싶은 경우 아래와 같이 db를 연결하면 된다.

const db = require('db');
db.connect(conn);

위와 같이 .env 파일의 변수를 사용하고자 하는 파일에 require('dotenv').config() 를 추가하여 사용할 수 있다.
변수를 로드할 때에는 process.env.변수명형태로 로드할 수 있다.

 

하지만 이 상태로 오픈소스에 프로젝트를 업로드 하는 경우 .env파일까지 포함하여 업로드 되는 위험이 있다. 

 

.env파일을 제외하고 오픈소스에 업로드하기 위해서는 .gitignore 파일에 제외하고자 하는 파일을 정의한다.

.gitignore 파일 구성하기

// .gitignore
.env

이렇게 .gitignore 파일에 제외할 파일 이름을 명시하면 깃허브에 프로젝트를 푸시했을 때 명시된 파일(혹은 디렉토리)들이 업로드 되지 않기 때문에 민감한 정보에 대한 보안성을 유지할 수 있다.


출처

Comments