Node.js

[NodeJS] express에서 mysql 사용하기

SongMinu 2022. 3. 9. 18:21
728x90

뭐든 처음 베이스 세팅 과정이 어려운 것 같다.

회사에서 mysql을 버리고 elasticsearch를 사용한 지 몇 년 된 것 같은데

엘라스틱 쿼리에 익숙해지면서 mysql을 완전 잊어버린 것 같고, node로 mysql을 다뤄본 적이 없어 한 번 해보고 싶어서 해봤다.

mysql은 맥북에 셋팅 했다.

참고 블로그 : https://twinparadox.tistory.com/619, https://tlo-developer.tistory.com/293)

그리고 connection pool 방식으로 진행하기로 했다.

먼저 mysql.js 라는 모듈용 파일을 생성

const mysql = require('mysql');

const {
  MYSQL_HOST,
  MYSQL_USER,
  MYSQL_PW,
  MYSQL_DB,
} = process.env;

module.exports = mysql.createPool({
  host: MYSQL_HOST,
  user: MYSQL_USER,
  password: MYSQL_PW,
  database: MYSQL_DB,
  connectTimeout: 5000,
  connectionLimit: 30 //default 10
})

이렇게 하면 사용 준비는 끝이다.

확인 과정에서 엄청 삽질한 부분이 있는데, 

엘라스틱서치 클라이언트를 만들 때 host에 protocol://ipaddress:port 이렇게 만드는 게 습관이 들어서 mysql에서도 똑같이 하다 안됐었다.

당연히 맞는 건 줄 알고 다른 곳에서 원인을 찾느라 오랜 시간 삽질을 했다...

ipaddress만 입력하면 된다.

난 내 맥북 자체에서 하는거라 localhost만 입력했다.

 

준비는 끝났고 이제 확인을 위해 테이블을 생성하는 소스.

const express = require('express');
const router = express.Router();
const mysql = require('../../mysql');
router.post('/user_table', async (req, res) => {
  console.info('/api/mysql/make/user_table');
  let rt = {
    ok: false,
    msg: '',
    result: null
  }
  try {
    const sql = `CREATE1 TABLE tb_user (
      user_id varchar(255),
      user_nm varchar(255),
      user_pw varchar(255),
      user_addr varchar(255),
      user_mk_dt datetime,
      user_upd_dt datetime,
      is_use tinyint(1)
      )`;
    mysql.getConnection((err, connection) => {
      if (err) {
        console.error('connection Error : ', err);
        rt.msg = 'connection Error';
        rt.result = err;
        res.send(rt);
      } else {
        connection.query(sql, (err, rs, fields) => {
          if (err) {
            console.error('query Error : ', err);
            rt.msg = 'query Error';
            rt.result = err;
            res.send(rt);
          } else {
            console.log('result : ', rs);
            rt.ok = true;
            rt.msg = 'success!!';
            rt.result = rs;
            res.send(rt);
          }
        })
        connection.release();
      }
    });
  } catch (err) {
    console.error("makeTable/user_table Error!!");
    console.error(err);
    rt.msg = 'user_table Error';
    rt.result = err.message;
    res.send(rt);
  }
  // res.send(rt);
})

module.exports = router;

api요청을 받으면 테이블을 생성하는 로직이다.

정상적으로 처리된 결과

일단 소스를 보다시피 callback 방식이라 보기 좀 좋지 않게 느껴진다.

async/await을 사용해보려고 했더니 안되길래 한 번 찾아보니, 사용하기 위해선 mysql2를 설치해야 한다고 한다.

조만간 설치해서 다시 수정해볼 생각이다.

반응형