Pool에서 Connection을 사용하는 방법들

이전 포스트에서 알아본 Pool에서 Connection을 가져와 사용하는 방법이외의 방법을 하나 더 알아보고 차이점을 알아보려고 합니다.

pool.getConnection()Pool에서 Connection을 가져와 사용한 후, 다시 connection.release()를 통해 PoolConnection을 필히 반환 해주어야 합니다. 이 과정은 매번 Connection을 이용할 때 마다 반복되는 작업으로 다소 번거로운 작업으로 느껴질 수 있습니다. 또한 개발자의 실수로 인해 connection.release()를 해주지 않은 경우에는 문제가 발생할 여지가 있습니다.

pool.getConnection()으로 Connection을 사용하는 방법

아래와 같이 pool.getConnection() > connection.query() > connection.release()의 순서로 Connection을 사용할 수 있습니다.

1
2
3
4
5
6
7
8
9
pool.getConnection(function(err, connection) {
if (err) throw err; // not connected!

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
connection.release();
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});
});

pool.query()를 사용하는 방법

pool.query()pool.getConnection() > connection.query() > connection.release()의 코드 플로우 shortcut으로써 위와 같은 번거로운 작업없이 간단하게 Connection을 사용할 수 있습니다.

1
2
3
4
pool.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});

그럼, pool.query()의 압승인가?

간단하다는 이유로 무조건 pool.query()을 사용해야 하는 것은 아닙니다. 예를 들어 pool.getConnection는 후속 query를 위해 Connection 상태를 공유하여 사용하는데 유용합니다. 왜냐하면 pool.query를 통한 두번의 함수 호출은 두개의 Connection을 병렬로 사용하기 때문입니다.