Web dev/Error

Error / mysql connection-Pool DB연결 끊김 timeout

양여리 2022. 5. 7. 23:12
728x90
반응형

express로 서버를 구현하였다. AWS RDS로 디비를 구축하여 mysql로 연결을 하였는데 자꾸 끊김현상이 발생되었다.

mysql은 오랜시간 사용하지 않으면 자동으로 끊기게 된다.

검색해보면 timeout설정을 바꾸라고 하던데 설정을 바꾸지 않고 connection-Pool을 사용하면된다.

커넥션풀은 WAS가 실행되면 DB에 바로연결하지 않고 중간에서 커넥션풀이 커넥션을 빌려주고 반납받아

DB에 연결과부하가 되지 않도록 관리 해준다. 설정으로 커넥션수도 제한할 수 있다.

 

db.js

const dotenv = require('dotenv');
dotenv.config();

const mysql = require("mysql");

const pool = mysql.createPool({
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PSWORD,
    database: process.env.DB_DATABASE,
})
const db = (callback) => {
    pool.getConnection((err,conn) => {
        if(!err){
            console.log("모듈 연결성공")
            callback(conn)
        }else{
            console.log("모듈 연결실패")
            console.log(err);
        }
    });
}

// 처음 썼던 코드
// const db = mysql.createConnection({
//     host: process.env.DB_HOST,
//     user: process.env.DB_USER,
//     password: process.env.DB_PSWORD,
//     database: process.env.DB_DATABASE,
// });

module.exports = db;

 

register.js

const express = require('express');
const router = express.Router();
const db = require('../config/db');

router.post('/register', (req, res) => {
	const id = req.query.id
    const name = req.query.name
    const password = req.query.password
    const sql1 = "INSERT INTO users(id,name,password) VALUES(?,?,?);";
    const params = [id, name, password]
    
    db((conn) => {
        conn.query(sql1, params, (err) => {
            console.log("쿼리시작")
            if(!err) {
                console.log("가입성공")
                res.send({success: true})
            } else {
                res.send({err:"동일한 아이디가 있습니다."})
                console.log("동일한 아이디가 있습니다.")
            }
        })
        conn.release();
    });
});

module.exports = router;

connection-pool을 사용하면 반드시 release()를 실행하여 커넥션을 반납해주어야 한다.

728x90
반응형