반응형
Nodejs로 Mysql 연동 방법을 알아봅니다.
Express 프레임워크를 사용해서 간단한 API 서버를 만들려고합니다.
mysql이라는 라이브러리를 설치해 사용하면 됩니다.
01. mysql 라이브러리 설치
npm install --save mysql
02. config.js 파일 작성
./config.js
const config = {
host : '***************.rds.amazonaws.com',
user : 'username',
password : 'password',
port : 3306,
database : 'dbname',
connectionLimit : 10
};
module.exports = config;
위와 같이 config정보를 따로 파일로 관리하였습니다. (미리 구축해놓은 AWS RDS 사용)
03. 로깅 파일 작성
./logger.js
const appRoot = require('app-root-path');
const winston = require('winston');
const process = require('process');
const { combine, timestamp, label, printf } = winston.format;
const myFormat = printf(({ level, message, label, timestamp }) => {
return `${timestamp} [${label}] ${level}: ${message}`;
});
const options = {
file: {
// 로그 파일 저장시... 작성
}
console: {
level: 'debug',
handleExceptions: true,
json: false,
colorize: true,
format: combine(
label({ label: 'express_server' }),
timestamp(),
myFormat
)
}
}
let logger = new winston.createLogger({
transports: [
new winston.transports.Console(options.console)
],
exitOnError: false, // do not exit on handled exceptions
});
logger.stream = {
write: function(message, encoding) {
logger.info(message);
},
};
module.exports = logger;
위와 같이 간단히 작성합니다.
그리고 아래 명령어로 관련 라이브러리 설치해줍니다.
npm install --save winston app-root-path
04. DB 커넥션 풀을 제공하는 모듈 작성
./db.js
const mysql = require("mysql");
const config = require("./config");
const logger = require('./logger');
const pool = mysql.createPool(config);
logger.info('Connection pool created.');
pool.on('acquire', function (connection) {
logger.info(`Connection ${connection.threadId} acquired`);
});
pool.on('enqueue', function () {
logger.info('Waiting for available connection slot');
});
pool.on('release', function (connection) {
logger.info(`Connection ${connection.threadId} released`);
});
const getConn = function(callback) {
pool.getConnection(function(err, connection) {
callback(err, connection);
});
}
module.exports = getConn;
- createPool 메서드로 DB Connection Pool을 손쉽게 만들수 있습니다.
- 간단한 pool event 등록 해줬습니다(acquire, enqueue, release)
- getConn이라는 메서드를 만들어 DB 연결이 필요할 때 pool로 부터 연결세션을 제공받아 사용하려고합니다.
05. API 작성
./routes/index.js
/routes/member.js
// index.js
const express = require('express');
const member = require('./member');
const router = express.Router();
router.use('/member', member);
module.exports = router;
// member.js
const express = require("express");
const db = require("../db");
const router = express.Router();
router.get("/", (req, res) => {
// db select문 수행
db((err, connection) => {
connection.query("SELECT * FROM MEMBER", (err, rows) => {
connection.release(); // 연결세션 반환.
if (err) {
throw err;
}
return res.json({ data: rows }); // 결과는 rows에 담아 전송
});
});
});
module.exports = router;
06. 결과
해당 url을 호출 해 봤더니 아래와 같이 로그가 찍히네요.
2019-05-14T12:39:02.664Z [express_server] info: Connection 8231 acquired
2019-05-14T12:39:02.667Z [express_server] debug: Execute query.
SELECT * FROM CONTENTS WHERE 1=1
2019-05-14T12:39:02.679Z [express_server] info: Connection 8231 released
정상적으로 쿼리가 수행된걸 확인 할 수 있습니다.
반응형
'개발 이야기 > NodeJS' 카테고리의 다른 글
Gulp 사용 시 Nodejs 구버전 빌드 실패 (0) | 2024.08.19 |
---|---|
Nodejs 파일 읽어 Promise 다루는 방법 (0) | 2019.11.28 |
NodeJS 콜백을 사용한 비동기 제어 흐름 패턴 (0) | 2019.03.09 |
NodeJS 동작 방식과 개념 정리 (0) | 2019.03.02 |
NodeJS 인기있는 Logging 모듈 Winston (0) | 2019.02.20 |