본문 바로가기
Development/Database

MySQL Connection Pool 이란

by 메정 2021. 11. 23.

MySQL Connection Pool 이란?

DBCP(Database Connection Pool)이란 데이터베이스와 연결을 맺고 있는 Connection 객체를 관리하는 기법

WAS가 실행되면서 미리 일정량의 DB Connection 객체를 생성하고 Pool이라는 공간에 저장

저장된 DB Connection 객체는 요청에 따라 필요할 때마다 Pool에서 가져다 쓰고 반환 가능

동작흐름

image

1.DBMS 연결 요청이 들어왔을 때, DB Connection Pool에는 이미 DB Connection 객체가 저장되어 있는 상태
(WAS 실행 시 개발자가 설정한 만큼의 Connection이 생성)
2.DBCP에서 DB Connection 객체를 가져다 사용
1. 쿼리 수행 후 결과 값 반환
3.사용 후 Connection Pool 반환

DB Connection 객체 생성 및 사용

connection은 DB에 접속 -> SQL문 날림 -> 결과 받고 -> 연결 종료의 flow를 갖음

connection을 닫지 않으면 리소스를 불필요하게 낭비되므로 pool 반환 필요

db.js

const mysql = require("mysql");
var config = require("./db_config");

// pool.getConnection() -> connection.query() -> connection.release()

// mysql connection pool 생성
const pool = mysql.createPool(config);
var conn;

// 호스트 및 pool 연결 확인을 위한 console
console.log(config.host);
console.log(pool);

exports.connect = function () {
  // db 연결시도
  pool.getConnection((err, connection) => {
    if (err) {
      switch (err.code) {
        case "PROTOCOL_CONNECTION_LOST":
          console.error("Database connection was closed.");
          break;
        case "ER_CON_COUNT_ERROR":
          console.error("Database has too many connections.");
          break;
        case "ECONNREFUSED":
          console.error("Database connection was refused.");
          break;
      }
    }
    if (connection) {
      console.log("DB connection Pool Success!");
      conn = connection;
    }
  });
};

// @brief : db connection pool 반환
exports.releaseConn = function () {
  conn.release();
};

exports.get = function () {
  return pool;
};

db_config.js

const config = {
  host: /*서버주소*/,
  user: /*DB 사용자명*/,
  password: /*DB 비밀번호*/,
  port: /*DB 연결포트*/,
  database: /*database 이름*/,
  connectionLimit: 10, //최대 커넥션 수 (기본 10개)
};

module.exports = config;

참고

DBCP 설정(MySQL)
[node.js] mysql 사용부터 pool 관리까지
Nodejs MySQL 연결하기

'Development > Database' 카테고리의 다른 글

[lock]MySQL user-level lock vs Redisson  (0) 2021.11.23
MySQL DB log 보기  (0) 2021.11.23
RDBMS의 트랜잭션과 병행제어  (0) 2021.09.23

댓글