인프런에서 따라하며 배우는 노드, 리액트 시리즈 - 기본 강의의 #3에서 mongoose를 통해 mongoDB를 연결하는 것을 배우던 중이었다.
$ npm run start
> boiler-plate@1.0.0 start /Users/ero/Dev/boiler-plate
> node index.js
Example app listening at http://localhost:5000
MongoDB Connected...
강사님께서 npm run start
를 치자 강의 속의 터미널은 위와 같이 출력됐다. 나 역시 놓친것 없이 따라했으니 강의와 같은 결과가 나올줄 알았으나 MongoDB가 연결되지 않았는지 마지막 줄이 출력되지 않았다.
(node:5153) UnhandledPromiseRejectionWarning: MongooseServerSelectionError: Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you're trying to access the database from an IP that isn't whitelisted. Make sure your current IP address is on your Atlas cluster's IP whitelist: https://docs.atlas.mongodb.com/security-whitelist/
at NativeConnection.Connection.openUri (/Users/ero/Dev/boiler-plate/node_modules/mongoose/lib/connection.js:797:32)
at /Users/ero/Dev/boiler-plate/node_modules/mongoose/lib/index.js:330:10
at /Users/ero/Dev/boiler-plate/node_modules/mongoose/lib/helpers/promiseOrCallback.js:32:5
at new Promise (<anonymous>)
at promiseOrCallback (/Users/ero/Dev/boiler-plate/node_modules/mongoose/lib/helpers/promiseOrCallback.js:31:10)
at Mongoose._promiseOrCallback (/Users/ero/Dev/boiler-plate/node_modules/mongoose/lib/index.js:1151:10)
at Mongoose.connect (/Users/ero/Dev/boiler-plate/node_modules/mongoose/lib/index.js:329:20)
at Object.<anonymous> (/Users/ero/Dev/boiler-plate/index.js:6:10)
at Module._compile (internal/modules/cjs/loader.js:1085:14)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:5153) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:5153) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
VScode, node.js, express, mongoDB, mongoose 무엇 하나 익숙하지 않은 내게는 에러코드를 어디서 찾아야하고 어떻게 해석해야하는지부터가 난관이다. 그래도 다행히 터미널을 보고 있을때 에러메세지가 나오기 시작하였고, 내가 화이트리스트에 등록되어있지 않다는 것을 알 수 있었다.
내 클러스터 => Network Acccess => Add IP Address
순서대로 들어오면 해당 스크린샷 같은 페이지에 도달한다. ADD CURRENT IP ADDRESS를 눌러 간단히 내 아이디를 첫 텍스트박스에 넣고, 간단한 메모를 적어 마무리한다. 옆의 ALLOW ACCESS FROM ANYWHERE은 어디서든 접근 가능하게 하는 것으로 보인다. 실제로 눌러보면 0.0.0.0/0가 자동 기입 된다. 어차피 중요한것도 없고 편해보이지만 긁어 부스럼 같아 패스했다.
MongoDB error: MongooseServerSelectionError: Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you're trying to access the database from an IP that isn't whitelisted. Make sure your current IP address is on your Atlas cluster's IP whitelist: https://docs.atlas.mongodb.com/security-whitelist/
at NativeConnection.Connection.openUri (/Users/ero/Dev/boiler-plate/node_modules/mongoose/lib/connection.js:797:32)
at /Users/ero/Dev/boiler-plate/node_modules/mongoose/lib/index.js:330:10
at /Users/ero/Dev/boiler-plate/node_modules/mongoose/lib/helpers/promiseOrCallback.js:32:5
at new Promise (<anonymous>)
at promiseOrCallback (/Users/ero/Dev/boiler-plate/node_modules/mongoose/lib/helpers/promiseOrCallback.js:31:10)
at Mongoose._promiseOrCallback (/Users/ero/Dev/boiler-plate/node_modules/mongoose/lib/index.js:1151:10)
at Mongoose.connect (/Users/ero/Dev/boiler-plate/node_modules/mongoose/lib/index.js:329:20)
at Object.<anonymous> (/Users/ero/Dev/boiler-plate/index.js:6:10)
at Module._compile (internal/modules/cjs/loader.js:1085:14)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10) {
reason: TopologyDescription {
type: 'ReplicaSetNoPrimary',
servers: Map(3) {
'boilerplate-shard-00-02.2q2jt.mongodb.net:27017' => [ServerDescription],
'boilerplate-shard-00-00.2q2jt.mongodb.net:27017' => [ServerDescription],
'boilerplate-shard-00-01.2q2jt.mongodb.net:27017' => [ServerDescription]
},
stale: false,
compatible: true,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
setName: 'atlas-twxj3c-shard-0',
logicalSessionTimeoutMinutes: undefined
}
}
IP Adress를 추가가 된것을 본 직후에 npm run start
를 돌렸을 때는 똑같은 에러가 떴고, 혹시나 해서 한번 더 돌려보니 에러 코드가 바뀌었다. IP에 문제가 있나?
현재 테더링을 통해서 맥을 사용중이기에 아이폰의 아이피가 현재의 내 아이피이다. 내 아이폰의 IP를 등록시켜보고 다시 시도해본다. 여전히 같은 에러가 뜬다.
ALLOW ACCESS FROM ANYWHERE를 통해서라도 접속하고자 들어가보니 아까의 ADD CURRENT IP ADDRESS 버튼이 보이지 않는다. 이미 현재의 IP는 등록이 되어있다는 뜻으로 보여서 무척 열받는다.
ero@Kimui-MacBookAir:~/Dev/boiler-plate » npm run start 130 ↵
> boiler-plate@1.0.0 start /Users/ero/Dev/boiler-plate
> node index.js
Example app listening at http://localhost:5000
MongoDB Connected...
0.0.0.0/0
IP를 등록하고 나니 바로 해결됐다. 심지어 이전까지는 npm run start
를 치면 Example app listening at http://localhost:5000
이후는 한참 뒤에 나왔는데 이번엔 엔터와 동시에 나왔다. 언젠가 좀 더 공부를 하면 내 IP로 해결하고 글을 수정해야겠다.
0.0.0.0/0
를 등록하자 일단은 해결됨.
덕분에 해결했습니다 감사합니다 ㅎㅎ