Mysql Pool
이번에 사용 하는 클라우드 서버는Mysql 설정 파일을 바꿔도 윗단에서 커넥션을 빠르게 끊어버리는 바람에 문제가 되었습니다.
맨 처음에는 setInterval와 end 함수의 콜백을 이용해 특정 시간이 될 때마다
커넥션을 모두 끊고 다시 연결을 만들도록 했었는데요.
그래도 어느 순간이 되면 커넥션 에러가 발생 했습니다.
다음 시도는 Mysql-simple-pool모듈을 사용 하는 것이었습니다.
저번에 Mysql-simple-pool에 관해 포스팅을 한 적이 있었죠.
그런데 사용시 전에는 없었던 문제가 생겼습니다. 그것은 쿼리를 처음 할 땐 에러가 난다는 것이었죠.
쿼리를 몇 번 하고 나서야 에러가 안나고 잘 처리 되었습니다.
여러가지 해결 방법을 찾아보다가 Mysql모듈도 Pool을 지원한다는 사실을 알게 되었습니다.
var mysql = require('mysql');
var mysqlConfig = {
host: "아이피",
port: "포트",
user: "아이디",
password: "암호",
database: "데이터베이스"
};
var pool= mysql.createPool(mysqlConfig);
pool.getConnection(function(err,connection){
connection.query("쿼리",function(err,rows){
//rows를 처리할 내용
//release를 해주어 커넥션이 pool로 되돌아 갈 수 있도록 해줍니다.
connection.release();
//이제 이 커넥션은 pool로 돌아가 다른 주체가 사용 할 수 있도록 준비합니다.
});
});
//추가사항 : 이렇게 해줘도 끊기는 현상이 발생 할 때가 있었습니다.
//이건 최후의 방법인데 특정 시간마다 연결했다 끊는겁니다.
//저는 결국 이 방법으로 해결했습니다.
function keepAlive(){
pool.getConnection(function(err, connection){
if(err) { return; }
connection.ping();
connection.release();
});
//redis client를 사용중이라면, 아마 Redis연결도 빠르게 끊길겁니다.
//client.ping(); // 라고 해주면 Redis연결도 유지합니다.
}
setInterval(keepAlive, 60*1000);