mysql2는 Node.js 환경에서 MySQL 및 MariaDB 데이터베이스와 통신하기 위한 고성능 라이브러리로, 비동기 프로그래밍을 지원하며 `Promise`와 `async/await`을 자연스럽게 사용할 수 있도록 설계되었다.
개요
mysql2는 기존의 mysql (Node.js 라이브러리)의 성능과 안정성 문제를 개선하기 위해 만들어졌으며, 완전한 호환성을 유지하면서 더 빠른 쿼리 처리 속도와 다양한 기능을 제공한다. 또한 MySQL 서버의 최신 기능을 지원하고, 데이터 타입 처리에 대한 호환성도 뛰어나다.
주요 특징
- Promise API 지원 - 비동기 코드에서 async/await 문법 사용 가능
- Prepared Statement 지원 - SQL 인젝션 방지 및 성능 향상
- 빠른 파서(Fast Parser) - 바이너리 프로토콜 기반의 고속 데이터 파싱
- 기존 mysql 라이브러리와 호환 - 대부분의 코드가 변경 없이 작동 가능
- TypeScript 지원 - 타입 안정성 향상 및 IDE 자동완성 가능
설치
npm을 사용하여 mysql2 패키지를 설치한다.
npm install mysql2
기본 사용 예시
콜백 기반
const mysql = require('mysql2');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
database: 'test',
password: 'password'
});
connection.query(
'SELECT * FROM users WHERE id = ?',
[1],
function (err, results) {
if (err) throw err;
console.log(results);
}
);
connection.end();
Promise 기반 (async/await)
const mysql = require('mysql2/promise');
async function main() {
const connection = await mysql.createConnection({
host: 'localhost',
user: 'root',
database: 'test',
password: 'password'
});
const [rows, fields] = await connection.execute(
'SELECT * FROM users WHERE id = ?',
[1]
);
console.log(rows);
await connection.end();
}
main();
Prepared Statement
mysql2는 명시적인 prepared statement 기능을 제공한다. 이는 SQL 인젝션을 방지하고 반복 쿼리의 성능을 높일 수 있다.
const [rows] = await connection.execute(
'SELECT * FROM users WHERE email = ? AND status = ?',
['example@test.com', 'active']
);
풀(Pool) 사용
커넥션 풀은 다수의 동시 요청을 효율적으로 처리할 수 있도록 도와준다.
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
database: 'test',
waitForConnections: true,
connectionLimit: 10
});
const [rows] = await pool.execute('SELECT NOW()');
console.log(rows);