Node.js 애플리케이션에서 데이터베이스는 빼놓을 수 없는 중요한 요소다. 그중에서도 MariaDB는 많이 사용되는 오픈 소스 관계형 데이터베이스 중 하나로, 이번 포스트에서는 Node.js에서 MariaDB를 쉽게 연결하고 사용하는 방법을 알아보자. 참고로 MariaDB랑 MySql은 거의 같다고 봐도 된다. 그래서 MySql도 같은 방법으로 사용하면 된다. 나는 현재 사내 시스템이 MaridDB를 사용하므로 이것을 선택했다.
Promise를 사용해 직관적인 방식으로 데이터베이스 작업을 처리할 수 있다.먼저 mysql2 라이브러리를 설치하자. 터미널에서 다음 명령어를 실행하면 된다.
npm install mysql2
이 라이브러리는 MySQL뿐만 아니라 MariaDB도 지원하므로, 별도로 MariaDB 전용 라이브러리를 설치할 필요는 없다.
dbConn.js)MariaDB와의 연결을 관리하는 파일로 dbConn.js를 작성해두었다. 이 파일을 통해 데이터베이스 연결을 설정하고 필요한 모든 쿼리를 수행할 수 있다.
dbConn.js 파일 코드
import mysql from "mysql2";
import {config} from "#config/config.js";
// 풀 연결 설정
const pool = mysql.createPool({
host: config.db.host,
port: config.db.port,
database: config.db.database,
user: config.db.user,
password: config.db.password,
});
// `promise()`를 사용하여 비동기 방식으로 쿼리를 실행할 수 있게 함
export const db = pool.promise();
mysql.createPool():db = pool.promise():promise() 메서드를 사용해 db 객체를 Promise 기반으로 만든다. 이를 통해 async/await를 사용해 비동기 쿼리를 쉽게 처리할 수 있다.config):host, port, database, user, password)는 환경 변수로 관리된다. 이를 통해 소스 코드에 중요한 정보를 하드코딩하지 않고, 운영 환경에 맞게 유연하게 관리할 수 있다.app.js)이제, MariaDB와 연동한 부분을 Express 서버에서 사용하는 방법을 보자.
app.js 파일 코드
import express from "express";
import dotenv from "dotenv";
import figlet from "figlet";
import {logger} from "#util/logger.js";
import {config} from "#config/config.js";
import {db} from "#db/dbConn.js";
const app = express();
// 환경 변수 로드
dotenv.config();
// 데이터베이스 연결 확인
db.getConnection().then(async (connection) => {
logger.info(`DB Connection Success: ${config.db.host}, ${config.db.database}`);
}).catch(error => {
logger.error(`DB Connection Error: ${error}`);
});
// 간단한 DB 테스트 쿼리 실행
await dbConnTest();
async function dbConnTest() {
try {
await db.execute(
`SELECT 1 FROM wb_equip`
);
logger.info("DB Test Query Success");
} catch (error) {
logger.error(`DB Connection Error: ${error}`);
}
}
// 서버 시작
app.listen(config.host.port, () => {
figlet("WOOBOLAB", (err, data) => {
if (err) {
logger.error(`Something wrong with figlet.. , ${err}`);
}
logger.info(`
${data}
Server is running on port ${config.host.port}`);
});
});
db.getConnection() 메서드를 사용해 MariaDB에 연결하고, 성공 여부를 로그(logger)로 남긴다.logger.error()를 통해 에러 메시지를 기록하여 문제를 파악할 수 있게 한다.dbConnTest())SELECT 1 FROM wb_equip라는 쿼리를 실행해, 데이터베이스가 정상적으로 응답하는지 확인한다.DB Test Query Success 메시지를, 실패하면 에러 로그를 남긴다.app.listen()을 사용해 서버를 시작하며, logger.info()를 통해 로그를 남겨준다.Promise 기반의 비동기 처리pool.promise()를 사용함으로써 async/await 구문을 이용한 비동기 코딩이 가능하다.
Node.js에서 MariaDB를 연동하여 사용하는 것은 매우 강력하고 유연한 데이터베이스 솔루션을 제공한다. 이번 포스트에서는 mysql2 라이브러리를 사용하여 데이터베이스와의 연결을 설정하고, 커넥션 풀과 Promise 기반의 비동기 방식을 통해 효율적으로 데이터베이스 작업을 처리하는 방법을 살펴보았다.