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);