Nodejs

[Nodejs] PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR

Satisfaction 2021. 5. 18. 20:53

mysql 모듈을 사용하던 중 발생한 오류이다.

 

동일한 코드였으나 어느 순간 갑자기 이 오류가 발생하기 시작했는데,

문제는 AFTER_FATAL_ERROR이라면서 이전에 오류는 찍히지도 않았다.

 

모듈 버전이나 노드의 버전이 바뀌면서 뭔가 변경점이 생긴 것 같다.

 

원인

메시지 원인처럼 쿼리 실행 전 커넥션에 무언가 치명적인 오류가 생긴 경우이다.

 

찾아보니 커넥션이 이루어진 후 일정 시간동안 쿼리가 발송되지 않으면 자동으로 커넥션이 종료된다고 한다.

커넥션이 끊긴 후 쿼리를 보내려고 하니, 위와 같은 오류가 발생하는 것이다.

 

해결법

커넥션이 끊기지 않게 하기 위해 코드블럭을 다음과 같이 변경한다

const preventClosingConnection= ()=>{
  database.query('SELECT 1').catch(e=> console.error(e));
};

const intervalId= setInterval(preventCloseingConnection, 5* 1000);

// Your code block is here....

clearInterval(intervalId);

 

이렇게 하면 database관련 작업을 하지 않더라도 무의미한 더미 쿼리를 계속 보내기 때문에 자동으로 커넥션이 끊어지는 것을 방지한다.

 

또한 프로그램 실행을 마쳤을 때, 정상적으로 종료될 수 있도록

마지막에 clearInterval로 타이머를 종료시켜줘야 한다.