[Node.js] MariaDB 연동
![[Node.js] MariaDB 연동](/content/images/size/w1920/2024/12/mariadb_logo.png)
Node.js에서 MariaDB 연동하기
Node.js 애플리케이션에서 데이터베이스는 빼놓을 수 없는 중요한 요소다. 그중에서도 MariaDB는 많이 사용되는 오픈 소스 관계형 데이터베이스 중 하나로, 이번 포스트에서는 Node.js에서 MariaDB를 쉽게 연결하고 사용하는 방법을 알아보자. 참고로 MariaDB랑 MySql은 거의 같다고 봐도 된다. 그래서 MySql도 같은 방법으로 사용하면 된다. 나는 현재 사내 시스템이 MaridDB를 사용하므로 이것을 선택했다.
1. 사용된 라이브러리 소개
1.1. mysql2
- Node.js에서 MariaDB와의 연결을 쉽게 관리할 수 있도록 도와주는 라이브러리이다.
- 비동기 방식을 지원하며,
Promise
를 사용해 직관적인 방식으로 데이터베이스 작업을 처리할 수 있다.
2. MariaDB 연동을 위한 설치
2.1. 라이브러리 설치
먼저 mysql2 라이브러리를 설치하자. 터미널에서 다음 명령어를 실행하면 된다.
npm install mysql2
이 라이브러리는 MySQL뿐만 아니라 MariaDB도 지원하므로, 별도로 MariaDB 전용 라이브러리를 설치할 필요는 없다.
3. 데이터베이스 연결 설정 (dbConn.js
)
MariaDB와의 연결을 관리하는 파일로 **dbConn.js
**를 작성해두었다. 이 파일을 통해 데이터베이스 연결을 설정하고 필요한 모든 쿼리를 수행할 수 있다.
3.1. 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();
3.2. 코드 설명
mysql.createPool()
:- *커넥션 풀(connection pool)**을 생성하는 함수이다.
- 커넥션 풀을 사용하면 데이터베이스와의 연결을 효율적으로 관리할 수 있어 성능이 향상된다. 필요할 때마다 새 연결을 만드는 대신, 풀에서 관리되는 연결을 재사용하기 때문에 효율적이다.
db = pool.promise()
:promise()
메서드를 사용해db
객체를 Promise 기반으로 만든다. 이를 통해async/await
를 사용해 비동기 쿼리를 쉽게 처리할 수 있다.
- 환경 변수 사용 (
config
):- 데이터베이스 연결 정보(
host
,port
,database
,user
,password
)는 환경 변수로 관리된다. 이를 통해 소스 코드에 중요한 정보를 하드코딩하지 않고, 운영 환경에 맞게 유연하게 관리할 수 있다.
- 데이터베이스 연결 정보(
4. Express 서버에서 MariaDB 연결 사용하기 (app.js
)
이제, MariaDB와 연동한 부분을 Express 서버에서 사용하는 방법을 보자.
4.1. 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();
// 데이터베이스 연결 확인
const initDatabaseConnection = async () => {
try {
const connection = await db.getConnection();
logger.info(`DB Connection Success: ${config.db.host}, ${config.db.database}`);
connection.release();
} catch (error) {
logger.error(`DB Connection Failed: ${error}`);
}
};
const startServer = () => {
app.listen(config.host.port, () => {
figlet('WOOBOLAB', (err, data) => {
if (err) {
logger.error(`Something went wrong with figlet: ${err}`);
return;
}
logger.info(`
${data}
Server is running on port ${config.host.port}`);
});
});
};
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}`);
}
}
// DB 연결
await initDatabaseConnection();
// 서버 시작
startServer();
// 간단한 DB 테스트 쿼리 실행
await dbConnTest();
4.2. 코드 설명
- 데이터베이스 연결 확인 (
initDatabaseConnection()
)- MariaDB에 연결하고, 성공 여부를 **로그(logger)**로 남긴다.
- 만약 데이터베이스 연결에 실패하면
logger.error()
를 통해 에러 메시지를 기록하여 문제를 파악할 수 있게 한다.
- DB 테스트 쿼리 (
dbConnTest()
)- 데이터베이스와의 연결이 정상적인지 확인하기 위해 간단한 테스트 쿼리를 실행했다.
- *
SELECT 1 FROM wb_equip
*라는 쿼리를 실행해, 데이터베이스가 정상적으로 응답하는지 확인한다. - 쿼리가 성공하면
DB Test Query Success
메시지를, 실패하면 에러 로그를 남긴다.
5. 데이터베이스 연결 관리의 장점
5.1. 커넥션 풀 사용의 이점
- 커넥션 풀을 사용하면 매번 새로 연결을 생성하지 않고 풀 내의 연결을 재사용할 수 있어서 성능이 향상된다.
- 여러 요청이 동시에 발생하더라도, 풀에서 미리 생성된 연결을 사용하여 응답할 수 있다.
5.2. Promise
기반의 비동기 처리
- *
pool.promise()
*를 사용함으로써async/await
구문을 이용한 비동기 코딩이 가능하다. - 코드가 더 간결하고 읽기 쉬워지며, 비동기 방식으로 데이터베이스 작업을 처리함으로써 애플리케이션의 응답성을 높일 수 있다.
5.3. 에러 로깅
- Winston logger를 사용해 데이터베이스 연결 및 쿼리 실행 시 발생할 수 있는 에러를 기록한다.
- 이를 통해 데이터베이스와 관련된 문제를 빠르게 찾고 해결할 수 있다.
6. 정리

Node.js에서 MariaDB를 연동하여 사용하는 것은 매우 강력하고 유연한 데이터베이스 솔루션을 제공한다. 이번 포스트에서는 mysql2 라이브러리를 사용하여 데이터베이스와의 연결을 설정하고, 커넥션 풀과 Promise
기반의 비동기 방식을 통해 효율적으로 데이터베이스 작업을 처리하는 방법을 살펴보았다.
댓글