본문 바로가기

Coding/TIL (Today I Learned)

MySQL : connection 중복 이슈

MySQL 연동하는 과제를 진행하면서 GET/POST 시에 계속 에러가 발생했다. 

DB 연결은 되었지만 요청을 하면 매번 아래와 같은 타입 에러가 발생했다.

TypeError: db.query is not a function.
//도대체 왜!!

 

쿼리 스트링에는 오류가 없었기 때문에 에러 로그로는 원인을 알 수 없었다.

아직 디버깅이 서툴기 때문에 에러 로그로 확인이 안 될 때가 가장 답답한데, 시간을 많이 허비하고 나서야 원인이 DB 연결 쪽의 이슈라는 것을 발견했다. 


원인은 DB connection의 중복.

node-mysql 모듈을 사용하는 경우 mysql.createConnection()을 하고 나면 아래에 connection.connect()로 다시 연결할 필요가 없다고 한다. 불필요한 코드이고 이것이 오류를 발생시키기도 한다고 함. 그래서 기존의 아래 코드에서,

const mysql = require("mysql");

const password = process.env.DATABASE_SPRINT_PASSWORD;
const host = "localhost";

const connection = mysql.createConnection({
  host: host,
  user: "root",
  password: password,
  database: "chat"
});

connection.connect(err => {
   if (err) {
     console.log(err);
   }
   console.log("Connected to the MySQL server!!"); //콘솔에 커넥티드 메시지가 찍혔지만 오류가 발생
 });

connection.end();

 

connection.connect()와 connection.end() 부분을 주석 처리해 주고 module.exports 해 주었다.

const mysql = require("mysql");

const password = process.env.DATABASE_SPRINT_PASSWORD;
const host = "localhost";

const connection = mysql.createConnection({
  host: host,
  user: "root",
  password: password,
  database: "chat"
});

// connection.connect(err => {
//   if (err) {
//     console.log(err);
//   }
//   console.log("Connected to the MySQL server!!");
// });

// connection.end();

module.exports = connection; //윗 부분을 주석처리하고 exports 해주니 잘 작동했다.

이렇게 수정하고 나니 요청과 응답이 잘 작동했다.

문제를 해결하는 과정에서 커넥션 풀링 이란 개념도 알게 되었는데 아직은 명확하게 이해가 되지 않아서 다음 기회에 정리해보기로!

 

그런데 에러 로그. 자꾸 딴소리하는데 왜 정확한 원인을 말해주지 않는 거야.. ;ㅅ; 

잠시 원망했지만 또 한 가지 배웠다.