Node.js 에서 mariadb 연결 시 안정적인 방법이 무엇인가요?
조회수 5605회
node.js + express 환경으로 웹사이트를 개발 중입니다.
sequelize 를 사용하여 디비 부분을 개발하다가, 저는 sql에 익숙해서 sequelize 부분을 모두 제거하여 개발 했습니다.
그런데 데이터베이스 연결이 자꾸 끊어집니다.
제가 생각하기로는,
- 약 1분? 이런 식으로 인터벌을 주어 연결을 시도하는 방법
- GET 또는 POST 요청 시에 getConnection 하여 연결 하는 방법
정도가 떠오릅니다.
또는 http://berr.tistory.com/222 에서 소개하는 방법으로 connection 이 끊어지는 리스너를 추가하는 방법도 있다고 하네요.
정리하면 db 연결이 자꾸 끊어지는데 이를 해결하고 싶습니다. 실무에서는 어떻게 개발하는지 궁금합니다.
1 답변
-
상용 서비스가능한 수준에서는 어떻게 관리하는지는 잘 모르겠지만
node.js 모듈에 'generic-pool' 이란것이 있습니다.
connection pool을 관리해주는 모듈이니 connection이 끊기는 문제는 해결이 되지않을까 싶네요
mysql 예제 입니다.
db_pooling.js
var generic_pool = require("generic-pool"); var mysql = require("mysql"); // local env config = { host:'127.0.0.1', user:'username', password:'password', database:'databasename' }; var pooling = generic_pool.Pool({ name:"mysql", create:function(cb){ var conn = mysql.createConnection(config); conn.connect(function(err){ if( err) console.log("mysql 연결오류"); else { // console.log("mysql 연결성공"); } cb(err, conn); // 콜백함수를 통해 풀링에 커넥션 객체를 던짐 }); }, destroy:function(myConn){ myConn.end(function(err){ if( err) console.log("mysql 연결해제오류"); // else console.log("mysql 연결해제성공"); }); }, min:1, max:2, idleTimeoutMillis:1000*500, log:false }); process.on("exit", function(){ pooling.drain(function(){ pooling.destroyAllNow(); }); }); module.exports = pooling;
pool을 가져다 쓸때는
query_processing.js
var pool = require("./db_pooling"); exports.search = function(cb, param){ // param = request.params //console.log(param); pool.acquire(function(err, conn){ if (err) console.log("커넥션 획득 실패 " + err); else { conn.query( "SELECT * FROM TBL WHERE id=? LIMIT 1", [param.id], function(err, result){ if(err) console.log(err); else console.log(result); pool.release(conn); cb(err, result); } ); } }); }
이런식으로 쓰시면 됩니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력