728x90

sequelize 뿐 아니라, 데이터베이스를 관리하거나 기타 시스템을 구축할 때, 패스워드와 같이 유출되어서는 안되는 정보를 다루어야 하는 경우가 있다.
이런 경우는 바로 코드에 작성해서 git에 올리면 매우 위험하므로,
별도로 환경 설정 파일인 .env를 만들어서 여기에 저장해두고, 이 환경설정 파일을 gitignore에 추가하여, git commit 되지 않도록 막아둔다.

dotenv 모듈 사용하기

바로 이런 환경 변수 파일을 설정하고 사용하기 위해 필요한 node의 모듈이 dotenv이다.
우선 npm install dotenv --save-dev 로 해당 모듈을 설치하는 것은 간단하다!
그리고 require('dotenv).config() 로 모듈을 불러와서 환경 설정 파일을 불러오면 되는 것 까지.
이론적으론 이해가 되는데 실제로 사용하려고 하니까 너무 헷갈렸다.

현재 프로젝트를 위해 데이터베이스를 셋팅 중이었고, sequelize를 통해 데이터 베이스를 다루고자 했던 나는, sequelize를 설치하며 다운 받아진 config.json 파일을 통해 password나 host 등등을 관리하는 것은 알았다.
그러나 바로 이 파일에 패스워드를 입력하는 것은 불가능!
어떻게 환경 변수 파일을 만들어서 패스워드를 관리하는 지에 대해서 공부했고, 계속해서 사용될 기능이라 정리해두고자 했다.

sequelize에서 환경변수파일 설정하고 사용하기

우선 sequelize의 공식문서에 따라, 해당 모듈을 설치하고, 실행하면
config 폴더와 config.json 파일과 함께 기본적인 model과 migration 폴더들이 생성된다.

config.json 수정하기

해당 파일이 우리가 데이터베이스를 사용하는데 필요한 정보들을 저장해두는 곳이다.
하지만 json 파일은 모듈으르 불러오고 사용하는 것이 불가능하다.
따라서, dotenv 모듈을 불러와서 사용하려면 해당 파일을 config.js로 바꾸고, 내부를 수정해야 한다.

기존 config.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
  "development": {
    "username""root",
    "password"null,
    "database""database_development",
    "host""127.0.0.1",
    "dialect""mysql"
  },
  "test": {
    "username""root",
    "password"null,
    "database""database_test",
    "host""127.0.0.1",
    "dialect""mysql"
  },
  "production": {
    "username""root",
    "password"null,
    "database""database_production",
    "host""127.0.0.1",
    "dialect""mysql"
  }
}
cs

 

config.js로 변경 후, 파일 재작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
require('dotenv').config();
const env = process.env;
 
const development = {
  username: env.MYSQL_USERNAME,
  //env.MYSQL_USERNAME은 불러오고자 하는 데이터의 키값이므로 자유롭게 이름설정이 가능하다.
  password: env.MYSQL_PASSWORD,
  database: env.MYSQL_DATABASE,
  host: env.MYSQL_HOST,
  dialect: "mysql",
  //port: env.MYSQL_PORT
};
 
const production = {
  username: env.MYSQL_USERNAME,
  password: env.MYSQL_PASSWORD,
  database: env.MYSQL_DATABASE,
  host: env.MYSQL_HOST,
  dialect: "mysql",
  //port: env.MYSQL_PORT
};
 
const test = {
  username: env.MYSQL_USERNAME,
  password: env.MYSQL_PASSWORD,
  database: env.MYSQL_DATABASE_TEST,
  host: env.MYSQL_HOST,
  dialect: "mysql",
  //port: env.MYSQL_PORT
};
 
module.exports = { development, production, test };
cs

model/index.js 파일 수정하기

model/index.js는 서버에서 DB를 실행했을 때, 어떤 경로를 통해 어떤 파일을 불러와서 실행하는지가 기재되어있다.
우리는 dotenv 모듈을 사용하기 위해, config폴더 내의 파일을 변경했으므로, 당연히 model/index.js 도 수정해주어야 한다.

 

변경 전

1
const config = require(__dirname + '/../config/config.json')[env];
cs

 

변경 후

1
const config= require(__dirname + '/../config/config.js')[env]
cs

 

간단하다! 결국 불러오는 파일명만 바꿔주면 되는것!

env 파일 만들어주기

나는 초반에 이것도 헷갈렸다. root폴더에 만들어주라길래 처음에는 가장 초반(그러니까 server폴더보다도 더 상위에) 위치에 만들어 주었다. 하지만 실행이 되지 않았다. 결국 server폴더 내에서, 즉 해당 서버가 실행돼서 DB를 불러오는 그 위치가 env파일을 만들어줘야할
root 폴더인 것이다.

 

.env 파일

1
2
3
4
MYSQL_USERNAME= (db 사용자이름)
MYSQL_PASSWORD= (비번)
MYSQL_DATABASE= (사용하고자 하는 데이터베이스 이름)
MYSQL_HOST=127.0.0.1
cs

 

.env 파일은 꼭 gitignore에 추가 해야하며,
해당 파일 내에서 값들을 저장하는 각 키값들은 (MYSQL_USERNAME 같은거) 원하는 대로 임의 설정 가능하다!

 

728x90

+ Recent posts