MongooseError: Operation `goods.insertOne()` buffering out after 10000ms / connect ECONNREFUSED ::1:27017
MongooseError: Operation `goods.insertOne()` buffering out after 10000ms / connect ECONNREFUSED ::1:27017

MongooseError: Operation `goods.insertOne()` buffering out after 10000ms / connect ECONNREFUSED ::1:27017

Tags
Node.js
Error Log
Published
November 1, 2023
Author
gozneokhan

MongooseError: Operation `goods.insertOne()` buffering out after 10000ms

MongoDB를 오늘 학습하면서 겪었던 문제(맨 아래 내용정리 있습니다.)
주특기 node.js 학습 2일차 몽고디비 연습 중 원인을 알 수 없는 오류에 시달렸습니다.
강의 영상대로 잘 따라하고 있었는데 서버를 3000포트로 열고, Thunder Client에서 POST로 주소 값을 주고 Body에 코드 값을 주고 Send를 눌렀는데 반환하는 값이 안 뜨고 오류가 떠버렸습니다 아래는 node app.js 실행 시 화면인데 이때 까지만 해도 순조롭게 진행되는 줄 알았습니다.
notion image
console.log로 서버 연결 오류 값을 미리 작성했기 때문에 로그가 안 찍혀 연결된 상태로 착각했습니다.
MongooseError: Operation `goods.insertOne()` buffering out after 10000ms MongoServerSelectionError: connect ECONNREFUSED ::1:27017
notion image
처음에는 영상을 보고 연습한 코드가 잘못된 줄 알고 한 시간 넘게 마침표 하나까지 두 세 번 씩 체크하면서 확인하였으나 영상 속 코드와 제가 작성한 코드의 차이점을 발견하지 못했습니다. 터미널에서는 계속 시간 초과에 관련된 오류를 가리켰기에 불러오는 코드 문제로 착각했던 것 같습니다.
이다음으로 예상한 오류는 studio 3T었습니다. Local에서 기존에 만들었던 New connection을 잘 못 만들었거나 설정을 잘못했나 싶어서 기존에 데이터를 삭제하고 spa_mall로 작업 중인 이름을 따라서 다시 만들고 테스트하였습니다. 하지만 여러 테스트를 거쳤지만 원인이 아닌 것 같았습니다. 애초에 작업을 따라 하는 영상 속에서도 POST에서 반환하는 값이 뜨고 나서 3T를 설정했기 때문에 다시 원인을 찾아봤습니다.
한참을 헤맨 끝에 한 가지 원인을 발견했습니다. 서버를 포트로 열고 오래 기다려봤는데  몽고디비 연결 에러가 뜨는 것을 찾을 수 있었습니다. 덕분에 에러의 해결 방향을 잡을 수 있었습니다.
notion image

해결하고자 했던 시도

[1] mongosh를 이용하여 명령어 실행
몽고디비에 다시 연결하기 위해 로컬 C 파일에서 data/db/bin 경로로 들어가 mongosh를 실행하여 연결을 다시 확인하였습니다.
notion image
→ MongoDB 파일 저장 위치에서 오류를 잡기 위한 시도

notion image
→ 잘 설치가 된 것을 확인했지만 밑에 경고를 못 보고 지나쳤습니다.
[2] mongosh를 이용하여 문자열 테스트
서버가 부팅할 때 이러한 시작 경고를 생성했습니다. 처음엔 뭐지? 싶었다가 밑에 경고를 나중에 발견하고 일단 문자열이라도 테스트 해보자해서 테스트 해봤습니다.
notion image
→ 테스트는 이상이 없어 보였습니다.
[3] 명령프롬프트에서 실행해보기
점점 더 미궁으로 빠졌습니다. 설치도 잘 되어있고 값들도 잘 나오는데 뭐가 문제일지 싶었습니다. 운 좋게 stackoverflow에서 저와 유사한 상황의 글을 발견했습니다. 현재 상황에서 서버가 만들어지지 않아서 생긴 문제라는데... 음... 일단 찾은 방법으로 시도해 보기 위해 mongosh 명령 창을 닫고 cmd 명령 프롬프트에서 진행해 봤습니다.
notion image
→ 명령프롬프트에서 mongod를 검색
[4] 명령프롬프트에서 서버 생성을 위한 경로 넣어주기
mongod를 실행해 보니 서버 생성이 진행되지 않아서 생긴 오류가 맞았습니다. 다시 한번 서버 생성을 위해 경로를 넣어주고 실행을 해봤습니다.
notion image
→ 명령프롬프트에 경로 설정
[5] 명령프롬프트에서 mongod -dbpath "주소" 값에 --IPv6 코드를 추가
네 맞습니다. 해결될 줄 알았는데 또다시 오류가 떠버렸습니다. 내용을 찾아보니 mongod -dbpath "주소" 값에 --IPv6 코드를 추가해야 서버 문제를 해결할 수 있다고 해서 다시 수정해 봤습니다.
notion image
mongod -dbpath "주소"값에  --ipv6 코드를 추가
크게 바뀐 게 없어서 긴가민가했었는데 혹시 몰라서 이 상태에서 다시 node app. JS를 다시 호출해 보고 기다려 보기로 했습니다.
notion image
→ 데이터 베이스 연결 성공!
드디어 Terminal에서 데이터베이스 연결 성공 console.log가 동작했습니다. 곧바로 Thunder Client로 이동하여 POST로 URL 값을 설정하고 Body에 코드 값을 입력 후 Send를 눌렀는데 드디어!! 이 문제를 해결했습니다. ㅠㅠ
notion image
→ 데이터 베이스 연결 후 정상 작동
문제를 해결하게 되면서 비록 오늘 목표치만큼 강의를 전부 수강 하진 못했지만 예상치 못한 오류로 인해 값진 경험을 했다고 생각합니다. 덕분에 오늘도 1% 성장한 하루였습니다. 아! 그리고 옆에서 도움을 주신 able 팀장님께 정말 감사드립니다.

최종 해결 방법

문제

  • 서버를 3000포트로 열고 POST 요청을 Thunder Client로 보냈을 때 반환 값이 표시되지 않고 오류가 발생함.
  • 몽고디비 연결 오류 발생.

해결 과정

mongosh를 이용하여 몽고디비에 연결 상태를 확인하고 로컬 데이터베이스 경로를 설정.
  • 몽고디비에 연결은 정상이었으나 서버 부팅 시 경고가 생성되었음. 이 경고를 확인하기 위해 문자열 테스트 진행.
  • 서버가 정상적으로 생성되지 않아 문제가 발생했을 가능성이 있어, 명령 프롬프트에서 mongod 명령을 실행하여 경로 설정을 시도.
  • 명령 프롬프트에서 mongod 명령을 실행 시 --dbpath 옵션과 함께 --ipv6 코드를 추가하여 서버를 다시 생성.
  • 이후, 몽고디비와 서버 연결에 성공하고 node app.js를 실행하여 POST 요청을 성공적으로 보내고 응답을 받음.

더 쉽게 해결하는 방법

어제 저녁 슬랙에 공지로 올라왔던 글을 보고 더 쉬운 방법을 알게 되었습니다.
mongoose 를 통해 node에서 connected 에러가 나는 경우 기존의 index.js 파일에서 localhost:27017을 수정하면 되는데 개인 컴퓨터 중 (특히 윈도우 사용자들 ) 자신의 IP 127.0.0.1과 localhost라는 도메인이 연결이 안되어 있으면 컴퓨터 자신을 찾지 못해 에러가 발생한다고 합니다.
localhost 수정 전
notion image
localhost:27017로 수정 후
notion image
이 방법으로도 데이터베이스 연결 성공
notion image
POST에서 Send 테스트시 동작 완료
notion image

Reference