Node.js 를 배워보자

MySQL/MariaDB 연결: mysql, mysql2, mysql2/promise 비교 분석

_Blue_Sky_ 2025. 1. 14. 21:53
728x90
728x90

mysql, mysql2, mysql2/promise는 모두 Node.js에서 MySQL 및 MariaDB와 통신하기 위해 사용되는 라이브러리입니다. 각 패키지와 모듈의 차이점을 정리하겠습니다.


1. mysql 패키지

  • 설명: MySQL 데이터베이스에 연결하기 위한 초기 라이브러리입니다.
  • 특징:
    • 비동기 방식이지만 콜백(callback) 기반으로 동작합니다.
    • 오래된 라이브러리로 현재는 더 이상 유지보수가 이루어지지 않습니다.
  • 장점:
    • 간단하고 가벼운 패키지.
  • 단점:
    • 프로미스(Promise)나 async/await을 지원하지 않아 현대적인 비동기 패턴과 호환성이 낮음.
    • 일부 최신 기능 부족.

예제 코드:

const mysql = require('mysql');
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'test'
});

connection.query('SELECT * FROM users', (error, results) => {
    if (error) throw error;
    console.log(results);
});

connection.end();

728x90

2. mysql2 패키지

  • 설명: mysql 패키지의 향상된 버전으로, 더 빠르고 기능이 풍부합니다.
  • 특징:
    • 기존 mysql과 호환성을 유지하면서 성능이 더 개선됨.
    • Prepared Statements(프리페어드 스테이트먼트)를 기본적으로 지원.
    • 콜백 기반 API와 함께 Promise 기반 API도 지원.
  • 장점:
    • 더 나은 성능.
    • 현대적인 JavaScript 패턴과 호환 가능 (Promise 지원).
    • 더 많은 MySQL 최신 기능 지원.
  • 단점:
    • 약간 더 복잡한 설정.

예제 코드:

const mysql = require('mysql2');
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'test'
});

connection.query('SELECT * FROM users', (error, results) => {
    if (error) throw error;
    console.log(results);
});

connection.end();

728x90

3. mysql2/promise

  • 설명: mysql2 패키지에서 Promise 기반 API만을 사용하기 위한 모듈입니다.
  • 특징:
    • async/await 패턴을 완벽히 지원.
    • 콜백 기반 API가 아니라 Promise 객체를 반환.
    • 현대적인 비동기 프로그래밍 방식에 적합.
  • 장점:
    • 비동기 코드를 깔끔하게 작성 가능.
    • 콜백 대신 try...catch로 에러 처리.
  • 단점:
    • 오래된 Node.js 버전에서는 사용 불가(Node.js 10 이상 권장).

예제 코드:

const mysql = require('mysql2/promise');
async function main() {
    const connection = await mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: 'password',
        database: 'test'
    });

    try {
        const [rows] = await connection.execute('SELECT * FROM users');
        console.log(rows);
    } catch (error) {
        console.error('Query Error:', error);
    } finally {
        await connection.end();
    }
}

main();

주요 차이점 비교

특징 mysql mysql2 mysql2/promise
콜백 지원 O O X
Promise 지원 X O O
async/await 지원 X O O
성능 보통 빠름 빠름
Prepared Statements 제한적 지원 O O
유지보수 상태 비활성화 활성화 활성화

추천

  • 새로운 프로젝트: mysql2/promise 사용을 권장합니다. async/await을 활용하면 코드가 더 깔끔하고 유지보수가 쉬워집니다.
  • 기존 프로젝트: mysql에서 mysql2로 업그레이드하거나, 가능하면 mysql2/promise로 마이그레이션하세요.
728x90
728x90