코딩 / / 2023. 2. 19. 19:51

[MongoDB] NodeJS에서 ECONNREFUSED가 뜨는 문제해결

반응형

Thumbnail

 

 

 

 

 

문제

에러

MongoDB를 실행시켜 데이터베이스를 나의 VScode와 연결하려 하니 연결이 안 된다. 아래는 나타난 오류 메시지이다.

C:\Users\syi03\Desktop\새 폴더\node_modules\mongodb\lib\sdam\topology.js:284
                const timeoutError = new error_1.MongoServerSelectionError(`Server selection timed out after ${serverSelectionTimeoutMS} ms`, this.description);
                                     ^

MongoServerSelectionError: connect ECONNREFUSED ::1:27017
    at Timeout._onTimeout (C:\Users\syi03\Desktop\새 폴더\node_modules\mongodb\lib\sdam\topology.js:284:38)
    at listOnTimeout (node:internal/timers:564:17)
    at process.processTimers (node:internal/timers:507:7) {
            port: 27017
          },
          [Symbol(errorLabels)]: Set(1) { 'ResetPool' }
        },
        topologyVersion: null,
        setName: null,
        setVersion: null,
        electionId: null,
        logicalSessionTimeoutMinutes: null,
        primary: null,
        me: null,
        '$clusterTime': null
      }
    },
    stale: false,
    compatible: true,
    heartbeatFrequencyMS: 10000,
    localThresholdMS: 15,
    setName: null,
    maxElectionId: null,
    maxSetVersion: null,
    commonWireVersion: 0,
    logicalSessionTimeoutMinutes: null
  },
  code: undefined,
  [Symbol(errorLabels)]: Set(0) {}
}

Node.js v18.12.1

뭔 소린지 모르겠으니 일단 ChatGPT에게 물어본다.

 

ChatGPT

ChatGPT에게 물어보니 ECONNREFUSED타입의 에러라며 다음 가능성을 지시한다.

1. MongoDB서버가 포트 27017이 아니다
2. 서버의 IP주소가 다르다
3. 방화벽이슈가 있다
4. 서버가 요청이 너무 많아 새로운 요청을 못 받아들인다.

만족스럽지 못하다. 이런 경우는 어쩔 수 없이 StackOverflow와 티스토리 블로그를 뒤져봐야 한다.

 

 

해결방법 1 : 서비스에 들어가 몽고 DB서버가 돌아가는지 확인

시작

시작메뉴에 서비스라고 치고 들어가 본다.

 

서비스

알파벳을 따라 내려보니 M 쪽에 MongoDB가 실행 중인 것을 확인할 수 있다. 만약 실행 중이 아니라면 우클릭한 후 실행시키면 된다. 

 

내 경우는 이미 실행 중임에도 에러가 나왔으니 나가리다.

 

 

 

 

 

해결방법 2 : MongoDB 실행이 되었나 확인

Shell
MongoDB Shell
Compass
MongoDB Compass

MongoDB는 두 가지 방법으로 실행시킬 수 있다.

1) MongoDB Shell

2) MongoDB Compass

 

둘의 차이는 비주얼이다. Shell은 프롬프트로 접근하여 명령어만 알면 다양한 기능을 사용할 수 있다. 하지만 Shell을 다룰 줄 아는 사람이라면 애초에 ECONNREFUSED문제에 직면하지 않을 것이다. 

 

Compass는 Shell을 보기 편하게 바꿔주는 프로그램이다. 초보자들에게 아주 좋다. 

 

IP

일단 URI가 내 코드랑 맞는지 확인해 본다. 

const MongoClient = require('mongodb').MongoClient;

// Connection URL
const url = 'mongodb://localhost:27017';

// Database Name
const dbName = 'blog';

// Use connect method to connect to the server
MongoClient.connect(url, function(err, client) {
  if (err) {
    console.log('Connection to MongoDB failed');
  } else {
    console.log('Connection to MongoDB successful');
    const db = client.db(dbName);
    client.close();
  }
});

mongodb://localhost:27017가 제대로 입력된 것을 확인할 수 있다. 하지만 여전히 연결은 진행되지 않는다. 

 

 

 

해결방법 3 : IP문제 -> 문제 해결

StackOverflow를 보니 NodeJS로 MongoDB와 연결하면서 제대로 실행이 안 되는 경우를 발견했다. 

 

Stack Overflow

 

 

솔루션은 아래 코드에서 mongodb://localhost:27017를 mongodb://0.0.0.0:27017으로 바꾸는 것이다. 

// Connection URL
const url = 'mongodb://localhost:27017';

이 코드를

// Connection URL
const url = 'mongodb://0.0.0.0:27017';

요렇게 바꿔보라는 것이다. 

 

 

 

 

 

 

더 이상 ECONNREFUSED 문제가 뜨지 않는 것을 보니 문제는 해결되었다. 결론적으로 Nodejs에서 'localhost'대신 IP를 적는 것이 정답이었다. 

 

본문에서는 0.0.0.0을 적었지만 127.0.0.1도 가능한가 보다. 

 

ChatGPT가 해결을 못하면 StackOverflow에서 해결방법을 찾을 수 있다. 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유