이번 포스팅에서는 커넥션 풀(Connection Pool)의 개념에 대해 간단히 알아보고자 한다.
< 목차 >
- 커넥션 풀(Connection Pool)이란?
- 커넥션 풀 사용하기
1. 커넥션 풀(Connection Pool)이란?
이전 포스팅에서 어떠한 방식으로 DB Server와 통신을 하는지에 대해 알아보았다. (아래 글 참고)
2022.02.28 - [Node.js/MySQL] - Node.js - MySQL (4) MySQL 연결하기 (개념)
DB Server와 통신을 하는 과정에서 핸드쉐이크(HandShake)를 하고 소켓을 생성하고 끊고 하는 과정들은 많은 자원을 소모하게 된다. 만약 다수의 사용자가 동시에 접속을 하게 된다면 서버가 버벅이게 될 것은 두말할 필요도 없다. 요청이 들어올 때마다 커넥션을 맺고 연결하고 끊고, 또 연결하고 끊고 하는 것은 매우 비효율적이기 때문에 우리의 선대 개발자들은 미리 커넥션을 맺어놓고 그것을 가져다 쓰는 방식을 고안해 내었다. 이것이 바로 커넥션 풀(Connection Pool)의 개념이다. 쉽게 말해 커넥션 풀은 커넥션을 담아두는 공간 같은 개념이다. 코드를 작성할 때 커넥션 풀 형태로 코드를 작성하고 DB Server와의 통신을 구현한다면 서버에 걸리는 부하를 최소화시킬 수 있다.
DB Server와의 통신 과정에서 미리 커넥션을 만들어 놓은 후 커넥션 풀에 커넥션들을 담아둔다. 커넥션 풀에 있는 커넥션들은 DB서버와 소켓이 열려있는 상태이다. 클라이언트는 DB Server와 통신을 하고 싶을 때 커넥션 풀에서 커넥션을 가져다 사용하게 된다. 커넥션 풀에서 커넥션을 빌려오는 개념이라고 생각하도록 하자. 커넥션 사용을 마친 후에는 커넥션 풀에 다시 커넥션을 반환하게 되고 다른 클라이언트가 다시 커넥션 풀에서 커넥션을 가져다 사용할 수 있게 된다.
이렇게 커넥션 풀에서 커넥션을 빌려쓰는 구조는 상당히 효율적인 방식이다. 커넥션 풀에 있는 커넥션들은 DB Server와 계속 연결이 되어있는 상태이기 때문에 커넥션 풀을 사용하면 연결을 끊었다 맺었다 하는 프로세스가 없어지게 된다. 그리고 커넥션 풀에서 중요한 것은 DB Server가 커넥션 풀 안에 몇 개의 커넥션을 담을 수 있는지이다. 따라서 커넥션 풀을 사용할 때는 몇개의 커넥션을 생성할 것이지 작성해주게 된다.
2. 커넥션 풀 사용하기
const mysql = require('mysql')
const pool = mysql.createPool({ // 커넥션 풀 생성
host: 'localhost',
user: 'DB계정명',
password: '비밀번호',
database: '데이터베이스명',
connectionLimit: 5 // 커넥션 풀이 몇개의 커넥션을 가지게끔 할 것인지 설정.
})
pool.getConnection((error, connection)=>{ // getConnection -> 커넥션 풀에서 커넥션 가져오기
connection.query('SELECT * FROM user', (error, result, fields)=>{
if (!error) {
// result
console.log(result)
connection.release() // 커넥션 풀에 커넥션 반환
} else {
throw error
}
})
})
// DB서버가 몇개의 커넥션을 가질 수 있는지가 커넥션 풀에서는 관건이다.
기존 방식과 차이가 있다면 createConnection( )으로 요청마다 커넥션을 맺어주는 방식이 아닌, createPool( )로 커넥션 풀을 생성해주는 형태로 바뀌었다. 그리고 인자값으로 전달되는 객체 안에 connectionLimit 이라는 속성값을 추가하여 커넥션 풀 안에 얼마만큼의 커넥션을 담을건지 설정해주게 된다.
pool.getConnection( )을 통해 커넥션 풀에서 커넥션을 가져오는 작업을 수행하게 된다. 콜백함수가 인자값으로 들어가게 되는데 connection.query( )를 통해 DB Server에 쿼리문을 전송하고 데이터를 받아오게 된다. 성공적으로 데이터를 받아왔다면 connection.release( )를 통해 커넥션 풀에 다시 커넥션을 반환해주면 된다.
'MySQL' 카테고리의 다른 글
Node.js - MySQL (6) 환경변수 설정하기 (.env) (2) | 2022.03.01 |
---|---|
Node.js - MySQL (4) MySQL 연결하기 (개념) (0) | 2022.02.28 |
Node.js - MySQL (3) 테이블 생성하기 (0) | 2022.02.18 |
Node.js - MySQL (2) SQL 구문 정리 (0) | 2022.02.17 |
Node.js - MySQL (1) 환경설정 (0) | 2022.02.17 |