Node와 sql 서버 연동하기(My SQL, dotenv)


저번 시간에 설치했던 MySQL Workbench를 켜줍니다.

create database myblog;
use myblog;

create table if not exists category(
  name varchar(255) primary key,
  url varchar(255)
);

create table if not exists post(
  id int primary key auto_increment,
  category varchar(255),
  title varchar(255),
  writtentime datetime,
  body text,
  views int,
  foreign key (category) references category(name)
);

위 쿼리를 실행해 필요한 테이블을 생성해줍니다.

서버를 연결하기 전에 DB서버 설정을 별도의 파일에서 갖고올 수 있도록 아래 명령어를 통해 dotenv모듈을 설치합니다. 이렇게 하면 github같은 저장소에 push를 할 때 config.env파일을 숨기는 방식으로 민감한 정보가 웹에 노출되는 것을 피할 수 있습니다(github에 push할 땐 추가적으로 .gitignore파일을 이용해야 합니다.).

npm install dotenv -S

그 후에 app.js 파일에서 아래 코드를 맨 위에 작성하고 root 디렉토리에 config.env파일을 생성하면 해당 파일에서 설정한 변수들을 process.env 객체를 통해 불러올 수 있습니다.

app.js

const dotenv = require('dotenv');
dotenv.config({path: './config.env'});

config.env

DB_HOST = localhost
DB_NAME = myblog
DB_PWD = password
DB_USER = root

이제 데이터베이스를 웹 서버와 연결해야하니 터미널로 돌아가서 아래와 같은 명령어를 실행해줍니다.

npm install mysql -S

그리고 mysql.js 파일 middleware 폴더 아래에 새로 만들어주고 아래 코드를 입력합니다.

const mysql = require('mysql')

module.exports = function(host, user, password, database){
  let connection = mysql.createPool({
    host     : host,
    user     : user,
    password : password,
    database : database
  });
  return connection
}

그리고 app.js에서 아래 코드를 입력해주면 앞으로는 req객체의 database를 통해 항상 sql 서버에 접속할 수 있게 됩니다.


let mysqlConnection = require('./middleware/mysql')(process.env.DB_HOST, process.env.DB_USER, process.env.DB_PWD, process.env.DB_NAME);

app.use((req, res, next) => {
  req.database = mysqlConnection;
  next();
});

다음에는 pug엔진을 통해 실제 웹사이트를 꾸며 보겠습니다.