sequelize, .env 환경변수 설정

Kyoungchan Cho·2022년 12월 17일
0
post-thumbnail

intro

사이드 프로젝트에서 ORM을 sequelize를 사용하기로 결정했다. 그런데 github에 업로드할 경우 config.json을 통해 msyql 정보가 업로드 돼버린다. 프로젝트의 DB정보를 노출하지 않기 위해서 config.json 파일 자체를 업로드 하지 않는건가? 라는 생각이 들었지만 sequelize를 사용한 다른 프로젝트들을 보니 config.json을 모두 업로드를 했다. 그래서 .env 로 환경변수를 지정하여 mysql정보를 숨기려고 한다.

1 .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

2. config.json 수정

sequelize init으로 생성한 config.jsonconfig.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 };

3. models/index.js 수정

위에서 변경했듯이 config의 확장자 json에서 js로 변경해준다.

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

concluding

dotenv패키지를 활용하여 환경 변수를 이용하면 DB정보, 소셜 로그인 토큰, JWT 해시 키 등 보안이 필요한 정보의 노출을 막을 수 있다. 깃헙에 commit할 경우 반드시 .gitingore.env파일을 지정해 업로드 되지 않도록 유의해야 한다.

profile
https://lying-lettuce-69f.notion.site/KyoungchanCho-Blog-f9f150b9e3be4467a67cf2a21932650d (게시글 자동 비공개 현상으로 일단 노션으로 이동합니다. 소개에서 URL 링크 클릭으로 연결됩니다.)

0개의 댓글