[NODE 강의] dotenv & Sequelize?

2021. 3. 9. 00:06Dev/Node

반응형

[클립명]

1. Sequelize란

2. dotenv 설정

3. Database 생성

dotenv 설정

프로젝트를 진행하다보면 데이터베이스 접속정보, 소셜로그인용 계정정보, 외부 API키값 등 모든 소스에서 공통으로 사용해야 하는 각종 설정값들이 있다. 이런 환경변수 값들을 파일로 저장하여 사용할 수 있게 해주는 것이 dotenv 패키지이다.

✔중요 정보가 들어 있으므로, 보안을 위해서 git/svn 같은 곳에 버전관리 대상 파일에서 제외 (ignore 처리 필요) 

 

1. dotenv 설치

npm install 명령어를 이용하여 패키지를 설치한다.

//dotenv 패키지 설치
$ npm install dotenv

2. .env 파일 생성

dotenv 패키지는 기본적으로 현재 경로의 .env 파일에서 환경변수를 읽기 때문에, 프로젝트 root 경로에 .env 파일을 생성해준다.

생성된 파일안에 데이터베이스 접속을 위한 환경변수를 테스트용으로 적어보자.

DATABASE = "데이터베이스명"
DB_HOST = "호스트명"
DB_USER = "사용자ID"
DB_PASS = "비밀번호"

이렇게 env 파일에 정의한 값들은 아래와 같은 방법으로 사용할 수 있다.

//dotenv 모듈 임포트 및 config 함수 호출
require('dotenv').config();

console.log(process.env.DATABASE);

만약, 환경변수를 .env 파일이 아니라 다른 파일에 정의해두었다면, config 함수에 파일의 경로를 전달하면 된다.

require("dotenv").config({ path: "/config/.env.local" })

3. env 파일 분리

개발을 하다보면 여러 개의 개발환경이 존재하게 되는데, 크게는 3개로 구분할 수 있다.

① local : 개발자의 노트북

② development : 개발서버

③ production : 운영서버

이런 개발환경에 따라 데이터베이스의 접속정보도 다르고, 기타 여러 가지 설정값들이 달라질 수 있다.

각 개발환경에 소스를 배포할때마다 해당 설정값들은 매번 바꿔주는 것은 귀찮은 일이다.

따라서 개발환경에 맞도록 env 파일을 분리하여 설정해두고, 각 환경에 따라 해당 env 파일을 로드하여 사용하면 좋다.

 

이 때 NODE_ENV값을 이용하여 현재의 개발환경을 설정할 수 있다. 각 운영체제에 따라 방법은 아래와 같다.

//WINDOW cmd 
$ SET NODE_ENV="production"

//WINDOW Powershell
$ $env:NODE_ENV="production"

//Linux 환경
$ export NODE_ENV="production"    또는
$ echo $NODE_ENV="production"

이렇게 NODE_ENV 값을 설정한 후, 미리 분리해뒀던 .env 파일의 경로를 분기문 처리한 후, dotenv 설정시 매개변수로 전달하면 된다.

switch(process.env.NODE_ENV){
    case 'local':
        envFilePath = `${__dirname}/.env.local`;
        break;
    case 'development':
        envFilePath = `${__dirname}/.env.dev`;
        break;
    case 'production':
        envFilePath = `${__dirname}/.env.prod`;   
        break;
    default:
        envFilePath = '';
}
//env 파일의 경로를 전달하여 dotenv 설정
require('dotenv').config({path : envFilePath});

 

Sequelize란?

이제부터는 node.js에서 데이터베이스에 접속하여 CRUD작업을 하는 부분이 본격적으로 시작한다.

우선 Sequelize에 대해 알아보자.

 

Sequelize란?

Sequelize 공식 사이트는 아래와 같이 정의를 하고 있다.

Sequelize는 Postgres, MySQL, MariaDB, SQLite 및 Microsoft SQL Server를위한 약속 기반 Node.js ORM입니다. 견고한 트랜잭션 지원, 관계, eager 및 lazy로드, 읽기 복제 등을 제공합니다.

※ ORM? - 데이터베이스의 테이블과 객체를 자동으로 연결(매핑)해주는 것을 말한다. 데이터베이스에서는 테이블이라는 개념을 사용하고, 객체지향프로그래밍에서는 객체라는 개념을 사용함으로 인해 서로 간의 불일치가 발생하는데, 이것을 자동으로 연결해주는 것을 말하는 것이다. (ex) JPA, hibernate

반응형