MYSQL : Error: Cannot enqueue Handshake after already enqueuing a Handshake.
2023. 11. 15. 16:41ㆍ우당탕탕 에러기록
구글 애널리틱스로부터 fatching한 데이터를 . 디비에 넣어서 관리하고싶은데 백엔드 팀원이 없기때문에 직접 노드서버에 DB를 붙이는 과정에서 겪은 에러이다.
대충 해석해보면 "핸드쉐이크가 가득 차 있는데, 그 후에 또 핸드쉐이크를 채울 순 없다."
음... 나 배부른데 또 뭘 먹이려고? 라는 뉘앙스이다.
아마도 내가 한번이면 되는 걸 처리가 되기전에 너무 빨리요청하거나 혹은, 두번 요청한다는 느낌이다.
아니나 다를까 다른 사람들의 트러블슈팅 기록을 보니 DB connection이 중복으로 호출된게 문제였다.
//sql 연결하기
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'drrsrd0330^^',
database: 'Moa'
});
이 코드블럭에서 sql에 연결을 완료했으나 이후 코드에서
// 테스트용 더비데이터
function addDummyData() {
const dummyData = [
{ visit_date: '2023-11-13', visitors: 2300 },
{ visit_date: '2023-11-08', visitors: 600 },
{ visit_date: '2023-11-11', visitors: 100 }
// 추가하고자 하는 더미 데이터 계속 추가
];
// INSERT INTO 쿼리 실행
dummyData.forEach((data) => {
connection.query(
'INSERT INTO visitor_Data ( visit_date, visitor) VALUES ( ?, ?)',
[data.visit_date, data.visitors],
(error, results, fields) => {
if (error) {
console.error('데이터 추가 오류: ' + error.message);
} else {
console.log('데이터 추가 성공! :' + results[0]);
}
}
);
});
}
// 구글 로그인 응답
app.post('/accessToken', async (req, res) => {
try {
const { accessToken } = req.body; // 클라이언트에서 POST 요청 본문에 포함된 액세스 토큰 추출
connection.connect((err) => {
if (err) {
console.error('MySQL 연결 오류: ' + err.stack);
return;
}
console.log('MySQL 연결 ID: ' + connection.threadId);
addDummyData();
});
이렇듯 구글 로그인이 완료되면 또 한번 connect()를 통해 연결이 된 상태에서 호출했기 떄문에 위와같은 에러가 발생했다고볼 수 있다.
일반적으로 MySQL 연결은 한 번만 수립되어야 하며, 이후에는 연결을 계속 사용하거나 필요에 따라서는 end()를 호출하여 연결을 종료한 후 새로운 연결을 시도해야 한다.
//중복호출을 수정 한 코드
app.post('/accessToken', async (req, res) => {
try {
const { accessToken } = req.body; // 클라이언트에서 POST 요청 본문에 포함된 액세스 토큰 추출
addDummyData();
위와같이 수정했더니 "Error: Cannot enqueue Handshake after already enqueuing a Handshake." 가 해결되었다.
배운 점
mysql을 처음사용하다보니 ,
const connection = mysql.createConnection()
connection.connect()
이 두 가지가 같은 역할을 한다는걸 이런 에러를 만나고 찾아보기 전까지는 전혀 알지 못했다.
차라리 도입단계에서 이런 에러를 만나는게 더 성장에 도움되는 것 같다.
'우당탕탕 에러기록' 카테고리의 다른 글
전역에서 사용하는 사용자 지정 속성(CSS 변수, 종속 변수)에 오타가 난다면 어떤일이 벌어질까? (1) | 2024.02.09 |
---|---|
[React] 리액트 데이터흐름의 중요성 (0) | 2023.10.18 |
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default. (0) | 2023.10.16 |