JavaScript/Node JS

Express JS에서 MySQL 연결 시 dotenv 사용하기

한땀코딩 2020. 9. 19. 22:05

최근 express를 이용해서 클라우드 서버에 올려둔 MySQL DB와 연결을 시도하던 중, 여러 튜토리얼에서 .env를 활용하여 진행하는 것을 발견하게 되었습니다. 지인을 통해서도 한번 들어보긴 했으나, express를 활용해서 백엔드를 직접 구성해본 경험은 없어서 어떤 용도의 것인지 알아보았습니다. 쉽게 생각하면 민감하고 예민한 정보를 은닉해주는 고마운 친구 정도로 요약이 될 것 같습니다.

민감한 정보란

민감하다, 다른 말로는 타인에게 공개되면 위험한 정보입니다. 단순 데이터일 수도 있겠지만, 만약 계정과 비밀번호 등을 알게 된다면 내가 돈을 내고 쓰는 클라우드 서버에 멋대로 접근할 수도 있게 되는 것이죠. 그래서 github과 같은 공개적인 곳에는 이런 정보가 올라가는 것을 막아야 합니다.

예를 들어 express서버와 MySQL을 연동하는 과정에선 이런 코드가 필요합니다.

const mysql = require('mysql2');

const connectionPool = mysql.createPool({
  host: 'localhost',
  user: 'USERID',
  password: 'PASSWORD',
  port: 3306,
  database: 'DB',
  insecureAuth: true,
});

지금은 임시로 적어두었습니다만, 원래라면 MySQL 데이터베이스에 접근하기 위한 IP 주소부터 접근권한이 있는계정과 비밀번호까지 적어주어야 합니다. 하지만 깃헙에 올릴 때마다 매번 변경해서 적어줄 수 없기 때문에 등장하는 것이 바로 dotenv입니다. 저런 민감한 정보를 변수의 형태로 바꾸어두고, 그 변수에 담길 값을 .env 파일에 명시해주면 됩니다.

HOW TO USE

먼저 루트 디렉토리에 .env 라는 이름의 파일을 하나 생성하고 필요한 정보를 적습니다. 사용할 변수명과 그 값을 아래처럼 적으면 됩니다.

DB_HOST="localhost"
DB_USER="your_id"
DB_PW="1234"
DB_PORT=3306
DB_NAME="your_db"

이후엔 MySQL 커넥션을 생성하던 파일에서 .env를 불러옵니다. .env에 명시된 값들은 process.env. 뒤에 변수명을 붙여 불러오면 됩니다.

require('dotenv').config();

const mysql = require('mysql2');

const connectionPool = mysql.createPool({
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PW,
  port: process.env.DB_PORT,
  database: process.env.DB_NAME,
  insecureAuth: true,
});

이 작업까지 마치고 중요한 것은, 반드시 .gitignore파일에 .env를 포함해야 한다는 점입니다. 정보를 타인에게 노출되는 것을 방지하기 위함인데, 깃을 통해 .env까지 고스란히 올라가버리면 아무 의미가 없기 때문입니다.

배포 관련

아무래도 깃헙에 올라가지 않기 때문에, 클라우드 서버에서 배포하기 위해선 뭔가 특별한 방식이 있나 고민을 했는데, 별다른 방법은 없고 클라우드로 작성한 .env 파일을 보내거나, 클라우드에서 직접 .env 파일을 만들어서 내용을 넣어주면 됩니다. ssh 통신을 하고 있다면 scp로 파일을 이동하면 됩니다.

깃헙과 공식 문서

motdotla/dotenv