Mongoose: { useUnifiedTopology: true } MongoDB ์—ฐ๊ฒฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: MongoTimeoutError: 30000ms ํ›„ ์„œ๋ฒ„ ์„ ํƒ ์‹œ๊ฐ„ ์ดˆ๊ณผ

์— ๋งŒ๋“  2019๋…„ 09์›” 20์ผ  ยท  78์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Automattic/mongoose

๊ธฐ๋Šฅ ์„ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ ๋ฒ„๊ทธ๋ฅผ ๋ณด๊ณ  ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋ฒ„๊ทธ.

ํ˜„์žฌ ํ–‰๋™์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Mongoose 5.7.1๋กœ ์—…๋ฐ์ดํŠธํ•œ ํ›„ ๋‹ค์Œ ๊ฒฝ๊ณ ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

(node:41563) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
    at parseFn (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/node_modules/mongodb/lib/operations/connect.js:312:5)
    at parseConnectionString (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/node_modules/mongodb/lib/core/uri_parser.js:628:3)
    at connect (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/node_modules/mongodb/lib/operations/connect.js:266:3)
    at ConnectOperation.execute (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/node_modules/mongodb/lib/operations/connect.js:191:5)
    at executeOperation (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/node_modules/mongodb/lib/operations/execute_operation.js:83:26)
    at MongoClient.connect (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/node_modules/mongodb/lib/mongo_client.js:216:10)
    at Promise (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/lib/connection.js:632:12)
    at Promise._execute (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/bluebird/js/release/debuggability.js:313:9)
    at Promise._resolveFromExecutor (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/bluebird/js/release/promise.js:488:18)
    at new Promise (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/bluebird/js/release/promise.js:79:10)
    at NativeConnection.Connection.openUri (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/lib/connection.js:629:19)
    at Mongoose.connect (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/mongoose/lib/index.js:327:15)
    at Object.connect (/Users/tschaffter/dev/PHCCollaborationPortal/server/app.js:17:44)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Module._compile (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/pirates/lib/index.js:99:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Object.newLoader [as .js] (/Users/tschaffter/dev/PHCCollaborationPortal/node_modules/pirates/lib/index.js:104:7)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/Users/tschaffter/dev/PHCCollaborationPortal/server/index.js:12:28)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)

MongoDB ๋ ˆํ”Œ๋ฆฌ์นด ์„ธํŠธ ๋˜๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋ฉ”์‹œ์ง€์—์„œ ์ œ์•ˆํ•œ ๋Œ€๋กœ ๋‚ด mongoose ๊ตฌ์„ฑ ๊ฐœ์ฒด์— useUnifiedTopology: true ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ชฝ๊ตฌ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

``` ๋ชฝ๊ณ : {
์˜ต์…˜: {
// https://mongoosejs.com/docs/deprecations.html
useNewUrlParser: ์ฐธ,
useFindAndModify: ๊ฑฐ์ง“,
useCreateIndex: ์ฐธ,
useUnifiedTopology: ์ฐธ,
์žฌ์—ฐ๊ฒฐ ์‹œ๋„: 30,
reconnectInterval: 500, // ms ๋‹จ์œ„
}
},

and here is where I used this `mongo.options` object:

// ๋ชฝ๊ณ DB์— ์ ‘์†
const mongooseConnectionPromise = mongoose.connect(config.mongo.uri, config.mongo.options);
mongoose.connection.on('์˜ค๋ฅ˜', ์˜ค๋ฅ˜ => {
console.error( MongoDB connection error: ${err} );
ํ”„๋กœ์„ธ์Šค.exit(-1); // eslint-disable-line no-process-exit
});

The warning is gone but the issue is that mongoose is now no longer able to connect:

MongoDB ์—ฐ๊ฒฐ ์˜ค๋ฅ˜: MongoTimeoutError: 30000ms ํ›„ ์„œ๋ฒ„ ์„ ํƒ ์‹œ๊ฐ„ ์ดˆ๊ณผ
[nodemon] ์•ฑ ์ถฉ๋Œ - ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ํŒŒ์ผ ๋ณ€๊ฒฝ ๋Œ€๊ธฐ ์ค‘...

Here is how I run MongoDB using docker during development:

๋„์ปค ์‹คํ–‰ -p ${MONGO_PORT}:${MONGO_PORT} --์ด๋ฆ„ mongo -d mongo
```

ํ˜„์žฌ ๋™์ž‘์ด ๋ฒ„๊ทธ์ธ ๊ฒฝ์šฐ ์žฌํ˜„ ๋‹จ๊ณ„๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

์œ„ ์ฐธ์กฐ

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Mongoose๋Š” mongoose๊ฐ€ ์ œ์•ˆํ•˜๋Š” ๋Œ€๋กœ useUnifiedTopology: true ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ œ๋Œ€๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์ค‘์ธ Node.js, Mongoose ๋ฐ MongoDB์˜ ๋ฒ„์ „์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋…ธ๋“œ: v10.16.2
๋ชฝ๊ตฌ์Šค: 5.7.1(์ตœ์‹ )
MongoDB: db ๋ฒ„์ „ v4.2.0

๊ด€๋ จ ๋ฌธ์ œ:

can't reproduce

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š”! ์ œ ์ด๋ฆ„์€ Matt์ด๊ณ  MongoDB์˜ ๋“œ๋ผ์ด๋ฒ„ ํŒ€์— ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„ ๋ชจ๋‘๊ฐ€ ๊ฒช๊ณ  ์žˆ๋Š” ์ •์ „์— ๋Œ€ํ•ด ๋งค์šฐ ์œ ๊ฐ์Šค๋Ÿฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉฐ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•ฝ๊ฐ„์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ๋“œ๋ฆฌ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋งค์šฐ ์ˆ˜์ˆ ์ ์ธ ํ”„๋กœ์„ธ์Šค๋กœ ๋ฐํ˜€์ง„ ๊ธฐ์กด ํ† ํด๋กœ์ง€ ์œ ํ˜•์„ ๋‹จ๊ณ„์ ์œผ๋กœ ์—†์• ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ํ˜•์„ ๋‹จ๊ณ„์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๋ฉด ๋“œ๋ผ์ด๋ฒ„์˜ ์œ ์ง€ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ํฌ๊ฒŒ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ฉฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๋‹ค ์•ˆ์ •์ ์ด๊ณ  ํšจ์œจ์ ์ธ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ํŠนํžˆ "ํ†ตํ•ฉ ํ† ํด๋กœ์ง€"๋ฅผ ๋„์ž…ํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ ํ’€ ์žฌ์ž‘์„ฑ์„ ๋„์ž…ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ํ’€์ด ์šฐ๋ฆฌ๊ฐ€ ์˜ˆ์ƒํ•œ ๊ฒƒ๋ณด๋‹ค ํ† ํด๋กœ์ง€ ์œ ํ˜•์— ๋” ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์œผ๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ ํŠนํžˆ ์„œ๋ฒ„ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๊ด€๋ จํ•˜์—ฌ ์•ฝ๊ฐ„์˜ ํšŒ๊ท€๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ ์•„์นจ์— ๋‚˜๋Š” ๋‹น์‹ ์ด ์ง๋ฉดํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋“œ๋ผ์ด๋ฒ„์˜ v3.3.4-rc0 ์„ ํ‘ธ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ด ๋ณด๊ณ  ๊ฒฝํ—˜์„ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ๋œ ๊ธฐ์กด ํ‹ฐ์ผ“ ๊ฐ๊ฐ์— ๋Œ€ํ•ด NODE-2267 ์— ๋Œ€ํ•œ ์˜๊ฒฌ์„

๋ชจ๋“  78 ๋Œ“๊ธ€

์–ด๋–ค ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? ๋˜ํ•œ '์„œ๋ฒ„ ์„ ํƒ ์‹œ๊ฐ„ ์ดˆ๊ณผ' ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ์Šคํƒ ์ถ”์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ €์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋ณด๊ณ ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ๋ฅผ ํŒŒ๊ณ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜ ์ž์‹ ์€ Docker ๋˜๋Š” VM์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๊ฒƒ์ด ํ•ญ์ƒ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋Š” ์•Š์ง€๋งŒ ์˜ค๋Š˜ ์‹œ๊ฐ„ ์ดˆ๊ณผ(30k)๋กœ ์ธํ•ด ๋‚ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†์—ˆ์œผ๋ฉฐ useUnifiedTopology ํ”Œ๋ž˜๊ทธ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ฆ‰์‹œ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. .

Atlas ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชฝ๊ตฌ์Šค๋Š” 5.7.1์ž…๋‹ˆ๋‹ค
MongoDb๋Š” 3.3.2์ž…๋‹ˆ๋‹ค.
๋…ธ๋“œ๋Š” 12.9.1์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

mongoose.createConnection(uri,
    {
        useCreateIndex: true,
        useNewUrlParser: true,
        useUnifiedTopology: true, // commented out currently
        dbName: db_name
    });

๋ชจ๋ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

import mongoose from 'mongoose';
import * as db_conns from '../db-connections'; // this is an object of connections generated via createConnection

// ... schema definition, for a model called 'article' from a collection called 'article'

// `site_content` is the name of a connection
export default db_conns.connections.site_content.model(`article`, schema, `article`);

๊ทธ๋Ÿฌ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

// ...
await query.model.find(query_expr).limit(30); // query_expr can change, however even an empty expression ({}) will cause the same issue
// ...

find ํ˜ธ์ถœ์ด ์ค‘๋‹จ๋˜๊ณ  ์‹œ๊ฐ„ ์ดˆ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@vkarpov15 ์ €๋Š” MongoDB v4.2.0์„ ์ œ๊ณตํ•˜๋Š” ์ตœ์‹  mongo ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
https://hub.docker.com/_/mongo

์˜ค๋ฅ˜๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ๋ฐœ์ƒํ•˜์ง€๋งŒ { useUnifiedTopology: true } ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„์—๋„ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์ž˜๋ชป๋œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  mongo ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชฝ๊ตฌ์Šค
.connect(process.env.MONGO_URI, {
useUnifiedTopology: ์ฐธ,
useNewUrlParser: ์ฐธ,
})
.then(() => console.log('DB ์—ฐ๊ฒฐ๋จ!'))
.catch(์˜ค๋ฅ˜ => {
console.log(์˜ค๋ฅ˜, err.message);
});
์‹œ์ž‘๋˜๋ฉด ์ฝ˜์†”์— ๋„์ฐฉํ•ฉ๋‹ˆ๋‹ค.
[ํ•จ์ˆ˜: ์˜ค๋ฅ˜] { stackTraceLimit: 16, prepareStackTrace: undefined } acccluster-shard-00-01-xx47j.mongodb์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ 0. ๊ทธ๋ฌผ:27017 ํ์‡„

์–ด๋–ค ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜์กฐ์ฐจ๋„ ์ง€๊ธˆ์ด ๋ฌธ์ œ์— ์ง๋ฉด ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค ...

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ฃผ๋‹ˆ์–ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์ด๊ณ  nodejs-express-graphql-mongoose-mongodbAtlas๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

(๋…ธ๋“œ:9392) UnhandledPromiseRejectionWarning: MongoTimeoutError: 30000ms ํ›„์— ์„œ๋ฒ„ ์„ ํƒ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
Timeout.setTimeout์—์„œ (MyAppPathgraphql2node_modulesmongodblibcoresdamtopology.js:850:16)
์‹œ๊ฐ„ ์ดˆ๊ณผ ์‹œ(timers.js:436:11)
tryOnTimeout์—์„œ (timers.js:300:5)
listOnTimeout์—์„œ (timers.js:263:5)
Timer.processTimers์—์„œ (timers.js:223:10)
(node:9392) UnhandledPromiseRejectionWarning: ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ์•ฝ์†์ด ๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๋Š” catch ๋ธ”๋ก ์—†์ด ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ๋‚ด๋ถ€๋ฅผ ๋˜์ง€๊ฑฐ๋‚˜ .catch()๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ์•ฝ์†์„ ๊ฑฐ๋ถ€ํ•˜์—ฌ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. (๊ฑฐ๋ถ€ ID: 1)
(node:9392) [DEP0018] DeprecationWarning: ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ์•ฝ์† ๊ฑฐ๋ถ€๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ์•ฝ์† ๊ฑฐ๋ถ€๋Š” 0์ด ์•„๋‹Œ ์ข…๋ฃŒ ์ฝ”๋“œ๋กœ Node.js ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฒคํŠธ.js:174
๋˜์ง€๋‹ค ์–ด; // ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ '์˜ค๋ฅ˜' ์ด๋ฒคํŠธ
^^

์˜ค๋ฅ˜: ECONNRESET ์ฝ๊ธฐ
TLSWrap.onStreamRead์—์„œ(internal/stream_base_commons.js:111:27)
๋‹ค์Œ ์œ„์น˜์—์„œ '์˜ค๋ฅ˜' ์ด๋ฒคํŠธ ๋ฐœ์ƒ:
TLSSocket์—์„œ.(MyAppPathnode_modulesmongodblibcoreconnectionconnection.js:321:10)
Object.onceWrapper์—์„œ (events.js:286:20)
TLSSocket.emit์—์„œ(events.js:198:13)
EmmitErrorNT์—์„œ(๋‚ด๋ถ€/์ŠคํŠธ๋ฆผ/destroy.js:91:8)
emitErrorAndCloseNT์—์„œ (internal/streams/destroy.js:59:3)
process._tickCallback์—์„œ (๋‚ด๋ถ€/ํ”„๋กœ์„ธ์Šค/next_tick.js:63:19)

useUnifiedTopology ํ™œ์„ฑํ™”ํ•œ ํ›„์—๋„ ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

MongoTimeoutError: Server selection timed out after 30000 ms
    at Timeout.setTimeout [as _onTimeout] (/opt/app/node_modules/mongodb/lib/core/sdam/topology.js:850:16)
    at ontimeout (timers.js:498:11)
    at tryOnTimeout (timers.js:323:5)
    at Timer.listOnTimeout (timers.js:290:5)

๋‚˜๋Š” ์ง€๊ธˆ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค
MaxListenersExceededWarning: ๊ฐ€๋Šฅํ•œ EventEmitter ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๊ฐ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 11๊ฐœ์˜ topologyDescriptionChanged ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ๊ณ ๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ ์ด mongoDB ๋ฌธ์„œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
https://jira.mongodb.org/browse/NODE-2123

๊ทธ๊ฒƒ์€ ๋‘ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
"์„œ๋ฒ„ ์„ ํƒ ์‹œ๊ฐ„ ์ดˆ๊ณผ" ๋ฐ "MaxListenersExceededWarning" ๋ฐ ๋‘ ์˜ค๋ฅ˜ ๋ชจ๋‘ ํ†ตํ•ฉ ํ† ํด๋กœ์ง€ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ฒฐ์ฝ” ์–ธ๊ธ‰๋˜์ง€ ์•Š์€ ํš๊ธฐ์ ์ธ ๋ณ€ํ™”๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๋ผ์ด๋ธŒ ์„œ๋ฒ„์—์„œ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— { useUnifiedTopology: false }๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด ๋ฌธ์ œ์— ์ง‘์ค‘ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๊ฑฐ๋‚˜ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ œ์•ˆ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๋ชจ๋‘ ์˜ค๋ฅ˜๋ฅผ ์–ป๊ณ ์žˆ๋‹ค (์„œ๋ฒ„ ์„ ํƒ์€ 30000 MS์™€ MaxListenersExceededWarning ํ›„ ์‹œ๊ฐ„ ์ดˆ๊ณผ :. ๊ฐ€๋Šฅํ•œ EventEmitter ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํƒ์ง€ ๋œ 11)์ด ๋‚ด๊ฐ€ ์ƒ๊ฐ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋„๋ก useUnifiedTopology๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ.

์ด๊ฑฐ ์žฌ๋„์ „ ํ•ด๋ดค๋Š”๋ฐ ์•ˆ๋˜๋”๋ผ๊ตฌ์š”. ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

1) ์ฟผ๋ฆฌ ์ง์ „์— ์„œ๋ฒ„ ์ข…๋ฃŒ

2) ์—ฐ๊ฒฐ์ด ๋Š๊ธด ์ƒํƒœ์—์„œ ์ฟผ๋ฆฌํ•˜๊ธฐ

3) ์ฟผ๋ฆฌ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰

์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ์•„์ง ์ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

'use strict';

const mongoose = require('mongoose');

run().catch(err => console.log(err));

async function run() {
  mongoose.set('useUnifiedTopology', true);
  mongoose.set('useNewUrlParser', true);

  await mongoose.connect('mongodb://localhost:27017/test');

  const Model = mongoose.model('Test', new mongoose.Schema({ name: String }));

  console.log('Query...');
  await Model.findOne();
  console.log('Done');
}

๋˜๋Š” ์ตœ์†Œํ•œ ์‚ฌ์šฉ ์ค‘์ธ Mongoose ๋ฒ„์ „์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์„ธ์š”. ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์„œ๋ฒ„, ๋ณต์ œ๋ณธ ์„ธํŠธ ๋˜๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€ ๊ทธ๋ฆฌ๊ณ  Mongoose๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ npm ๋ชจ๋“ˆ์„ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ์ด mongoose์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ Mongo ์ž์ฒด์˜ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๋‹นํžˆ ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

@ vkarpov15 , ๋‚ด ์˜๊ฒฌ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๊ฑฐ๊ธฐ์— ๋‚ด ํ™˜๊ฒฝ์„ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋ชฝ๊ตฌ์Šค๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@vkarpov15 ์ด ๋ฌธ์ œ๋Š” ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ ์ค‘์ผ ๋•Œ 2-3์ผ๋งˆ๋‹ค ๋ฌด์ž‘์œ„๋กœ ๋‚˜ํƒ€๋‚˜๋ฏ€๋กœ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋”๋ผ๋„ ์„œ๋ฒ„๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹น๋ถ„๊ฐ„ ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Mongo๋Š” ์•ž์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ฒฝ๊ณ ํ•˜์ง€๋งŒ ๋‹น๋ถ„๊ฐ„์€ ์ด ๋ฌธ์ œ๋ฅผ ์™„์ „ํžˆ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹น๋ถ„๊ฐ„ ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Mongo๋Š” ์•ž์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ฒฝ๊ณ ํ•˜์ง€๋งŒ ๋‹น๋ถ„๊ฐ„์€ ์ด ๋ฌธ์ œ๋ฅผ ์™„์ „ํžˆ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

useUnifiedTopology: true ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์•ฑ์ด ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋ชฝ๊ตฌ์Šค ๋ฒ ๋ฆฌ์˜จ: 5.7.4
Screenshot from 2019-10-10 11-07-11

useUnifiedTopology ์ฃผ์„์„ ๋‹ฌ์•„ ๋‚ด ๋นŒ๋“œ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ (๋ถ„๋ช…ํžˆ) ๋ฌด์ž‘์œ„ ๋ฐฉ์‹์œผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@rpedroni ์Šฌํ”„๊ฒŒ๋„, ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค...

์—ฌ๊ธฐ์—์„œ๋„ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„๋Š” ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ useUnifiedTopology์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

MongoDB ์—ฐ๊ฒฐ ์˜ต์…˜

var options = {
    useCreateIndex: true,
    useNewUrlParser: true,
    useFindAndModify: false,
    useUnifiedTopology: true,
    promiseLibrary: global.Promise
};

์„œ๋ฒ„ ๋กœ๊ทธ

MongoTimeoutError: Server selection timed out after 30000 ms 
Oct 16 12:56:31 app/web.1:     at Timeout.setTimeout (/app/node_modules/mongodb/lib/core/sdam/topology.js:850:16) 
Oct 16 12:56:31 app/web.1:     at Shim.applySegment (/app/node_modules/newrelic/lib/shim/shim.js:1424:20) 
Oct 16 12:56:31 app/web.1:     at Timeout.wrappedCallback [as _onTimeout] (/app/node_modules/newrelic/lib/shim/shim.js:1281:21) 
Oct 16 12:56:31 app/web.1:     at ontimeout (timers.js:436:11) 
Oct 16 12:56:31 app/web.1:     at tryOnTimeout (timers.js:300:5) 
Oct 16 12:56:31 app/web.1:     at listOnTimeout (timers.js:263:5) 
Oct 16 12:56:31 app/web.1:     at Timer.processTimers (timers.js:223:10) 

์šฐ๋ฆฌ๋„ ์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์œผ๋ฉฐ ๋ชฝ๊ตฌ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Node.js์šฉ MongoDB ๋“œ๋ผ์ด๋ฒ„ ์ž์ฒด์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” https://jira.mongodb.org/browse/NODE-2249 ์—์„œ๋„ ๋ณด๊ณ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์˜ค๋Š˜ ๊ณต๊ฐœ๋œ ๋“œ๋ผ์ด๋ฒ„ ๋ฒ„์ „ 3.3.3์€ MongoTimeoutError ์— ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฒ„๊ทธ ์ˆ˜์ •์œผ๋กœ ์ธํ•ด ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ง€์ •๋œ ์ž‘์—…(๋˜๋Š” ์ดˆ๊ธฐ ์—ฐ๊ฒฐ)์˜ ์ฝ๊ธฐ ๊ธฐ๋ณธ ์„ค์ •์„ ์ถฉ์กฑํ•˜๋Š” ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์ด ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋…ธ๋“œ๊ฐ€ ๋‹ค์šด๋˜๋Š” ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„์˜ ์ตœ์‹  v3.3.3์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€ ์กฐ์‚ฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” MongoTimeoutError์™€ ํ•จ๊ป˜ ์ƒˆ๋กœ์šด ์ด์œ  ํ•„๋“œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ๋ฒ„์ „์—๋Š” ๋ณต์ œ ์„ธํŠธ์˜ ๊ตฌ์„ฑ์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ดˆ๊ธฐ ์—ฐ๊ฒฐ ์‹œ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๊ทธ ์ˆ˜์ •์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ด ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•˜๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

https://jira.mongodb.org/browse/NODE-2249?focusedCommentId=2485028&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment -2485028์—์„œ ์ธ์šฉ

Mongo Atlas์— ์—ฐ๊ฒฐํ•˜์—ฌ ๊ฐœ๋ฐœ ๋ฐ ํ”„๋กœ๋•์…˜ ๋ชจ๋‘์—์„œ ๋™์ผํ•˜๊ฒŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ mongodb ์•„ํ‹€๋ผ์Šค์— ์—ฐ๊ฒฐํ•˜๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์•„ํ‹€๋ผ์Šค๊ฐ€ ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์ด์™€ ์œ ์‚ฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํ›„์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋ณต์ œ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๊ฒƒ์„ ๋กœ์ปฌ๋กœ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ณต์ œ๋ณธ ์„ธํŠธ ์žฅ์•  ์กฐ์น˜ ๋˜๋Š” ๊ธฐ๋ณธ ์ข…๋ฃŒ ์‹œ์—๋„ ์ฟผ๋ฆฌ๋ฅผ ๊ณ„์† ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์„ ํƒ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

'use strict';

const mongoose = require('mongoose');

run().catch(err => console.log(err));

async function run() {
  mongoose.set('useUnifiedTopology', true);
  mongoose.set('useNewUrlParser', true);

  await mongoose.connect('mongodb://localhost:27017,localhost:27018,localhost:27019/test?replicaSet=rs');

  const Model = mongoose.model('Test', new mongoose.Schema({ name: String }));


  while (true) {
    console.log(new Date(), 'Query...');
    await Model.findOne();
    await new Promise(resolve => setTimeout(resolve, 5000));
  }
} 

๋‚ด ๊ฐ€์žฅ ์ข‹์€ ์ถ”์ธก์€ @rvanmil ์˜ ์„ค๋ช…์ด ์ •ํ™•ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. [email protected] (๋ช‡ ์‹œ๊ฐ„ ์•ˆ์— ๋ฐฐ์†กํ•  ์˜ˆ์ •)์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ์ด ๋ฌธ์ œ๊ฐ€ ์ง€์†๋˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋˜ํ•œ Atlas์—์„œ ๋‹ค์‹œ ์‹œ์ž‘์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๋ฌธ์ œ๋Š” Atlas๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

@ vkarpov15 ์žฌ์‹œ์ž‘์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ผ์‹œ ์ค‘์ง€/์žฌ๊ฐœํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. M10+ ์‚ฌ์ด์ฆˆ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ์ด๊ฒƒ์ด ๋Œ€์‹  Atlas ๋ฌธ์ œ์ธ์ง€๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ๋œ MongoDB ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์•„์ง ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†์—ˆ์ง€๋งŒ ํ…Œ์ŠคํŠธํ•˜๊ฒŒ ๋˜๋ฉด ์—ฌ๊ธฐ์— ๋‹ค์‹œ ๋ณด๊ณ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

useUnifiedTopology ํ”Œ๋ž˜๊ทธ์— ๊ด€๊ณ„์—†์ด ์˜ค๋Š˜ Atlas ํ”„๋ฆฌ ํ‹ฐ์–ด์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜: MongoTimeoutError: Server selection timed out after 30000 ms

mLab๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ MongoDB ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์—ˆ๊ณ  ์•ฝ๊ฐ„ ์–ด๋ฆฌ์„์€ ๊ฒƒ์œผ๋กœ ๋๋‚ฌ์ง€ ๋งŒ ์—ฌ๊ธฐ์—์„œ๋„ ๋๋‚˜๋Š” ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด์จŒ๋“  ๊ณต์œ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

MongoTimeoutError์—์„œ '์ด์œ ' ํ•„๋“œ๋ฅผ ํ™•์ธํ–ˆ๋Š”๋ฐ 'MongoError: ์ž˜๋ชป๋œ ์ธ์ฆ ์ธ์ฆ ์‹คํŒจ'๋ผ๊ณ  ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋•Œ ๋‚ด๊ฐ€ ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์•„๋‹Œ ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์— mongoDB ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.
์ด์ œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

MongoDB Atlas๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ IP ์ฃผ์†Œ๋ฅผ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค๋กœ ์ด๋™ํ•˜์—ฌ ํ˜„์žฌ IP ์ฃผ์†Œ๋ฅผ ํŽธ์ง‘ํ•˜๊ณ  ์–ด๋””์„œ๋‚˜ ์•ก์„ธ์Šค ํ—ˆ์šฉ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

Atlas๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ์—๋งŒ ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— 0.0.0.0/0 IP๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :

  • ๋ชฝ๊ตฌ์Šค: 5.7.6
  • ๋…ธ๋“œ: v10.16.3
  • ์•„ํ‹€๋ผ์Šค ํ”„๋ฆฌ ํ‹ฐ์–ด

๋กœ์ปฌ mongodb ์„œ๋ฒ„์—์„œ ์žฌ์ƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์—์„œ ๋ชจ๋“  ์ฟผ๋ฆฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•ก์„ธ์Šค์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. 0/0/0/0 ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์œผ๋ฉฐ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์„œ๋ฒ„๊ฐ€ ์•„ํ‹€๋ผ์Šค์—์„œ ๋‹ค์‹œ ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค. ๋‹ค์ค‘ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํด๋Ÿฌ์Šคํ„ฐ(m10+) ๋ฐ ์˜ˆ์•ฝ๋œ ์œ ์ง€ ๊ด€๋ฆฌ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์˜ค๋ž˜ ๋‹ฌ๋ ค
์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ ์ค‘์ด๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2019๋…„ 10์›” 23์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 7์‹œ 42๋ถ„ Mohammad Mazedul ์ด์Šฌ๋žŒ, <
[email protected]>์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

Atlas๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ์—๋งŒ ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ถ”๊ฐ€๋ฅผ ์‹œ๋„ํ–ˆ๋‹ค
ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— 0.0.0.0/0 IP๊ฐ€ ์žˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :

  • ๋ชฝ๊ตฌ์Šค: 5.7.6
  • ๋…ธ๋“œ: v10.16.3
  • ์•„ํ‹€๋ผ์Šค ํ”„๋ฆฌ ํ‹ฐ์–ด

๋กœ์ปฌ mongodb ์„œ๋ฒ„์—์„œ ์žฌ์ƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฟผ๋ฆฌ๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์„ฑ๊ณต์ ์œผ๋กœ.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/Automattic/mongoose/issues/8180?email_source=notifications&email_token=AAUHUCYYQIQ5U42IBYT7CQTQQA2B7A5CNFSM4IYQ3ZB2YY3PNVWWK3TUL52HS4DFWEXG43
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAUHUCY5SNFGGCPTGW6GH5DQQA2B7ANCNFSM4IYQ3ZBQ
.

์ €๋„ ๊ทธ๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ 0.0.0.0/0๊ณผ ๋‚ด IP ์ฃผ์†Œ๋ฅผ ์•„ํ‹€๋ผ์Šค์˜ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

~์ด๊ฒƒ์€ MongoDB Atlas๋งŒ์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.~

MongoDB Atlas๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜ MongoDB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

docker-compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "MongoTimeoutError: Server selection timed out after 30000"์„ ์œ ๋ฐœํ•˜๋Š” ์กฐ๊ฑด์„ ์„ฑ๊ณต์ ์œผ๋กœ ์žฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/anzairyo0127/mongodb-connection-bug

๋จผ์ € ์ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

$ docker-compose up -d
$ docker-compose exec a mongo /tmp/conf/init.js
$ docker-compose exec node sh
$ npm i && npm run build
$ npm run start
> 0times
> waiting ....
> {_id: 5db27454b77b210040f2f84e, id: 1, text: 'hogehoge'}
> 1times
> waiting ....
> {_id: 5db27454b77b210040f2f84e, id: 1, text: 'hogehoge'}
> xtimes
> waiting ....
> {_id: 5db27454b77b210040f2f84e, id: 1, text: 'hogehoge'}
> ......



md5-cc5c53b3c0322ef988c85b63b4bb6c4e



$ docker-compose restart a b c



md5-788ff0ed4e46daf35b1b8594351b929f



> xtimes
> waiting ....
> (node: 4360) UnhandledPromiseRejectionWarning: MongoTimeoutError: Server selection timed out after 30000 ms
> at Timeout.setTimeout [as _onTimeout] (/var/work/node_modules/mongodb/lib/core/sdam/topology.js:878:9)
> at ontimeout (timers.js: 436: 11)
> at tryOnTimeout (timers.js: 300: 5)
> at listOnTimeout (timers.js: 263: 5)
> at Timer.processTimers (timers.js: 223: 10)
> (node: 4360) 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 (). (rejection id: 1)
> (node: 4360) [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.

@anzairyo0127 ์ตœ์‹  3.3.3 mongodb ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋™์ผํ•œ ์ž‘์—…์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@rvanmil ver3.3.3 ์—์„œ ์žฌํ˜„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” mongoDB๊ฐ€ ๋ณต์ œ ๊ตฌ์„ฑ์— ์žˆ๊ณ  ์ธ์Šคํ„ด์Šค ์ค‘ ํ•˜๋‚˜(์•„๋งˆ๋„ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค)๊ฐ€ ๋‹ค์šด๋˜๊ธฐ ์ง์ „์ด๋‚˜ ์‹œ์ž‘ ์งํ›„์— ๋ช…๋ น์„ ์ˆ˜์‹ ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
MongoDB Atlas์—์„œ ์ด๋Ÿฐ ์ผ์ด ์ž์ฃผ ์ผ์–ด๋‚˜๋Š” ์ด์œ ๋Š” MongoDB Atlas๊ฐ€ ์ •๊ธฐ์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด ํด๋Ÿฌ์Šคํ„ฐ์— ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๋ฌธ์ œ๋Š” ....

1๋‹ฌ ๋„˜๊ฒŒ ๊ฐ™์€ ๋ฌธ์ œ์ธ๋ฐ ์•„์ง ํ•ด๊ฒฐ์ด ์•ˆ๋˜๋„ค์š” -_-

[email protected]๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@octavioamu ๋” ์ž์„ธํžˆ

์–ด๋–ค ๋ฒ„์ „์ด ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ๋ชฐ๋ผ์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. mongo๋กœ ํ•œ๋™์•ˆ ์ž‘์—…ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ์•„์ฃผ ์˜ค๋ž˜๋œ ๋ฒ„์ „์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ชฝ๊ตฌ์Šค ๋ฒ„์ „์€ @5.7.7์— ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฉ”์‹œ์ง€๋Š” ๋‚˜์—๊ฒŒ ์˜๊ตฌ์  ์ด์—ˆ๊ณ  [email protected] (brew๋ฅผ ํ†ตํ•ด ์„ค์น˜)๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

{useUnifiedTopology: false} ์„ค์ •ํ•˜๋ฉด ์ธ์ฆ ์‹คํŒจ

(node:19948) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoError: Authentication failed.]

{useUnifiedTopology: true} ์„ค์ •ํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

(node:20213) UnhandledPromiseRejectionWarning: MongoTimeoutError: Server selection timed out after 30000 ms

๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ํ™•์‹คํžˆ ๋งž์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชจ๋“  ๊ฒƒ๊ณผ LST Node.js์˜ ์ตœ์‹  ๋ฒ„์ „์ด ์žˆ๋Š” ๋กœ์ปฌ ์‹œ์Šคํ…œ์—์„œ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์ธ์ฆ ์—†์ด ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋กœ์ปฌ์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ๋ฅผ ๋“ค์–ด const MONGODB_URI = "mongodb://localhost/fullstack" ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฌธ์ œ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ์ธ์ฆ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‹ค์Œ์€ ๋กœ์ปฌ ์„ค์ •์—์„œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋Š” MWE์ž…๋‹ˆ๋‹ค.

const mongoose = require('mongoose')
// const url = 'mongodb://fullstack:fullstack@localhost/fullstack'
const url = 'mongodb://localhost/fullstack'
console.log('Connection url = ', url, 'connecting')
mongoose.connect(url, { useNewUrlParser: true, useUnifiedTopology: true })
console.log('Connected.')
mongoose.connection.close()

MongoDB ์„ค์ •์— ์ตœ์‹  Docker ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ๋„ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„๋Š” ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ useUnifiedTopology์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

MongoDB ์—ฐ๊ฒฐ ์˜ต์…˜

var options = {
    useCreateIndex: true,
    useNewUrlParser: true,
    useFindAndModify: false,
    useUnifiedTopology: true,
    promiseLibrary: global.Promise
};

์„œ๋ฒ„ ๋กœ๊ทธ

MongoTimeoutError: Server selection timed out after 30000 ms 
Oct 16 12:56:31 app/web.1:     at Timeout.setTimeout (/app/node_modules/mongodb/lib/core/sdam/topology.js:850:16) 
Oct 16 12:56:31 app/web.1:     at Shim.applySegment (/app/node_modules/newrelic/lib/shim/shim.js:1424:20) 
Oct 16 12:56:31 app/web.1:     at Timeout.wrappedCallback [as _onTimeout] (/app/node_modules/newrelic/lib/shim/shim.js:1281:21) 
Oct 16 12:56:31 app/web.1:     at ontimeout (timers.js:436:11) 
Oct 16 12:56:31 app/web.1:     at tryOnTimeout (timers.js:300:5) 
Oct 16 12:56:31 app/web.1:     at listOnTimeout (timers.js:263:5) 
Oct 16 12:56:31 app/web.1:     at Timer.processTimers (timers.js:223:10) 

์—ฌ๊ธฐ์—์„œ๋„ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„๋Š” ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ useUnifiedTopology์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

MongoDB ์—ฐ๊ฒฐ ์˜ต์…˜

var options = {
    useCreateIndex: true,
    useNewUrlParser: true,
    useFindAndModify: false,
    useUnifiedTopology: true,
    promiseLibrary: global.Promise
};

์„œ๋ฒ„ ๋กœ๊ทธ

MongoTimeoutError: Server selection timed out after 30000 ms 
Oct 16 12:56:31 app/web.1:     at Timeout.setTimeout (/app/node_modules/mongodb/lib/core/sdam/topology.js:850:16) 
Oct 16 12:56:31 app/web.1:     at Shim.applySegment (/app/node_modules/newrelic/lib/shim/shim.js:1424:20) 
Oct 16 12:56:31 app/web.1:     at Timeout.wrappedCallback [as _onTimeout] (/app/node_modules/newrelic/lib/shim/shim.js:1281:21) 
Oct 16 12:56:31 app/web.1:     at ontimeout (timers.js:436:11) 
Oct 16 12:56:31 app/web.1:     at tryOnTimeout (timers.js:300:5) 
Oct 16 12:56:31 app/web.1:     at listOnTimeout (timers.js:263:5) 
Oct 16 12:56:31 app/web.1:     at Timer.processTimers (timers.js:223:10) 

๋‚˜๋Š” mongo db atlas๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์šฐ๋ฆฌ๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

dub-tools-jobs: orders - error MongoTimeoutError: Server selection timed out after 30000 ms 
Oct 29 13:16:30 app/worker.1:      at Timeout.setTimeout [as _onTimeout] (/app/node_modules/mongoose/node_modules/mongodb/lib/core/sdam/topology.js:850:16) 
Oct 29 13:16:30 app/worker.1:     at ontimeout (timers.js:436:11) 
Oct 29 13:16:30 app/worker.1:     at tryOnTimeout (timers.js:300:5) 
Oct 29 13:16:30 app/worker.1:     at listOnTimeout (timers.js:263:5) 
Oct 29 13:16:30 app/worker.1:     at Timer.processTimers (timers.js:223:10) +2m

์ด ๋ชจ๋“  ๊ฒƒ์€ ์ œ์•ˆ๋œ ํ•˜๋‚˜์˜ ๊ถŒ์žฅ ์‚ฌํ•ญ์œผ๋กœ useUnifiedTopology์— ์ฃผ์„์„ ๋‹ฌ๋ฉด์„œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

// mongodb connections
var options = {
    useCreateIndex: true,
    useNewUrlParser: true,
    useFindAndModify: false,
    // useUnifiedTopology: true,      
    promiseLibrary: global.Promise
};

mongoose ๋ฐ mongoDB ์•„ํ‹€๋ผ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ต์…˜์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
mongoose.connect(DATABASE_URL, { useNewUrlParser: true, useUnifiedTopology: true })

์ด ํ›„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด mongoDB์˜ ๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค๋กœ ์ด๋™ํ•˜์—ฌ mongoDB์˜ IP ์ฃผ์†Œ๋ฅผ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด ์˜ค๋ฅ˜๋Š” ๋ฉฐ์น ๋งˆ๋‹ค ๋‚ด ์•ฑ์„ ์ถฉ๋Œ์‹œํ‚ค๋ฉฐ ์ด๊ฒƒ์ด IP ์ฃผ์†Œ์˜ ์•ก์„ธ์Šค ๋˜๋Š” ํ—ˆ์šฉ ๋ชฉ๋ก๊ณผ ๊ด€๋ จ์ด ์—†์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :

  • ๋ชฝ๊ตฌ์Šค: 5.7.6
  • ๋…ธ๋“œ: v10.16.3
  • ์•„ํ‹€๋ผ์Šค ํ”„๋ฆฌ ํ‹ฐ์–ด

์ง€๊ธˆ์€ useUnifiedTopology: true ๋„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด Atlas ๋˜๋Š” mongo์™€ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ณต์ œ ์„ธํŠธ MongoDB ์„œ๋ฒ„์˜ ๋ฌธ์ œ์ด๋ฉฐ ์—ฌ๊ธฐ์—์„œ MongoDB ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์†”๋ฃจ์…˜์„ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค.

https://jira.mongodb.org/browse/NODE-2267

@vkarpov15 ๋Š” Mongoose์™€ ๊ด€๋ จ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์ด์œ ๋กœ ์—ฐ๊ฒฐ์ด ์‹คํŒจํ•˜์—ฌ ํ˜„์žฌ IP ์ฃผ์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค IP ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์—์„œ ์ˆ˜์ •ํ•˜๊ณ  ํ˜„์žฌ IP๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”! ์ œ ์ด๋ฆ„์€ Matt์ด๊ณ  MongoDB์˜ ๋“œ๋ผ์ด๋ฒ„ ํŒ€์— ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„ ๋ชจ๋‘๊ฐ€ ๊ฒช๊ณ  ์žˆ๋Š” ์ •์ „์— ๋Œ€ํ•ด ๋งค์šฐ ์œ ๊ฐ์Šค๋Ÿฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉฐ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•ฝ๊ฐ„์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ๋“œ๋ฆฌ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋งค์šฐ ์ˆ˜์ˆ ์ ์ธ ํ”„๋กœ์„ธ์Šค๋กœ ๋ฐํ˜€์ง„ ๊ธฐ์กด ํ† ํด๋กœ์ง€ ์œ ํ˜•์„ ๋‹จ๊ณ„์ ์œผ๋กœ ์—†์• ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ํ˜•์„ ๋‹จ๊ณ„์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๋ฉด ๋“œ๋ผ์ด๋ฒ„์˜ ์œ ์ง€ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ํฌ๊ฒŒ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ฉฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๋‹ค ์•ˆ์ •์ ์ด๊ณ  ํšจ์œจ์ ์ธ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ํŠนํžˆ "ํ†ตํ•ฉ ํ† ํด๋กœ์ง€"๋ฅผ ๋„์ž…ํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ ํ’€ ์žฌ์ž‘์„ฑ์„ ๋„์ž…ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ํ’€์ด ์šฐ๋ฆฌ๊ฐ€ ์˜ˆ์ƒํ•œ ๊ฒƒ๋ณด๋‹ค ํ† ํด๋กœ์ง€ ์œ ํ˜•์— ๋” ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์œผ๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ ํŠนํžˆ ์„œ๋ฒ„ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๊ด€๋ จํ•˜์—ฌ ์•ฝ๊ฐ„์˜ ํšŒ๊ท€๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ ์•„์นจ์— ๋‚˜๋Š” ๋‹น์‹ ์ด ์ง๋ฉดํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋“œ๋ผ์ด๋ฒ„์˜ v3.3.4-rc0 ์„ ํ‘ธ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ด ๋ณด๊ณ  ๊ฒฝํ—˜์„ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ๋œ ๊ธฐ์กด ํ‹ฐ์ผ“ ๊ฐ๊ฐ์— ๋Œ€ํ•ด NODE-2267 ์— ๋Œ€ํ•œ ์˜๊ฒฌ์„

3.3.4-rc0์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ‘ ๋” ์ž์„ธํ•œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋Š” ๋‚˜์ค‘์— ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

package.json์˜ mongodb ๋ฒ„์ „์„ ๋‹ค์Œ์œผ๋กœ ๋ณ€๊ฒฝํ•œ ํ›„
"mongodb": "3.3.4-rc0",
ํ•ญ์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(์ด ์˜ค๋ฅ˜๋Š” mongodb ๋ฒ„์ „์ด 3.3.3์ผ ๋•Œ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ).

===============================================
npm ์˜ค๋ฅ˜! ๊ฒฝ๋กœ /tmp/app/node_modules/npm/node_modules/abbrev
npm ์˜ค๋ฅ˜! ์ฝ”๋“œ ENOENT
npm ์˜ค๋ฅ˜! ์˜ค๋ฅ˜ ๋ฒˆํ˜ธ -2
npm ์˜ค๋ฅ˜! ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ
npm ์˜ค๋ฅ˜! enoent ENOENT: ํ•ด๋‹น ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์„ '/tmp/app/node_modules/npm/node_modules/abbrev' -> '/tmp/app/node_modules/npm/node_modules/.abbrev.DELETE'๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
npm ์˜ค๋ฅ˜! enoent ์ด๊ฒƒ์€ npm์ด ํŒŒ์ผ์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
npm ์˜ค๋ฅ˜! ์—๋…ธ์—”ํŠธ
npm ์˜ค๋ฅ˜! ์ด ์‹คํ–‰์˜ ์ „์ฒด ๋กœ๊ทธ๋Š” ๋‹ค์Œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
npm ์˜ค๋ฅ˜! /home/vcap/.npm/_logs/2019-11-06T17_19_55_661Z-debug.log
[31;1m ์˜ค๋ฅ˜ [0m ์ข…์†์„ฑ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์—†์Œ: ์ข…๋ฃŒ ์ƒํƒœ 254
๋“œ๋กญ๋ฆฟ ์ปดํŒŒ์ผ ์‹คํŒจ: ๋ชจ๋“  ๊ณต๊ธ‰ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์‹คํŒจ: ์ข…๋ฃŒ ์ƒํƒœ 14
์ข…๋ฃŒ ์ƒํƒœ 223

====================================
๋‚ด npm ๋ฒ„์ „์€ 6.11.3์˜ npm์ž…๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ์ด ์ƒˆ๋กœ์šด mongodb v3.3.4-rc0 ๋นŒ๋“œ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@zhenwan abbrev ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. package-lock.json ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ณ  npm install ๋‹ค์‹œ ์‹คํ–‰ํ•ด ๋ณด์‹ญ์‹œ์˜ค.

๋‹ค์Œ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ํ•˜๊ณ  v3.3.4-rc0 ๋“œ๋ผ์ด๋ฒ„๋กœ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ผ๋ถ€ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ todo MongoDB ์ปฌ๋ ‰์…˜์„ ์ฟผ๋ฆฌํ•˜๋Š” ๊ฐ„๋‹จํ•œ http API GET /api/todos ๋ฅผ ๋…ธ์ถœํ•˜๋Š” Node.js ์›น ์„œ๋ฒ„
  • ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ๋กœ์ปฌ๋กœ ์‹คํ–‰๋˜๋Š” 500ms๋งˆ๋‹ค API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ
  • ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋ฉด MongoDB์—์„œ ์žฅ์•  ์กฐ์น˜๋ฅผ ํŠธ๋ฆฌ๊ฑฐ(๊ธฐ๋ณธ ์žฌ์‹œ์ž‘)ํ•ฉ๋‹ˆ๋‹ค(Atlas์—์„œ๋Š” "Test Failover" ๋ฉ”๋‰ด ์˜ต์…˜์„ ์„ ํƒํ•˜์—ฌ M10 ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค).

์ด ํ…Œ์ŠคํŠธ์˜ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

โœ… Mongodb Node.js 3.3.2 useUnifiedTopology false

> MongoDB failover triggered
> MongoDB 'reconnect' event
> A few http calls with +/- 5000ms response times
> MongoDB failover finished
> Everything back to normal

โŒ Mongodb Node.js 3.3.2 useUnifiedTopology true

> MongoDB failover triggered
> MongoDB 'close' event
> Many MongoNetworkError errors
    {
      "name": "MongoNetworkError",
      "stack": "Error: connect ECONNREFUSED <ip_redacted>:27017
          at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1128:14)",
      "errorLabels": [
        "TransientTransactionError"
      ]
    }
> EventEmitter memory leak warning
    (node:18) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 topologyDescriptionChanged listeners added to [NativeTopology]. Use emitter.setMaxListeners() to increase limit
> Many MongoTimeoutError errors
    {
      "name": "MongoTimeoutError",
      "stack": "MongoTimeoutError: Server selection timed out after 30000 ms
          at Timeout._onTimeout (/app/node_modules/mongodb/lib/core/sdam/topology.js:850:16)
          at listOnTimeout (internal/timers.js:531:17)
          at processTimers (internal/timers.js:475:7)"
    }
> MongoDB failover finished
> Server unable to recover MongoDB connection
> Server restarted manually
> Everything back to normal

โš ๏ธ Mongodb Node.js 3.3.4-rc0 useUnifiedTopology true

> MongoDB failover triggered
> MongoDB 'reconnect' event expected but not seen
> A few http calls with +/- 5000ms response times
> A couple failed http calls:
    {
      "name": "MongoError",
      "stack": "MongoError: Cache Reader No keys found for HMAC that is valid for time: { ts: Timestamp(1573064656, 1) } with id: 6756219367492419585
          at Connection.<anonymous> (/app/node_modules/mongodb/lib/core/connection/pool.js:451:61)
          at Connection.emit (events.js:210:5)
          at processMessage (/app/node_modules/mongodb/lib/core/connection/connection.js:368:10)
          at TLSSocket.<anonymous> (/app/node_modules/mongodb/lib/core/connection/connection.js:537:15)
          at TLSSocket.emit (events.js:210:5)
          at addChunk (_stream_readable.js:308:12)
          at readableAddChunk (_stream_readable.js:289:11)
          at TLSSocket.Readable.push (_stream_readable.js:223:10)
          at TLSWrap.onStreamRead (internal/stream_base_commons.js:182:23)",
      "ok": 0,
      "errmsg": "Cache Reader No keys found for HMAC that is valid for time: { ts: Timestamp(1573064656, 1) } with id: 6756219367492419585",
      "code": 211,
      "codeName": "KeyNotFound"
    }
> MongoDB failover finished
> Everything back to normal

๋”ฐ๋ผ์„œ v3.3.4-rc0 ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ์„œ๋ฒ„๋Š” ์—ฐ๊ฒฐ์„ ๋ณต๊ตฌํ•˜๊ณ  MongoDB์—์„œ ๋ฐ์ดํ„ฐ ์ œ๊ณต์„ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • '๋‹ค์‹œ ์—ฐ๊ฒฐ' ์ด๋ฒคํŠธ๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • "์‹œ๊ฐ„ ๋™์•ˆ ์œ ํšจํ•œ HMAC์— ๋Œ€ํ•œ ์บ์‹œ ํŒ๋…๊ธฐ ํ‚ค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค" ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ๋ช‡ ๊ฐ€์ง€ ์š”์ฒญ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

@mbroadst ์˜ˆ, package-lock.json์„ ์‚ญ์ œํ•˜๋ฉด ๋ˆ„๋ฝ๋œ ํŒŒ์ผ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
2019-11-06T12:52:10.35-0600 [CELL/0] OUT ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฑด๊ฐ•ํ•ด์กŒ์Šต๋‹ˆ๋‹ค
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] ์˜ค๋ฅ˜ /home/vcap/app/node_modules/connect-mongo/src/index.js:135
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] ERR throw err
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] ERR ^
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] ์˜ค๋ฅ˜ ์˜ค๋ฅ˜: 30000ms ํ›„์— ์„œ๋ฒ„ ์„ ํƒ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] Timeout.setTimeout์—์„œ ERR [_onTimeout์œผ๋กœ](/home/vcap/app/node_modules/connect-mongo/node_modules/mongodb/lib/core /sdam/topology.js:878:9)
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] ontimeout ์‹œ ERR(timers.js:469:11)
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] tryOnTimeout์—์„œ ERR(timers.js:304:5)
2019-11-06T12:52:39.06-0600 [APP/PROC/WEB/0] Timer.listOnTimeout์—์„œ ERR(timers.js:264:5)
2019-11-06T12:52:39.35-0600 [APP/PROC/WEB/0] OUT ์ข…๋ฃŒ ์ƒํƒœ 1

@zhenwan ์ดˆ๊ธฐ ์—ฐ๊ฒฐ ์‹œ ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ topology.js:878 ๋Œ€ํ•œ ์—ญ์ถ”์  MongoTimeoutError ์„ ์ˆ˜์‹ ํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค.

ํŠน์ • ์‚ฌ๋ก€๋ฅผ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒˆ jira ํ‹ฐ์ผ“์„ ์—ด์–ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์— ๋ถ™์—ฌ๋„ฃ์€ ๊ฒƒ๋ณด๋‹ค ๋” ์ž์„ธํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@mbroadst
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. v3.3.4-rc0์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ๋ฉ”์‹œ์ง€๊ฐ€ ๊ณ„์† ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

MongoTimeoutError: Server selection timed out after 30000 ms
    at Timeout.setTimeout (api/node_modules/mongodb/lib/core/sdam/topology.js:899:9)
    at ontimeout (timers.js:498:11)
    at tryOnTimeout (timers.js:323:5)
    at Timer.listOnTimeout (timers.js:290:5)

์ œ ๊ฒฝ์šฐ์—๋Š” loopback-connector-mongodb ํ•˜๊ณ  ์žˆ์ง€๋งŒ package.json ์—์„œ mongodb ์˜ ๋งˆ์ง€๋ง‰ ๋ฒ„์ „์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ•์ œ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก resolutions ํ–ˆ์Šต๋‹ˆ๋‹ค.

"resolutions": {
    "mongodb": "^3.3.4-rc0"
  }

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚ด ์—ฐ๊ฒฐ ๋งค๊ฐœ ๋ณ€์ˆ˜

"host": "127.0.0.1",
 "port": 27017,
"database": "***",
"password": "***",
"user": "***",
"authSource": "***",
"useNewUrlParser": true,
"enableGeoIndexing": true

์•„๋ž˜๋Š” ๋‚ด ํ™˜๊ฒฝ ๋งค๊ฐœ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

MongoDB server version: 3.6.3 on localhost
yarn v1.19.1
node v8.16.2 

๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค

์—…๋ฐ์ดํŠธ
๋˜ํ•œ ์—ฐ๊ฒฐ ๋งค๊ฐœ ๋ณ€์ˆ˜์— useUnifiedTopology: true ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

mongoose๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์˜ ๋˜ ๋‹ค๋ฅธ ํ™•์ธ์€ useUnifiedTopology: false ๊ฐ€ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@mbroadst MongoDB ๋์—์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๋ฌด์ง€๋ฅผ ์‹ค๋ก€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ mongodb v3.3.4-rc0์˜ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์–ด๋Š ์‹œ์ ์—์„œ ๋ชฝ๊ตฌ์Šค๋กœ ๊ณ„๋‹จ์‹์œผ๋กœ ๋‚ด๋ ค๊ฐˆ๊นŒ์š”? ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜์šฉํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๊ฐ€ ์•ฝ๊ฐ„ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค.

@mmmmoj ์œ„์˜ @zhenwan ์˜ ์งˆ๋ฌธ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ์Šคํƒ ์ถ”์ ์€ ์‹ค์ œ๋กœ v3.3.4-rc0์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. package-lock.json ์ œ๊ฑฐํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๊ท€ํ•˜์˜ ์‚ฌ๋ก€๋ฅผ ์ž์„ธํžˆ ์กฐ์‚ฌํ•  ์ˆ˜ ์žˆ๋„๋ก jira ํ‹ฐ์ผ“์„ ์ œ์ถœํ•ด ์ฃผ ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@bigsee (๋‚จ์ž GitHub๋Š” ์ด๋ฆ„ ์ž๋™ ์™„์„ฑ์„ ์ข‹์•„ํ•˜์ง€ _ !) ์ด ๊ธฐ๋Šฅ์ด ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๋Š” ์†Œ์‹์„ ๋“ค์œผ๋‹ˆ @vkarpov15 ๊ฐ€ ๋ฆด๋ฆฌ์Šค ์‹œ๊ธฐ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒŒ ํ•˜๊ฒ ์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ๊ธด๋ฐ€ํ•˜๊ฒŒ ํ˜‘๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ทธ๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์„ ์œ„ํ•ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. :)

@mbroadst
์™„๋ฃŒ! ๊ฐ์‚ฌ ํ•ด์š”
๋…ธ๋“œ-2313

@mbroadst ํ•˜! ์–ด์ƒ‰ํ•œ ์ด๋ฆ„ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค!

๋‚ด๊ฐ€ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๋งํ–ˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋‚˜ํƒ€๋‚˜๋Š” ์˜ค๋ฅ˜์˜ ๋ฌด์ž‘์œ„์ ์ธ ํŠน์„ฑ์„ ๊ฐ์•ˆํ•  ๋•Œ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ์•ฑ์„ ์ฝœ๋“œ ์Šคํƒ€ํŠธํ•  ๋•Œ ์˜ˆ์ƒ๋˜๋Š” ์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ์ด์ œ ๋กœ๊ทธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์•ฝ๊ฐ„ ๋ฌด์„œ์šด ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Unhandled rejection: { MongoNetworkError: failed to connect to server [myserver.mlab.com:55841] on first connect [{ MongoNetworkError: connection 0 to myserver.mlab.com:55841 timed out
    at Socket.<anonymous> (/var/task/node_modules/mongodb/lib/core/connection/connection.js:335:7)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:106:13)
    at Socket.emit (events.js:208:7)
    at Socket._onTimeout (net.js:420:8)
    at ontimeout (timers.js:482:11)
    at tryOnTimeout (timers.js:317:5)
    at Timer.listOnTimeout (timers.js:277:5) name: 'MongoError', [Symbol(mongoErrorContextSymbol)]: {} }]
    at Pool.<anonymous> (/var/task/node_modules/mongodb/lib/core/topologies/server.js:431:11)
    at emitOne (events.js:116:13)
    at Pool.emit (events.js:211:7)
    at connect (/var/task/node_modules/mongodb/lib/core/connection/pool.js:580:14)
    at callback (/var/task/node_modules/mongodb/lib/core/connection/connect.js:109:5)
    at provider.auth.err (/var/task/node_modules/mongodb/lib/core/connection/connect.js:352:21)
    at _authenticateSingleConnection (/var/task/node_modules/mongodb/lib/core/auth/auth_provider.js:66:11)
    at sendAuthCommand (/var/task/node_modules/mongodb/lib/core/auth/scram.js:177:16)
    at Connection.errorHandler (/var/task/node_modules/mongodb/lib/core/connection/connect.js:321:5)
    at Object.onceWrapper (events.js:317:30)
    at emitTwo (events.js:126:13)
    at Connection.emit (events.js:214:7)
    at Socket.<anonymous> (/var/task/node_modules/mongodb/lib/core/connection/connection.js:333:10)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:106:13)
    at Socket.emit (events.js:208:7)
  name: 'MongoNetworkError',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {} }

์˜ˆ์ „์—๋Š” MongoTimeoutError ์˜€์œผ๋‚˜ ์ง€๊ธˆ์€ MongoNetworkError ... ...์•„์ด๋””์–ด๊ฐ€ ์žˆ๋‚˜์š”?

@bigsee ๊ทธ ์˜ค๋ฅ˜๋Š” ํ†ตํ•ฉ ํ† ํด๋กœ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์ง€ _ useUnifiedTopology: true ๋ฅผ MongoClient ์— ์ „๋‹ฌํ•˜์—ฌ ํ™œ์„ฑํ™”ํ•˜์‹ญ์‹œ์˜ค.

@mbroadst ๋งž์Šต๋‹ˆ๋‹ค . ์ด๊ฒƒ์ด ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ํ‹€๋ ธ๋‹ค๋ฉด ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

useUnifiedTopology: true ํ•˜๋ฉด ์ง€์› ์ค‘๋‹จ ๊ฒฝ๊ณ ๊ฐ€ ์‚ฌ๋ผ์ง€์ง€๋งŒ ์ด ๋ฌธ์ œ MongoTimeoutError: Server selection timed out after 30000 ms ์˜ ์ œ๋ชฉ ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ๋‚ด ์•ฑ์ด ๋ฌด์ž‘์œ„๋กœ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

@vkarpov15 ๋ฐ ์œ„์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋Š” ํ•˜๋ฃจ์— ๋ช‡ ๋ฒˆ ๋ฐœ์ƒํ•˜์—ฌ ๋•Œ๋•Œ๋กœ 502 ๋ฐ ๋”์ฐํ•œ UX ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์œ„์— ๋ณด๊ณ ๋œ ๋Œ€๋กœ useUnifiedTopology: false (๋˜๋Š” ์ฃผ์„ ์ฒ˜๋ฆฌ)์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ด ๋ฌธ์ œ์˜ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜์ง€๋งŒ ์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ ๋ฅผ ๋ณต์›ํ•˜๊ณ  ์ด์ œ ์œ„์˜ ์•ฝ๊ฐ„ ๋ฌด์„œ์šด MongoNetworkError๋ฅผ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. ์ œ์ณ๋‘๊ณ , ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ๋‚ด ์•ฑ์„ ์ฃฝ์ด์ง€๋Š” ์•Š์ง€๋งŒ ์–ด๋Š ์‹œ์ ์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๊ทธ๋Ÿด ๊ฒƒ์ด๋ผ๊ณ  ๊ฑฑ์ •ํ•ฉ๋‹ˆ๋‹ค.

@bigsee MongoNetworkError ๊ฒฝํ—˜ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์ƒˆ๋กœ์šด ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์— ์ดˆ๊ธฐ ์—ฐ๊ฒฐ์„ ํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(์ถ”๊ฐ€๋กœ ์•ฑ ์‹œ์ž‘๊ณผ ํด๋Ÿฌ์Šคํ„ฐ ์‹œ์ž‘ ์‚ฌ์ด์˜ ์ผ์ข…์˜ ๊ฒฝ์Ÿ ์กฐ๊ฑด์œผ๋กœ ์ธํ•ด ์ด ๊ฒฝ์šฐ ํ†ตํ•ฉ ํ† ํด๋กœ์ง€๊ฐ€ ์—ฌ๊ธฐ์—์„œ๋„ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค).

์ด ๋ฌธ์ œ์˜ ์š”์ ์€ ์‚ฌ๋žŒ๋“ค์ด ํ†ตํ•ฉ ํ† ํด๋กœ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ง€์นจ์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๊ทธ๋Ÿด ๋•Œ ๊ฐ€์งœ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. v3.3.4-rc0 ๋Š” ํ•ด๋‹น ํŠน์ • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์œผ๋ฏ€๋กœ ํ˜„์žฌ ์ง€์นจ์€ ํ•ด๋‹น ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์› ์ค‘๋‹จ ์•Œ๋ฆผ์„ ์ œ๊ฑฐํ•˜๊ณ  ์‚ฌ๋žŒ๋“ค์ด ๊ฒช์—ˆ๋˜ ๊ฐ€์งœ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ๋ฒ„์ „์€ _all_ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๋Š” ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ์—ฐ๊ฒฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋Š” ์ผ์ข…์˜ ๊ตฌ์„ฑ(์—ฐ๊ฒฐ ๋ฌธ์ž์—ด) ๋˜๋Š” ์‚ฌ์šฉ์ž ์ธก์˜ ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํ†ตํ•ฉ ํ† ํด๋กœ์ง€์—์„œ๋Š” MongoTimeoutError ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ reason ํ•„๋“œ๋Š” ์ดˆ๊ธฐ ์—ฐ๊ฒฐ ์‹œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์œ ๋ฐœํ•œ ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

@mbroadst ๋‚ด ๋งˆ์ง€๋ง‰ ๋Œ“๊ธ€์—์„œ MongoNetworkError ๊ฐ€ ์ƒˆ๋กœ์šด ๊ฒƒ์ด๋ผ๊ณ  ์ œ์•ˆํ•˜๋ ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฏ€๋กœ ๊ทธ๋ ‡๊ฒŒ ์ฝํ˜”๋‹ค๋ฉด ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ฒƒ์€ `MongoTimeoutError'์ž…๋‹ˆ๋‹ค. ๋ฐ”๋ผ๊ฑด๋Œ€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์€ ๋‚ด ํ”„๋กœ์„ธ์Šค์˜€์Šต๋‹ˆ๋‹ค.

  1. ์•ฑ์— useUnifiedTopology: true . ๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ์•ฑ์ด ๋ฌด์ž‘์œ„๋กœ ์ถฉ๋Œํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ์ด ๋ฌธ์ œ์˜ ์ œ๋ชฉ๊ณผ ์ผ์น˜ํ•˜๋Š” MongoTimeoutError ๋ฐ ์œ„์— ํ‘œ์‹œ๋œ ์Šคํƒ ์ถ”์ ์˜ ์ฒ˜์Œ ๋ช‡ ์ค„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  3. Google / SO ๊ฒ€์ƒ‰์€ ๊ฒฐ๊ตญ ๋‚˜๋ฅผ ์—ฌ๊ธฐ๋กœ ๋ฐ๋ ค์˜ต๋‹ˆ๋‹ค.
  4. ์ œ์•ˆ๋œ useUnifiedTopology: false ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  5. MongoTimeoutError ์˜ค๋ฅ˜๋Š” ์•ฑ ์ถฉ๋Œ๊ณผ ํ•จ๊ป˜ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฒ˜์Œ์—๋Š” ์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‚˜์ค‘์— useUnifiedTopology: false ์„ค์ •ํ•˜๊ธฐ ์ „์— ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ณผ ์ˆ˜ ์—†๋Š” ์ถ”๊ฐ€ MongoNetworkError useUnifiedTopology: false

์•„๋งˆ๋„ ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ด๊ฒƒ์€ ์ธ๊ณผ๊ด€๊ณ„๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์ƒ๊ด€๊ด€๊ณ„์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฒŒ๋Š” ๊ทธ์ € ๋‹ด๋ฐฐ๋ฅผ ํ”ผ์šฐ๋Š” ์ด์ฒ˜๋Ÿผ ๋ณด์˜€๋‹ค. ์ ์–ด๋„ ์ง€๊ธˆ์€ ์•ฑ์ด ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์˜ต์…˜์„ ๋‚จ๊ฒจ๋‘๋Š” ๊ฒƒ์ด ๊ฑฑ์ •์ž…๋‹ˆ๋‹ค.

@bigsee ์•„! ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. v3.3.4-rc0 ๋ฒ„๊ทธ ์ˆ˜์ •์ด v3.3.3 ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Œ์„ ํ™•์ธํ–ˆ๋‹ค๋Š” ์˜๋ฏธ๋กœ ์›๋ž˜ ๋Œ“๊ธ€์„ ์ž˜๋ชป ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ด ๋ณผ ๊ธฐํšŒ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ Mongodb์— ๋Œ€ํ•œ ์ฒซ ๋ฒˆ์งธ ์‹œ๋„์ด๋ฉฐ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์„์„ ์ฝ๊ณ  ๋‚ด db๋ฅผ v3.3.4-rc0์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

DeprecationWarning: ํ˜„์žฌ ์„œ๋ฒ„ ๊ฒ€์ƒ‰ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์—”์ง„์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ํ–ฅํ›„ ๋ฒ„์ „์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์„œ๋ฒ„ ๊ฒ€์ƒ‰ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด { useUnifiedTopology: true } ์˜ต์…˜์„ MongoClient ์ƒ์„ฑ์ž์— ์ „๋‹ฌํ•˜์‹ญ์‹œ์˜ค.
MongoNetworkError: [cluster0-shard-00-00-rhdve.mongodb.dll] ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. net:27017 ] ์ฒ˜์Œ ์—ฐ๊ฒฐํ•  ๋•Œ [MongoNetworkError: connection 3 to cluster0-shard-00-00-rhdve.mongodb. ๊ทธ๋ฌผ:27017 ํ์‡„
TLSSocket์—์„œ.(C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionconnection.js:356:9)
Object.onceWrapper์—์„œ (events.js:297:20)
TLSSocket.emit์—์„œ(events.js:209:13)
net.js:588:12์—์„œ
TCP.done์—์„œ (_tls_wrap.js:479:7) {
์ด๋ฆ„: 'MongoNetworkError',
errorLabels: [๋ฐฐ์—ด],
}]
ํ’€์—์„œ.(C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoretopologiesserver.js:433:11)
Pool.emit์—์„œ (events.js:209:13)
C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionpool.js:562:14์—์„œ
C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionpool.js:999:9์—์„œ
์ฝœ๋ฐฑ ์‹œ(C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionconnect.js:109:5)
C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionconnect.js:129:7์—์„œ
Connection.errorHandler์—์„œ (C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionconnect.js:321:5)
Object.onceWrapper์—์„œ (events.js:297:20)
Connection.emit์—์„œ (events.js:209:13)
TLSSocket์—์„œ.(C:laragonwwwVue-express-mongodbnode_modulesmongodblibcoreconnectionconnection.js:354:12) {
์ด๋ฆ„: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
}
TypeError: ์ •์˜๋˜์ง€ ์•Š์€ '์ฐพ๊ธฐ' ์†์„ฑ์„ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
C:laragonwwwVue-express-mongodbserverroutesapiposts.js:12:26์—์„œ

@Syfon01 ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋Š” ์ผ์ข…์˜ ๊ตฌ์„ฑ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋ ˆ๊ฑฐ์‹œ ํ† ํด๋กœ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ’ 10์ดˆ ํ›„์— ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด๊ณผ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์„ ํ™•์ธํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค(์•„๋งˆ๋„ mongo ์…ธ ์‚ฌ์šฉ). ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด jira ํ‹ฐ์ผ“์„ ์—ด์–ด์„œ ๋Œ€ํ™”๋ฅผ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๊ณ  ์ด GitHub ๋ฌธ์ œ๋ฅผ ๋ณด๋Š” ์‚ฌ๋žŒ๋“ค์„ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์˜ ๊ฒฝ์šฐ Mongo Atlas Cloud Instance๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค ํƒญ์—์„œ IP ์ฃผ์†Œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋‚ด ISP๊ฐ€ ๋„คํŠธ์›Œํฌ์— ๋‹ค์‹œ ์—ฐ๊ฒฐํ•  ๋•Œ๋งˆ๋‹ค (DHCP) ์ƒˆ IP๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— Mongo Atlas๋Š” ์ด์ „์— ์ง€์ •๋œ IP ์ฃผ์†Œ๋งŒ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋•๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ - ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

๋‚ด ์ฝ”๋“œ, ํŠนํžˆ ์ฝœ๋ฐฑ์˜ ๊ตฌ์กฐ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

mongoose.connect(DATABASE_URL, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
}).then(() => {
    console.log('Connected to DB');
    app.listen({ port: PORT }, () => {
        console.log(`Server running at http://localhost:${PORT}`)
    });
}).catch(err => console.log(err));
mongoose.connect(DATABASE_URL, { 
    useNewUrlParser: true, 
    useUnifiedTopology: true,
}, () => {
    console.log('Connected to DB');
    app.listen({ port: PORT }, () => {
        console.log(`Server running at http://localhost:${PORT}`);
    });
}).catch(err => console.log(err));

@mtn2bay ๊ธฐ๋ณธ์ ์œผ๋กœ ํ–ˆ๋Š”๋ฐ ๊ฒฐ๊ณผ๋Š” ์—ฌ์ „ํžˆ ๋™์ผํ•˜๊ณ  ์œ ์ผํ•œ ์ฐจ์ด์ ์€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ ์—ฐ๊ฒฐ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋ชจ๋‘ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. .then ๋ฐ .catch์— ์˜์กดํ•˜๋Š” ๋Œ€์‹  ๋กœ๊น…ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋”๋ผ๋„ ํ•จ์ˆ˜๊ฐ€ db์— ์—ฐ๊ฒฐ๋˜๊ณ  ์•ฑ์„ ์‹œ์ž‘ํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค

mongoose.connect(DATABASE_URL, { 
    useNewUrlParser: true, 
    useUnifiedTopology: true,
}, (err, connection) => {
if(err) {
console.error(err)
return
}    
console.log('Connected to DB');
    app.listen({ port: PORT }, () => {
        console.log(`Server running at http://localhost:${PORT}`);
    })

@khaledosman ์ˆ˜์ •

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ๊ณ  mongoose npm ํŒจํ‚ค์ง€๋ฅผ 5.6.9์—์„œ 5.7.6์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ๊ณ  ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์˜ ๊ฒฝ์šฐ Mongo Atlas Cloud Instance๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค ํƒญ์—์„œ IP ์ฃผ์†Œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋‚ด ISP๊ฐ€ ๋„คํŠธ์›Œํฌ์— ๋‹ค์‹œ ์—ฐ๊ฒฐํ•  ๋•Œ๋งˆ๋‹ค (DHCP) ์ƒˆ IP๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— Mongo Atlas๋Š” ์ด์ „์— ์ง€์ •๋œ IP ์ฃผ์†Œ๋งŒ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋•๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ
UnhandledPromiseRejectionWarning: MongoTimeoutError: Server selection timed out after 30000 ms at Timeout.setTimeout (C:\Users\Umer MIB\Desktop\Chatbots2\mongobot\node_modules\mongodb\lib\core\sdam\topology.js:878:9) at ontimeout (timers.js:436:11) at tryOnTimeout (timers.js:300:5) at listOnTimeout (timers.js:263:5) at Timer.processTimers (timers.js:223:10) (node:4304) 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(). (rejection id: 1) (node:4304) [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

์–ด๋–ป๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋‚˜์นจ๋ฐ˜์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  ๋งํฌ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ฝ”๋“œ์—์„œ๋Š” ํ† ํด๋กœ์ง€๊ฐ€ ์—ฌ์ „ํžˆ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ mongodb ์„ค์น˜์™€ ๋งž์ง€ ์•Š๋Š” ์ผ๋ถ€ ์˜ต์…˜์„ Compass๋กœ ๊ตฌ์„ฑํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‚˜์นจ๋ฐ˜ ์—†์ด ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์— ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ๊ณ  ์ด ํฌ๋Ÿผ ๋•๋ถ„์— useUnifiedTopology ์„ค์ •์— ๋Œ“๊ธ€์„ ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š”์ด ์„ค์ •์˜ ์ฃผ์„์„ ์ œ๊ฑฐํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค ... ๊ฝค ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค ...

Mongoose v5.7.11์€ ์ƒˆ๋กœ ์ถœ์‹œ๋œ MongoDB ๋“œ๋ผ์ด๋ฒ„ 3.3.4๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์œ ์‚ฌํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์ƒˆ ๋ฌธ์ œ ๋ฅผ ์—ด๊ณ  ๋ฌธ์ œ ํ…œํ”Œ๋ฆฟ์„ ๋”ฐ๋ฅด์„ธ์š”.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰