사이드 프로젝트에서 ORM을 sequelize
를 사용하기로 결정했다. 그런데 github에 업로드할 경우 config.json
을 통해 msyql
정보가 업로드 돼버린다. 프로젝트의 DB정보를 노출하지 않기 위해서 config.json
파일 자체를 업로드 하지 않는건가? 라는 생각이 들었지만 sequelize
를 사용한 다른 프로젝트들을 보니 config.json
을 모두 업로드를 했다. 그래서 .env
로 환경변수를 지정하여 mysql
정보를 숨기려고 한다.
.env
내용 추가dotenv 패키지를 설치하지 않았으면 npm i dotenv
로 설치해준다.
root 디렉토리에 .env
파일과 .env.sample
파일을 만들어준다.
본인의 경우 아래와 같이 .env.sample
을 만들고 해당 라인에 맞게 프로젝트 내용을 .env
에 적어넣었다. (.env
의 파일의 key값들은 임의대로 설정 가능하다.)
SEQUELIZE_DIALECT = DATABASE_TYPE //mysql,postgreSQL,mongoDB 등 사용하는 DB종류
SEQUELIZE_HOST = SERVER_IP
SEQUELIZE_USERNAME = DATABASE_ID
SEQUELIZE_DEV_DATABASE = DEV_DATABASE_NAME // 개발용 DB
SEQUELIZE_DEV_PASSWORD = DATABASE_PASSWORD
SEQUELIZE_PROD_DATABASE = PROD_DATABASE_NAM //배포용 DB
SEQUELIZE_PROD_DB_PASSWORD = PROD_DATABASE_PASSWORD
SEQUELIZE_TEST_DATABASE = TEST_DATABASE_NAME //테스트용 DB
SEQUELIZE_TEST_DB_PASSWORD = TEST_DATABASE_PASSWORD
SEQUELIZE_PORT = DATABASE_PORT
config.json
수정sequelize init
으로 생성한 config.json
을 config.js
로 수정하고 아래와 같이 내용을 바꾼다.
기존 config.json
{
"development": {
"username": "root",
"password": "0000",
"database": "lotto_account_book",
"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"
}
}
변경한 config.js
dotenv
를 불러온 후 config()
함수를 통해 .env
파일의 내용을 process.env
객체를 통해 접근할 수 있게 해준다.
require('dotenv').config();
const env = process.env;
const development = {
username: env.SEQUELIZE_USERNAME,
password: env.SEQUELIZED_DEV_PASSWORD,
database: env.SEQUELIZE_DEV_DATABASE,
host: env.SEQUELIZE_HOST,
dialect: env.SEQUELIZE_DIALECT,
port: env.SEQUELIZE_PORT,
};
const production = {
username: env.SEQUELIZE_USERNAME,
password: env.SEQUELIZE_PROD_DB_PASSWORD,
database: env.SEQUELIZE_PROD_DATABASE,
host: env.SEQUELIZE_HOST,
dialect: env.SEQUELIZE_DIALECT,
//port: env.MYSQL_PORT
};
const test = {
username: env.SEQUELIZE_USERNAME,
password: env.SEQUELIZE_TEST_DB_PASSWORD,
database: env.SEQUELIZE_TEST_DATABASE,
host: env.SEQUELIZE_HOST,
dialect: env.SEQUELIZE_DIALECT,
//port: env.MYSQL_PORT
};
module.exports = { development, production, test };
models/index.js
수정위에서 변경했듯이 config
의 확장자 json
에서 js
로 변경해준다.
const config = require(__dirname + '/../config/config.js')[env];
dotenv
패키지를 활용하여 환경 변수를 이용하면 DB정보, 소셜 로그인 토큰, JWT 해시 키 등 보안이 필요한 정보의 노출을 막을 수 있다. 깃헙에 commit할 경우 반드시 .gitingore
에.env
파일을 지정해 업로드 되지 않도록 유의해야 한다.