1. Connection이란?
클라이언트(애플리케이션)측에서 데이터베이스에 접속해서 질의를 수행한 후, 결과를 받고 접속을 종료하는 일련의 과정을 의미한다.
mysql.createConnection() -> connection.connect() -> connection.query() -> connection.end()
2. Connection Pool이란?
사용자의 요청에 따라 Connection을 생성하다 보면 많은 수의 연결이 발생했을 때 서버에 과부하가 걸리게 된다. 이러한 상황을 방지하기 위해 미리 일정수의 Connection을 만들어 Pool에 담아뒀다가 사용자의 요청이 발생하면 연결을 해주고 연결 종료 시 Pool에 다시 반환하여 보관하는 것이 바로 Connection Pool이다. 이러한 Connection Pool은 Connection을 미리 생성해두고 관리함으로써 데이터베이스에 과부하를 방지하고 유동적으로 Connection을 관리할 수 있다는 장점이 있다.
다음 두 개의 그림을 보면 이해가 수월할 것이다.
3. MySQL에서 Connection Pool을 사용할 때 장점
MS SQL(SQL Server)나 Oracle과 같은 유료 DBMS는 타임아웃이란 개념이 존재한다. 단순하게 말하자면 이러한 타임아웃은 Connection을 자동으로 release(접속종료)해주는 것을 의미하는데, 무료 DBMS인 MySQL은 기본적으로 이러한 Connection을 자동으로 release 해주지 않는다. 하지만 MySQL에서 Connection Pool을 사용하면 다음과 같은 형태로 Auto Release를 지원한다.
pool.query() = pool.getConnection() + connection.query() + connection.release()
4. Node.js에서 Connection Pool 구현
다음은 공식문서에서 발췌한 Connection Pool 구현 예제이다.
const mysql = require('mysql2');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
database: 'test',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
pool.query("SELECT field FROM atable", function(err, rows, fields) {
// Connection is automatically released when query resolves
})
pool.getConnection(function(err, conn) {
// Do something with the connection
conn.query(/* ... */);
// Don't forget to release the connection when finished!
pool.releaseConnection(conn);
})
Reference
www.kdata.or.kr/info/info_04.html
effectivesquid.tistory.com/entry/Timeout%EC%97%90-%EA%B4%80%ED%95%9C-%EC%A0%95%EB%A6%AC
medium.com/@k.wahome/database-connections-less-is-more-86c406b6fad
'CS > SQL' 카테고리의 다른 글
[MySQL] 하나의 글과 연관된 여러 개의 이미지 추출하는 쿼리 작성하기 (feat. GROUP_CONCAT) (0) | 2021.06.10 |
---|---|
[SQLD] SQLD 합격 후기 및 공부 방법 (6) | 2021.04.18 |
[SQLD] Join 연산 정리 (0) | 2021.03.18 |
[MySQL] MySQL에서 CSV파일 Import하기 (5) | 2021.02.10 |
[MySQL] DB 생성 및 접속 (0) | 2021.01.02 |