본문 바로가기
Network/Server

[Server] connection Pool 이용하기

by 며루치꽃 2021. 1. 22.

Connection Pool 개념

데이터베이스에 연결된 Connection을 미리 만들어 둔후 Pool에 보관하였다가 필요할 때 Pool에서 Connection을 가져다 사용한 후, 다시 Pool에 반환하는 기법입니다. Connection Pool을 이용하면 여러 Connection을 이용할 수 있기 때문에 더 큰 부하를 견딜 수 있습니다.

또한 기존처럼 필요할때 마다 Connection을 생성하고 닫지 않아도 되기 때문에 어플리케이션의 성능향상 또한 기대할 수 있습니다.

Connection Pool 생성

Node.js에서 Connection Pool은 아래와 같이 사용할 수 있습니다. Connection을 생성하지 않고 Pool을 생성한 후 getConnection()을 통해 가져다 사용해야 합니다.

Connection Pool 사용방법

mysql.createPool(_config) : 새로운 Pool 생성
pool.getConnection : pool에서 Connection 가져오

Pool을 위한 추가 설정

  • connectionLimit : 최대 컨넥션 개수 (default: 10)

아래의 옵션을 추가하여 최대 컨넥션의 개수를 지정할 수 있습니다.
git을 이용할 경우 아래와 같이 설정을 json파일로 빼고 .gitignore에 추가하는 것을 추천합니다.

 

config.js

{
  "host": "<host>",
  "user": "<username>",
  "password": "<password>",
  "database": "<database>",
  "connectionLimit": 30
}
const mysql = require('mysql');
const config = require('./db_config.json');

var pool = mysql.createPool(config);
pool.getConnection(function(err, conn) {
  if(!err) {
    //연결 성공
    conn.query(...);
  }
  conn.release();
});

위와 같이 Connection Pool을 생성할 수 있습니다. 그후 Pool에서 Connection을 얻어서 사용할 수 있습니다. 사용한 후 반드시 conn.release()를 통해 Pool에 반납해야 합니다.

 

Connection Pool 모듈화

 

database.js

const mysql = require('mysql');
const config = require('./db_config.json');

let pool = mysql.createPool(config);

function getConnection(callback) {
  pool.getConnection(function (err, conn) {
    if(!err) {
      callback(conn);
    }
  });
}

module.exports = getConnection;

getConnection() 함수를 exports하여 아래와 같이 필요한 곳에서 랩핑하여 쉽게 사용할 수 있습니다.

const getConnection = require('./db');

getConnection((conn) => {
  conn.query(
    ...
  );
  conn.release();
});

사용후 꼭 conn.release()를 통해 Pool Connection을 반환해야 합니다.

댓글