node.js 로 db 서버와 연결
db.js
// db.js
const mysql = require('mysql2');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: '12345',
database: 'test',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
// waitForConnections: true
설명: 연결 풀이 모두 사용 중일 때 새로 들어온 연결 요청이 대기할지 여부를 설정합니다.
// connectionLimit: 10
설명: 연결 풀에서 동시에 유지할 수 있는 최대 연결 수를 설정합니다.
// queueLimit: 0
설명: 대기열의 최대 길이를 설정합니다. 0으로 설정하면 대기열에 제한이 없습니다.
module.exports = pool.promise();
server.js
const db = require('./db');
mysql.createPool, 커넥션 풀
- mysql.createPool은 Node.js에서 MySQL 데이터베이스와의 연결을 관리하기 위해 사용하는 방법으로, 연결 풀(Connection Pool)을 생성합니다.
- 커넥션 풀(Connection Pool)은 데이터베이스와의 연결을 효율적으로 관리하기 위한 기술입니다.
애플리케이션이 데이터베이스와 연결할 때마다 새로운 연결을 생성하는 대신, 미리 생성해둔 연결을 재사용함으로써 성능을 향상시키고 자원 사용을 최적화합니다.
장점
- 성능 향상:
- 연결 재사용: 연결 풀은 기존의 데이터베이스 연결을 재사용하므로 매번 새로운 연결을 생성하고 종료하는 오버헤드를 줄입니다.
이는 데이터베이스와의 연결이 빈번한 애플리케이션에서 성능을 크게 향상시킵니다.
- 연결 대기 시간 단축: 연결을 새로 생성하는 대신 미리 생성된 연결을 사용할 수 있어 요청 처리 시간이 단축됩니다.
- 자원 관리:
- 최대 연결 수 제한: connectionLimit을 설정함으로써 데이터베이스 서버의 과부하를 방지할 수 있습니다.
이로 인해 시스템 자원을 효율적으로 관리할 수 있습니다.
- 연결 풀의 관리: waitForConnections 옵션을 통해 연결 요청이 많을 때 대기하도록 설정하여 서버의 안정성을 높일 수 있습니다.
- 대기열 관리:
- 대기열 제한: queueLimit을 설정하여 대기할 수 있는 요청 수를 제한할 수 있습니다.
이는 시스템의 과부하를 방지하고 예측 가능한 성능을 유지하는 데 도움이 됩니다.
- 비동기 처리: 비동기 처리 지원: mysql2/promise 모듈을 사용하면 비동기 방식으로 데이터베이스 쿼리를 처리할 수 있어 비동기 프로그래밍과 잘 맞습니다.