반응형
Node.js에서 MySQL 계열 데이터베이스를 사용할 때 자주 사용하는 패키지가 **mysql**과 **mysql2**입니다.
둘은 이름이 비슷하지만 기능과 사용 방식에서 몇 가지 중요한 차이가 있습니다.
이번 글에서는 다음 내용을 정리합니다.
- mysql vs mysql2 차이점
- 어떤 경우에 mysql2를 사용하는 것이 좋은지
- mysql2를 MariaDB에서 사용할 수 있는지
1. mysql vs mysql2 기본 개념
항목mysqlmysql2
| 패키지 | mysqljs/mysql | sidorares/mysql2 |
| 개발 시기 | 오래된 Node MySQL 드라이버 | mysql의 개선 버전 |
| Promise 지원 | ❌ 기본 지원 없음 | ✅ Promise API 지원 |
| Prepared Statement | ❌ 제한적 | ✅ 기본 지원 |
| 성능 | 보통 | 더 빠른 편 |
| 유지보수 | 유지중 | 활발 |
핵심은 mysql2가 mysql의 개선 버전이라는 점입니다.
또한 API 호환성을 유지하면서 기능을 확장했습니다.
그래서 기존 코드에서 비교적 쉽게 변경할 수 있습니다.
2. mysql 특징
mysql은 Node.js에서 오래 사용된 MySQL 드라이버입니다.
특징
- 콜백 기반 API
- 안정적이지만 최신 기능 부족
- Promise를 직접 래핑해야 함
예제 코드
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'test'
});
connection.query('SELECT * FROM users', (err, results) => {
if (err) throw err;
console.log(results);
});
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'test'
});
connection.query('SELECT * FROM users', (err, results) => {
if (err) throw err;
console.log(results);
});
3. mysql2 특징
mysql2는 mysql과 대부분의 API가 호환되면서 추가 기능을 제공합니다.
주요 장점
- Promise API 지원
- async/await 사용 가능
- Prepared Statement 지원
- 더 나은 성능
- TypeScript 지원
예제 코드 (Promise 사용)
const mysql = require('mysql2/promise');
async function main() {
const connection = await mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'test'
});
const [rows] = await connection.execute(
'SELECT * FROM users WHERE id = ?',
[1]
);
console.log(rows);
}
main();
async function main() {
const connection = await mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'test'
});
const [rows] = await connection.execute(
'SELECT * FROM users WHERE id = ?',
[1]
);
console.log(rows);
}
main();
async/await 기반 코드 작성이 가능하기 때문에 최근 프로젝트에서는 mysql2가 더 많이 사용됩니다.
4. mysql2를 MariaDB에서 사용할 수 있을까?
결론부터 말하면 사용 가능합니다.
이유는 다음과 같습니다.
- MariaDB는 MySQL 프로토콜과 호환
- mysql / mysql2 드라이버는 MySQL 프로토콜 기반
따라서 일반적인 CRUD 작업에서는 문제없이 동작합니다.
5. MariaDB에서 권장되는 Node.js 드라이버
MariaDB 공식 문서에서는 MariaDB 전용 드라이버를 제공합니다.
추천 패키지
mariadb
특징
- MariaDB 공식 Connector
- MySQL 및 MariaDB 모두 연결 가능
- MariaDB 기능 최적화
예제
const mariadb = require('mariadb');
const pool = mariadb.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'test'
});
async function main() {
const conn = await pool.getConnection();
const rows = await conn.query('SELECT * FROM users');
console.log(rows);
}
const pool = mariadb.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'test'
});
async function main() {
const conn = await pool.getConnection();
const rows = await conn.query('SELECT * FROM users');
console.log(rows);
}
6. 어떤 드라이버를 선택해야 할까?
추천 기준은 다음과 같습니다.
MySQL 사용
추천
mysql2
이유
- Promise 지원
- 성능 개선
- 커뮤니티 사용량 많음
MariaDB 사용
추천
mariadb
이유
- 공식 커넥터
- MariaDB 기능 완전 지원
기존 프로젝트 유지보수
이미 mysql을 사용하고 있다면
- 급하게 변경할 필요는 없음
- 새 프로젝트라면 mysql2 추천
7. 정리
- mysql2는 mysql의 업그레이드 버전
- Promise 기반 개발을 위해 mysql2 사용이 일반적
- mysql2는 MariaDB에서도 사용 가능
- 하지만 MariaDB에서는 mariadb 공식 드라이버가 더 권장됨
반응형
'Database' 카테고리의 다른 글
| [DBeaver]Excel Export (0) | 2026.02.23 |
|---|---|
| [MYSQL]몇 년치 날짜데이터 테이블 만들기 (0) | 2024.05.29 |
| [MYSQL]특정 범위에 없는 날짜 데이터 만들기 (0) | 2024.05.29 |
| [MSSQL]매월 3째주 금요일 구하기(쿼리검증필요/주차관련) (0) | 2024.04.09 |
| Elastic Search (0) | 2024.02.15 |