Mongoose: ์—ฐ๊ฒฐ ํ•ด์ œ ํ›„ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค

์— ๋งŒ๋“  2016๋…„ 10์›” 26์ผ  ยท  47์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Automattic/mongoose

4.4.11์—์„œ >=4.6.1๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„ ๋ฌด์ž‘์œ„ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๊ณ  ๋ชฝ๊ตฌ์Šค๊ฐ€ ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชฝ๊ตฌ์Šค ๋ฒ„์ „: 4.6.5
mongodb ๋ฒ„์ „: 3.2.9

์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์—ฐ๊ฒฐ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

    var uri = 'mongodb://USENAME:PASSWORD<strong i="9">@host1</strong>:port1,host2:port2/database?authSource=admin';

    var options = {};
    options.server = {
      auto_reconnect: true,
      poolSize: 5,
      socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 },
      reconnectTries: 3000
    };

    options.replset = {
      auto_reconnect: true,
      poolSize: 5,
      socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 },
      reconnectTries: 3000
    };

    var db = mongoose.createConnection(uri, options);

    mongoose.connection.on('error', function(err) {
      console.log('MONGODB ERROR MONGOOSE LEVEL ' + server, err);
    });

    db.on('connecting', function() {
      console.info('MONGODB ' + server + ' connecting.');
    });

    db.on('error', function(err) {
      console.log('MONGODB ERROR ' + server, err);
    });

    db.on('close', function(err) {
      console.log('MONGODB CLOSE ' + server, err);
    });

    db.on('connected', function() {
      console.info('MONGODB ' + server + ' connected successfully.');
    });

    db.once('open', function callback() {
      console.info('MONGODB ' + server + ' opened successfully.');
    });

    db.on('reconnected', function() {
      console.info('MONGODB ' + server + ' reconnected.');
    });

    db.on('timeout', function() {
      console.info('MONGODB ' + server + ' timeout.');
    });

    db.on('disconnected', function() {
      console.info('MONGODB ' + server + ' disconnected');
    });

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์–ป๋Š” ์ด๋ฒคํŠธ์˜ ์ˆœ์„œ์ž…๋‹ˆ๋‹ค.

pid:3429 MONGODB geo_uri connected successfully.
pid:3429 MONGODB geo_uri opened successfully.
pid:3429 MONGODB dashboards_db connected successfully.
pid:3429 MONGODB dashboards_db opened successfully.
pid:3429 MONGODB tweet_analytics_db connected successfully.
pid:3429 MONGODB tweet_analytics_db opened successfully.
pid:3429 MONGODB fullcontact_enrichment_db disconnected
pid:3429 MONGODB ERROR fullcontact_enrichment_db { [MongoError: no valid replicaset members found]
  name: 'MongoError',
  message: 'no valid replicaset members found' }
pid:3429 MONGODB uri connected successfully.
pid:3429 MONGODB uri opened successfully.
pid:3429 MONGODB sync_reports_db connected successfully.
pid:3429 MONGODB sync_reports_db opened successfully.
pid:3429 MONGODB uri disconnected
pid:3429 MONGODB CLOSE uri

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

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

@Koslun ํฌํฌ๋Š” ์ด์ œ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ˆ˜์ • ์‚ฌํ•ญ์€ ์ด์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค socketOptions์— ๋Œ€ํ•ด socketTimeout์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ ๋‚ด ์†Œ์ผ“ ์˜ต์…˜์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

    var opts = {
      server: {
        socketOptions: {
          keepAlive: 1,
          socketTimeout: 0
        }
      },
      replSet: {
        socketOptions: {
          keepAlive: 1,
          socketTimeout: 0
        }
    }

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

+1, ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จํ•˜์—ฌ ์ง€๋‚œ 5์ผ ๋™์•ˆ 2๋ฒˆ์˜ ์ค‘๋‹จ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ disconnected ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๋‚ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์ถฉ๋Œ( process.exit(0) )๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋˜๊ณ  ์—ฐ๊ฒฐ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‹ค์‹œ ์—ด๋ฆฝ๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— mongoose๋Š” ๋‹ค์‹œ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜์ง€๋งŒ reconnectTries * reconnectInterval ๊ฐ„๊ฒฉ ๋‚ด์—์„œ ์‹คํŒจํ•˜๊ณ  ์ด ํšŒ๊ท€๋กœ ์ธํ•ด error ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(https://github.com/Automattic/mongoose/pull /4653). ๋‚ด๊ฐ€ ๋ชจ๋ฅด๋Š” ๊ฒƒ์€ ๋ชฝ๊ตฌ์Šค/๋ชฝ๊ณ ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์ด๋Ÿฌํ•œ ๋™์ž‘์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
์–ด๋–ค mongo ํ˜ธ์ŠคํŒ…์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์— ๋žฉ?

AWS์—์„œ ์ง์ ‘ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ process.exit(0) ๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

#4653์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ–ˆ๋Š”๋ฐ ๋™์ผํ•œ ๋™์ž‘์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋ช‡ ์‹œ๊ฐ„ ํ›„ ์—ฐ๊ฒฐ ๋Š๊น€:

2016-10-27T11:26:42 pid:5276 MONGODB sync_reports_db connected successfully.
2016-10-27T11:26:42 pid:5276 MONGODB sync_reports_db opened successfully.
.... 2 hours later
2016-10-27T13:45:45 pid:5276 MONGODB sync_reports_db disconnected
2016-10-27T13:45:45 pid:5276 MONGODB CLOSE sync_reports_db

error ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ? ( disconnected ์ดํ›„ 30์ดˆ๊ฐ€ ๋˜์–ด์•ผ ํ•จ)

์•„๋‹ˆ์š”, ๋ฌธ์ œ ์„ค๋ช…์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. ๋‚ด๊ฐ€ ์ž˜๋ชปํ•˜์ง€ ์•Š๋Š” ํ•œ error ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ํ”„๋กœ์„ธ์Šค๋Š” ์—ฌ์ „ํžˆ ์‹คํ–‰ ์ค‘์ด๊ณ  mongoose๋Š” ๋‹ค๋ฅธ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

4.6.5 ์ดํ›„๋กœ ์ง€๋‚œ ๋ฉฐ์น  ๋™์•ˆ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘๋‹จ๋˜๋Š” ์ž„์˜ ์—ฐ๊ฒฐ ๋Š๊น€์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ error ์ด๋ฒคํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. 4.5.3 ๋˜๋Œ๋ฆฌ๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@loris ๋Š” 4.6.6 https://github.com/Automattic/mongoose/commit/f7ebee0c992c45cdb27ba7f0675556b980cddaad ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@mck ์˜ˆ, https://github.com/Automattic/mongoose/commit/f7ebee0c992c45cdb27ba7f0675556b980cddaad mongodb ์—ฐ๊ฒฐ ์žฌ์‹œ๋„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์‹คํŒจํ•  ๋•Œ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” error ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฒ˜์Œ์—๋Š” ๋ฌด์ž‘์œ„ ์—ฐ๊ฒฐ ๋Š๊น€์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. @vkarpov15?

fwiw, ์ €์žฅ/์—…๋ฐ์ดํŠธ ์ž‘์—…(์•ฝ 650kb ์“ฐ๊ธฐ)์„ ์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ 40-50%์˜ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋„ค, ์ข‹์€ ์•„์ด๋””์–ด๊ฐ€ ๋ณ„๋กœ ์—†์–ด์š”. ์—ฐ๊ฒฐ์—์„œ close() ๋ฅผ ํ˜ธ์ถœํ•œ ๋‹ค์Œ ์ง์ ‘ connect() ๋‹ค์‹œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @loris ๋ฌด๊ฑฐ์šด ์ €์žฅ/์—…๋ฐ์ดํŠธ๊ฐ€ ์›์ธ์ด ๋˜๋Š” ์œ ์‚ฌํ•œ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋„ ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์ค‘ ํ•˜๋‚˜์—์„œ ์˜ค๋ฅ˜ ์ด๋ฒคํŠธ(ds0XXXXX-a0.mongolab.com:XXXXX์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ N์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋จ)๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„ ์—ฐ๊ฒฐ ํ•ด์ œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฐ๊ฒฐ์€ ๋‹ค์‹œ ์„ค์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์„œ๋น„์Šค์—์„œ๋Š” DB์— ๋Œ€ํ•œ ๊ณผ๋„ํ•œ ์š”์ฒญ, ์ฆ‰ 2M ๋ ˆ์ฝ”๋“œ ์ œ๊ฑฐ ํ›„ ์—ฐ๊ฒฐ ํ•ด์ œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(mongoose 4.6.6, DB ๋ฒ„์ „ 3.0.12).

๋ช‡ ๋ถ„ ์ „์— mLab์—์„œ๋„ mongodb๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ผ์ด ๋‹ค์‹œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค(๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Œ). ๋ฌด๊ฑฐ์šด ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค( unhandledRejection { MongoError: connection 0 to ds****-a0.mongolab.com:**** timed out } , disconnected ์ด๋ฒคํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ ์ดํ›„์—๋Š” ์—†์Œ, error ์—†์Œ, reconnected ๋“ฑ). ๋”ฐ๋ผ์„œ ์ด ์›น ์„œ๋ฒ„๋Š” ๊ณ„์† ์‹คํ–‰๋˜๊ณ  HTTP ์š”์ฒญ์„ ์ˆ˜์‹ ํ–ˆ์ง€๋งŒ ๋ฒ„ํผ๋ง๋˜๊ณ  ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š” ๋ชฝ๊ตฌ์Šค ์ฟผ๋ฆฌ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ์‹œ์ž‘ํ•  ๋•Œ๊นŒ์ง€ ๋ชจ๋‘ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชฝ๊ตฌ์Šค ์„ค์ •(๋…ธ๋“œ 7.0.0์˜ 4.6.5):

const mongoConnectOpts = { reconnectTries: 10, reconnectInterval: 500, socketOptions: { keepAlive: 300000, connectTimeoutMS: 30000 } };
mongoose.connect(process.env.MONGODB_URI, { server: mongoConnectOpts, replset: mongoConnectOpts });
mongoose.connection.on('error', err => {
  console.log({ event: 'mongoose:error', ...err });
  process.exit(0);
});
mongoose.connection.on('connected', () => console.log({ event: 'mongoose:connected' }));
mongoose.connection.on('disconnected', () => console.log({ event: 'mongoose:disconnected' }));
mongoose.connection.on('reconnected', () => console.log({ event: 'mongoose:reconnected' }));

์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ disconnected ์ด๋ฒคํŠธ์—์„œ๋„ ์›น ์„œ๋ฒ„๋ฅผ ๊ฐ•์ œ๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  ์ƒˆ mongodb ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋„๋ก process.exit(0) ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์•„์ด๋””์–ด?

์˜ˆ, ์ด์ „์— mlab์—์„œ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์ผ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ TBH๋Š” ์„œ๋ฒ„๋ฅผ ์ถฉ๋Œ์‹œํ‚ค๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ๋Š๋ฆฐ ์ŠคํŒŸ ๋„คํŠธ์›Œํ‚น์€ mongodb ๋“œ๋ผ์ด๋ฒ„์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์œผ๋ฉฐ ๋””๋ฒ„๊น…์—๋Š” mlab๊ณผ์˜ ์กฐ์ •์ด ํฌํ•จ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€(mongoose, mongo ๋“œ๋ผ์ด๋ฒ„, mlab ๋˜๋Š” heroku) ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ง€๋‚œ ๋ฉฐ์น  ๋™์•ˆ ๋ฌด๊ฑฐ์šด mongoose ์ฟผ๋ฆฌ(์‘๋‹ตํ•˜๋Š” ๋ฐ 30์ดˆ ์ด์ƒ ์†Œ์š”)๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์›น ์š”์ฒญ์„ ์‹คํ–‰ํ•˜๋ฉด heroku ์š”์ฒญ์ด ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. timeout(์ด๊ฒƒ์€ 30์ดˆ ์ด์ƒ ๊ฑธ๋ฆฌ๋Š” ๋ชจ๋“  ์›น ์š”์ฒญ์„ ์‹œ๊ฐ„ ์ดˆ๊ณผํ•˜๋Š” heroku์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค). ํ•ด๋‹น ์›น ์š”์ฒญ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋˜๋ฉด ํ•ด๋‹น ์„œ๋ฒ„์—์„œ ๋ชฝ๊ตฌ์Šค ์ฟผ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋‹ค์Œ ์›น ์š”์ฒญ๋„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฉ๋‹ˆ๋‹ค. ์ง„์งœ ๋ฌธ์ œ๋Š” ZERO ์ด๋ฒคํŠธ๊ฐ€ ๋ชฝ๊ตฌ์Šค( error , close , disconnected ๋“ฑ... ์—†์Œ)์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋˜๋ฏ€๋กœ ๊ฐ์ง€ํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์„ ๋Š๊ณ  ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค. ๋‹ค์Œ์€ ๋ชฝ๊ตฌ์Šค๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

mongoose.Promise = global.Promise;
mongoose.set('debug', process.env.NODE_ENV === 'development');
const mongoConnectOpts = { reconnectTries: 10, reconnectInterval: 500, socketOptions: { keepAlive: 300000, connectTimeoutMS: 30000 } };
mongoose.connect(process.env.MONGODB_URI, { server: mongoConnectOpts, replset: mongoConnectOpts });
mongoose.connection.on('error', err => {
  logfmt.log({ event: 'mongoose:error', ...err });
  process.exit(0);
});
mongoose.connection.on('connected', () => logfmt.log({ event: 'mongoose:connected', uri: _.truncate(process.env.MONGODB_URI) }));
mongoose.connection.on('disconnected', () => {
  logfmt.log({ event: 'mongoose:disconnected' });
  process.exit(0);
});
mongoose.connection.on('close', () => logfmt.log({ event: 'mongoose:close' }));
mongoose.connection.on('reconnected', () => logfmt.log({ event: 'mongoose:reconnected' }));

// Setup Redis cache (Default cache TTL: 60 seconds)
cachegoose(mongoose, { engine: 'redis', client: redisCache }, process.env.NODE_ENV === 'development');

@Ioris ๋Š”

@vkarpov15 ์ด๊ฒƒ์„ ํ™•์ธํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ ๋ฒ„๊ทธ๋Š” ํ”„๋กœ๋•์…˜์—์„œ๋งŒ ๋ฐœ์ƒํ•˜๊ณ  ์บ์‹œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ์—์„œ๋Š” ํ”„๋กœ๋•์…˜์„ ์‹คํ–‰ํ•  ์—ฌ์œ ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
@aartiles @mck- @lushchick ๋ชฝ๊ตฌ์Šค ์บ์‹œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ์šฉํ•˜์‹œ๋‚˜์š”?

์ด๊ฒƒ์€ https://github.com/christkv/mongodb-core/issues/148 ๊ณผ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๋ชฝ๊ตฌ์Šค ์บ์‹œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์กฐ์‚ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋‚ด ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋งค ์ดˆ๋งˆ๋‹ค ๋น ๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋กœ๊น…ํ•˜๋Š” ๋ฃจํ”„๋ฅผ ์‹œ์ž‘ํ•˜๊ณ , ๋‚˜์ค‘์— ์•ฝ๊ฐ„์˜ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๊ณ , ๋ฌด๊ฑฐ์šด ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ๋ฐฑ๋งŒ ํ–‰ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์ธ๋ฑ์‹ฑ๋˜์ง€ ์•Š์€ ์ฟผ๋ฆฌ). ๋ชจ๋“  ์ฟผ๋ฆฌ(๋น ๋ฅธ ์ฟผ๋ฆฌ๋„ ํฌํ•จ)๋Š” ์ž ๊ธฐ๊ฑฐ๋‚˜ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜๋ฉฐ ๋ชฝ๊ตฌ์Šค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ์ œ๋Š” ๋“ฑ์žฅ 4.6.5 ์œผ๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ, 4.6.4 ๋ฌธ์ œ๋ฅผ (๋ฌด๊ฑฐ์šด ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋น ๋ฅธ ์ฟผ๋ฆฌ๊ฐ€ ์—ฌ์ „ํžˆ ์‹คํ–‰์ง€๊ณ ) ์ˆ˜์ •
  • ๋‹ค์Œ๊ณผ ์•„๋ฌด ๊ด€๋ จ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • ๋ชฝ๊ตฌ์Šค ์บ์‹œ ํ”Œ๋Ÿฌ๊ทธ์ธ

    • ๋ณต์ œ๋ณธ ์„ธํŠธ ์‹คํ–‰ ์—ฌ๋ถ€

๋” ํŒŒ๊ณ  ๋“ค์—ˆ๊ณ  [email protected] ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ์ปค๋ฐ‹์€ https://github.com/mongodb/node-mongodb-native/pull/1418์ž…๋‹ˆ๋‹ค.
์˜คํƒ€๋ฅผ ์ˆ˜์ •ํ•œ ๊ฒƒ ๊ฐ™์ง€๋งŒ ํ•ด๋‹น eventName(์˜คํƒ€ ํฌํ•จ)์ด ์ผ๋ถ€ deps์—์„œ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค.

@loris ์ž˜๋ชป๋œ ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋‚˜๋จธ์ง€ ์ฐธ์กฐ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ์•„์‹ญ๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ์น  PR์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚˜๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@jakesjews ๋„ ์ฐธ์กฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ฒ„์ „์„ ํ™•์ธํ–ˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์›์ธ์— ๋Œ€ํ•ด ํ‹€๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์—ฐ๋ฝ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ ์‚ฌํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ: ์—ฐ๊ฒฐ ํ•ด์ œ ํ›„ ์žฌ์—ฐ๊ฒฐ ์‹คํŒจ. ์ด๊ฒƒ์€ ๋ชฝ๊ตฌ์Šค db ์ž‘์—…์„ ์ค‘๋‹จํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค(์ž‘์—… ๋ฒ„ํผ๋ง์„ ํ†ตํ•œ ์‹œ๊ฐ„ ์ดˆ๊ณผ).

@jakesjews ๋‚ด ๋ฌธ์ œ๋Š” ๋ณต์ œ๋ณธ ์„ธํŠธ์—๋„ ๊ณ ์œ ํ•˜๋ฉฐ ๋‹จ์ผ ๋…ธ๋“œ ์—ฐ๊ฒฐ์—์„œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ replset.js์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

node-mongodb-native ๋‚ด์—์„œ ๋””๋ฒ„๊ทธ ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ HA ์žฌ์—ฐ๊ฒฐ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

attemptReconnect for replset with id successful resuming topologyMonitor 1

์ด ๋•Œ ๋‹จ์ผ ๋…ธ๋“œ ๋น„ replset์˜ ์žฌ ์—ฐ๊ฒฐ์„ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์ด ์„ฑ๊ณต์ ์œผ๋กœ attemptReconnect์„ ์ˆ˜ํ–‰ ์ฃผ์žฅํ•˜๋Š” ๋…ธ๋“œ MongoDB์˜ ๋„ค์ดํ‹ฐ๋ธŒ ๋“œ๋ผ์ด๋ฒ„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๋ชฝ๊ตฌ์Šค๋Š” ์—ฐ๊ฒฐ ๋˜๋Š” ์žฌ ์—ฐ๊ฒฐ ์ด๋ฒคํŠธ๋ฅผ ๋ฐฉ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@loris๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด process.exit(0) -> ์„œ๋น„์Šค ์žฌ์‹œ์ž‘์€ ๋ฌธ์ œ๊ฐ€ ๋ณต์ œ๋ณธ ์„ธํŠธ์— ๋Œ€ํ•œ

๋ชฝ๊ตฌ์Šค@4.6.8
[email protected]

@mck- ๋‹น์‹ ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. 4.5.3์œผ๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ๋‚ด ๋ ˆํ”Œ๋ฆฌ์นด ์„ธํŠธ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์žฌ ์—ฐ๊ฒฐ ๋ฌธ์ œ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ณต์ œ ์„ธํŠธ ์žฌ์—ฐ๊ฒฐ ๋ฌธ์ œ๊ฐ€ ์ฒ˜์Œ ๋ฐœ์ƒํ•˜๋Š” 4.6.0์—์„œ ์‹คํŒจํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— 4.5.10์œผ๋กœ ์™„์ „ํžˆ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ถ”์ธก์œผ๋กœ๋Š” mongodb ๋“œ๋ผ์ด๋ฒ„ 2.2.9๋กœ์˜ ์—…๊ทธ๋ ˆ์ด๋“œ์™€ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@loris ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ทธ๊ฒƒ์„๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜คํƒ€ ์ˆ˜์ • ์ปค๋ฐ‹์— ๋Œ€ํ•ด ์ด์ „์— ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์ธ์€ https://github.com/christkv/mongodb-core/pull/146/commits/09caa9d1e5423acd2f8f154f7b7430028e77e57f์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ๋งŒ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

  • mongoose 4.6.8 , ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ๋‚ด ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ mongodb(3.2)์— ์—ฐ๊ฒฐ
  • 2๊ฐœ์˜ ๊ณ ์† ๊ฒฝ๋กœ, ํ•˜๋‚˜๋Š” ์žฅ๊ธฐ ์‹คํ–‰ mongoose ์ฟผ๋ฆฌ(๋ช‡ ์ดˆ)๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ํ•˜๋‚˜๋Š” ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜๋Š” mongoose ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ๋ฅผ ๋“ค์–ด setInterval/setTimeout ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์—์„œ ์ง์ ‘ ๋ชฝ๊ตฌ์Šค ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด ์ถ”์ธก์€ ํ’€ ์—ฐ๊ฒฐ์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค)
  • ์žฅ๊ธฐ๊ธ‰ํ–‰์„ ํ•˜๊ณ  ์†ํ–‰์„ ์น˜๋ ค๊ณ  ํ•˜๋ฉด ํ›„์ž๋Š” ๋Œ์•„์˜ค์ง€ ์•Š๊ณ  ๊ณ„์† ๋‹ฌ๋ฆฐ๋‹ค.
  • poolSize ์„ ๊ธฐ๋ณธ๊ฐ’ ๋Œ€์‹  50 ์„ค์ •ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์„ธ์š”.
  • mongodb-core ์—์„œ ์ด์ „ ์ปค๋ฐ‹์„ ํ™•์ธํ•˜๋ฉด ๋ฌธ์ œ๋„ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค(์žฅ๊ธฐ ์‹คํ–‰ ๊ฒฝ๋กœ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ๋™์•ˆ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜๋Š” ๊ณ ์† ๊ฒฝ๋กœ๊ฐ€ ๋ช‡ ms ํ›„์— ๋ฐ˜ํ™˜๋จ)(๊ธฐ๋ณธ ํ’€ ํฌ๊ธฐ ์‚ฌ์šฉ)
  • ๊ทธ๋ž˜์„œ https://github.com/christkv/mongodb-core/pull/146/commits/09caa9d1e5423acd2f8f154f7b7430028e77e57f ๊ฐ€ ํ•˜๋‚˜์˜ ์žฅ๊ธฐ ์‹คํ–‰ ๋ชฝ๊ตฌ์Šค๊ฐ€ ํ’€์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์ • ๋งŒ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ๋Š” ๋ชฝ๊ณ  ์ฝ”์–ด์— ๋„์ฐฉํ–ˆ๋‹ค.

@loris ๋„ค, ํ’€ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋ฉด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. mongodb ์„œ๋ฒ„๊ฐ€ ๋™์‹œ์— poolSize ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๋Š๋ฆฐ ์—ด์ฐจ ๋ฌธ์ œ์— ์ง๋ฉดํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ’€ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋ฉด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์ด ๋Š˜๋ฆฌ์ง€ ๋งˆ์„ธ์š”. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด WiredTiger์—์„œ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ธฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”,
์ด๊ฒƒ์— ๋Œ€ํ•œ ์–ด๋–ค ์—…๋ฐ์ดํŠธ? ๋ณต์ œ๋ณธ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ auto_reconnect๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ mongodb 2.2.11๊ณผ ํ•จ๊ป˜ mongoose 4.7.0์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” mongod ๋ฒ„์ „ 3.2.10์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ํฌํŠธ์—์„œ ์‹คํ–‰๋˜๋Š” 3๊ฐœ์˜ mongod ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š” ๋‹จ์ผ ํ˜ธ์ŠคํŠธ(๋…ธํŠธ๋ถ)์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋Š” ์•Š์ง€๋งŒ, ์ €๋Š” mongo/mongoose/node/javascript์— ์ต์ˆ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. mongoose๊ฐ€ ์žˆ๋Š” ๋‚ด ๋…ธ๋“œ ์•ฑ๋„ ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.

mongod ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชจ๋‘ ์ข…๋ฃŒํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์ด๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(launchctl stop mongod01; launchctl stop mongod02; launchctl stop mongod03)
์—ฐ๊ฒฐ ๋‹ซํž˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋‹ค๋ฆฐ ๋‹ค์Œ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค(launchctl ๋ช…๋ น์—์„œ "์ค‘์ง€"๋ฅผ "์‹œ์ž‘"์œผ๋กœ ๋Œ€์ฒด). ๋‚ด ์•ฑ์ด mongo์— ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ณต์ œ๋ณธ ์„ธํŠธ๋กœ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์€ ๋‹จ์ผ mongod ์ธ์Šคํ„ด์Šค๋กœ ๋™์ผํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด mongoose๊ฐ€ ๋‹ค์‹œ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ ๋กœ๊ทธ๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ํŒจ์น˜๋ฅผ ์‹œ๋„ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

ํŒŒํ—ค์นœ ํ›„์— ๋ฌธ์ œ์˜ ํ•œ ๊ฐ€์ง€ ์›์ธ์„ ์ฐพ์•˜์„ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. autoreconnect๊ฐ€ true์ผ ๋•Œ ์—ฐ๊ฒฐ ๋ฒ„ํผ๊ฐ€ ์—ฐ๊ฒฐ๋˜๋ฉด https://github.com/Automattic/mongoose/blob/master/lib/drivers/node-mongodb-native/connection.js#L153 ์ด ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ซ๊ธฐ ์ด๋ฒคํŠธ. ๊ทธ๋Ÿฌ๋‚˜ mongodb-native https://github.com/mongodb/node-mongodb-native/blob/2.2/lib/replset.js ์˜ replset ํด๋ž˜์Šค ๋‚ด๋ถ€์— ๋” ์ด์ƒ autoReconnect ์†์„ฑ์ด ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ํ•œ ๋…ธ๋“œ์˜ ๋‹ซ๊ธฐ ์ด๋ฒคํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฒ„ํผ๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. https://github.com/eflexsystems/mongoose/commit/5ac12727f34b41791f94643b66c8cc88aff4d66a ์ปค๋ฐ‹์— ์•ฝ๊ฐ„์˜ ํ–‰์šด์ด ์žˆ์—ˆ์ง€๋งŒ pull ์š”์ฒญ์„ ํ•˜๊ธฐ ์ „์— ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๊ฐ„์„ ๋” ์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@joeldodson ๊ท€ํ•˜๋Š” ๋‚ด๊ฐ€ ๊ฒฝํ—˜ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ—ค๋“œ์—… ๋ฆด๋ฆฌ์Šค >= 4.6.0์— ๋ฌธ์ œ๊ฐ€ ํฌํ•จ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ 4.5.10์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ replset์— ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜๊ณ  ๋‹จ์ผ ์—ฐ๊ฒฐ์ด ์ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@jakesjews ๋ฐ @kog13 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

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

์•ฑ์ด ์‹œ์ž‘๋  ๋•Œ DB๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๊ธฐ ์œ„ํ•ด 5์ดˆ ํƒ€์ด๋จธ๊ฐ€ ์žˆ๋Š” ๋ฃจํ”„์— ์žˆ๋Š” ๋…ผ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” db.on('closed', function(){...}) ํ•ธ๋“ค๋Ÿฌ์—์„œ ๊ทธ๊ฒƒ์„ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๊ณ  ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ด€์‹ฌ์‚ฌ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๋ฉด ๋‚ด๋ถ€์˜ ์žฌ์—ฐ๊ฒฐ ๋…ผ๋ฆฌ์™€ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ๋ ˆํ”Œ๋ฆฌ์นด ์„ธํŠธ์—์„œ๋Š” ์žฌ์ ‘์†์ด ์•ˆ ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์•„์š”. ๋˜ํ•œ ์„œ๋ฒ„์™€ replset ๋ชจ๋‘์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ์˜ต์…˜์—์„œ auto_reconnect๋ฅผ false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

@jakesjews - ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ํŒจ์น˜๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์ณค์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ํ•ด๋‹น ํŒจ์น˜๋Š” ๋‹ซ๊ธฐ ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  readyState๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋„๋ก ํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

auto_reconnect์— ๋Œ€ํ•œ ํŒจ์น˜๊ฐ€ ์žˆ๋‹ค๋ฉด ๋” ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์ €๋„ ๊ณ„์† ํŒŒํ—ค์ณ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”.

์œ„์˜ ํŒจ์น˜ ์™ธ์—๋„ @joeldodson ์€ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ชจ๋‹ˆํ„ฐ ์—ฐ๊ฒฐ์ด mongo -core์˜ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ํฌํฌ๋ฅผ ์‹œํ—˜ํ•ด ๋ณด๋ฉด ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ง€๊ธˆ ๋ชฝ๊ตฌ์Šค๋กœ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐ ์žฅ์•  ์กฐ์น˜์™€ ๊ด€๋ จํ•˜์—ฌ ๊ฝค ์ข‹์€ ์œ„์น˜์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด socketOptions์—์„œ socketTimeout์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ๋ชฝ๊ตฌ์Šค ํฌํฌ ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

socketTimeout์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋Š” ์ด์œ ๋Š” ์—ฌ์ „ํžˆ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•ด์•ผ ํ•˜๋Š” mongo-core์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋™์ ์œผ๋กœ ์ถ•์†Œ/ํ™•์žฅ ์—ฐ๊ฒฐ ํ’€๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ’€์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์€ ์ƒˆ ์—ฐ๊ฒฐ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค 30์ดˆ ๋™์•ˆ ํ™œ๋™์ด ์—†์œผ๋ฉด ์—ฐ๊ฒฐ์ด ๋‹ซํžˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ์ดˆ๊ณผ ์ด๋ฒคํŠธ๋Š” ํ’€์—์„œ ์ œ๊ฑฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ  ์—ฐ๊ฒฐ ์‹œ๋„ ์ œํ•œ์ธ 30ํšŒ์™€ ์‹œ๊ฐ„ ์ดˆ๊ณผ ํšŸ์ˆ˜๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒ€์‚ฌ๋„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. 2์ดˆ๋งˆ๋‹ค ์‹คํ–‰๋˜๊ณ  ์‹œ๊ฐ„ ์ดˆ๊ณผ ํšŸ์ˆ˜๋ฅผ ์ง€์šฐ๋Š” ํ•˜ํŠธ๋น„ํŠธ๊ฐ€ ์žˆ์ง€๋งŒ 30๊ฐœ ์ด์ƒ์˜ ์š”์ฒญ์ด ๋ณ‘๋ ฌ๋กœ ๋Œ€๊ธฐ์—ด์— ์žˆ์œผ๋ฉด ๋ชจ๋“  ์š”์ฒญ์ด ํ•˜ํŠธ๋น„ํŠธ ์‚ฌ์ด์— ์‹œ๊ฐ„ ์ดˆ๊ณผ๋˜๊ณ  ์—ฐ๊ฒฐ ํ’€์ด ํŒŒ๊ดด๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์—ฐ๊ฒฐ์ด ๋น„ํ™œ์„ฑ ์ƒํƒœ์ธ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ์ด ํ’€์—์„œ ๋‹ค์‹œ ์ •๋ฆฌ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋ณต์ œํ•˜๋ ค๋ฉด ์—ฐ๊ฒฐ ํ’€ ํฌ๊ธฐ๋ฅผ ์•ฝ 50์œผ๋กœ ์„ค์ •ํ•˜๊ณ  50๊ฐœ์˜ ๋ณ‘๋ ฌ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๊ทธ ํ›„ ํ’€์€ ์•ฝ 30์ดˆ ํ›„์— ํŒŒ๊ดด๋ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” ์ž์ฒด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์ œ ์„ธํŠธ๋ฅผ ํ™•์ธํ•˜๋Š” ํ•˜ํŠธ๋น„ํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ์— ์ผ์ด ๋ฐ”๋น ์„œ ์ด ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ•จ๊ป˜ ์ˆ˜์ง‘ํ•  ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ์ง€๋งŒ ๊ณง ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@jakesjews์—๊ฒŒ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ mongoose์™€ mongodb-core repos๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ์žฌ์—ฐ๊ฒฐ์ด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. Mongo์˜ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์–ป๋Š” 'connected' ๋ฐ 'reconnected' ์ด๋ฒคํŠธ๋ฅผ ์–ป์ง€๋Š” ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ readyState๊ฐ€ ์žฌ์„ค์ •๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฉฐ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•œ ํ›„์—๋„ ์—ฌ์ „ํžˆ 0์ž…๋‹ˆ๋‹ค.

๋กœ๊ทธ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐ ๋„์›€์„ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

[email protected] ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์„œ๋„ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋ชฝ๊ตฌ์Šค ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๋˜๋Œ๋ ค์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ์ฟผ๋ฆฌ๋Š” ํ˜„์žฌ ์—ฐ๊ฒฐ ์‹œ๊ฐ„์„ ์ดˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์•„๋งˆ๋„ ์‹œ๊ฐ„์ด ์žˆ์„ ๋•Œ @jakesjews ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•ด ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋•Œ๊นŒ์ง€ 4.4.X ์‚ฌ์šฉ

๋ฌธ์ œ๊ฐ€ mongo-core์˜ ๋ฒ„๊ทธ์ธ ๊ฒฝ์šฐ ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ mongoose์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์˜ mongoose์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ mongodb-core ์ €์žฅ์†Œ์— ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์‹ค์ œ๋กœ mongodb-core ๋ฒ„์ „์— ๋”ฐ๋ผ ์—…๋ฐ์ดํŠธ๋˜์–ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” mongoose ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. mongoose ๋Š” mongodb-core ์˜ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋ณต์›๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@jakesjews [email protected] ๊ฐ€ [email protected]์— ์ข…์†๋˜์–ด ์žˆ์Œ ์„ ํ™•์ธํ•˜๊ณ  ํฌํฌ ์—์„œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒ‰๋ณด๊ธฐ์—๋Š” ๋ถ€์ž‘์šฉ์ด ์—†์Šต๋‹ˆ๊นŒ?

๊ทธ๋ฆฌ๊ณ  ํฌํฌ๋ฅผ ๋ณด๋ฉด ์ด ์ปค๋ฐ‹ ์ด ์ด์ œ 4.7.x ๋ฐ/๋˜๋Š” 4.8.x PR์— ํ•„์š”ํ•œ ์œ ์ผํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ž…๋‹ˆ๊นŒ?

@Koslun ํฌํฌ๋Š” ์ด์ œ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ˆ˜์ • ์‚ฌํ•ญ์€ ์ด์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค socketOptions์— ๋Œ€ํ•ด socketTimeout์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ ๋‚ด ์†Œ์ผ“ ์˜ต์…˜์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

    var opts = {
      server: {
        socketOptions: {
          keepAlive: 1,
          socketTimeout: 0
        }
      },
      replSet: {
        socketOptions: {
          keepAlive: 1,
          socketTimeout: 0
        }
    }

@jakesjews ๋„ค , ๋น ๋ฅธ ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :).

์–ด๋–ค ๋ฒ„์ „์˜ mongodb-core์—์„œ ์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€ ์•„์‹ญ๋‹ˆ๊นŒ? ๋˜๋Š” ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ, PR ๋˜๋Š” ์ปค๋ฐ‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@Koslun ๋Œ“๊ธ€์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ๋Š” 2016๋…„๋ถ€ํ„ฐ ๊ณ„์† ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ mongodb ๋“œ๋ผ์ด๋ฒ„ 3.3.4๊ฐ€ ์žˆ๋Š” mongoose 5.x์™€ ๋ฒ„์ „ 4.x์˜ MongoDB ์„œ๋ฒ„์—์„œ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. :์ƒ๊ฐ:

์žฌ์—ฐ๊ฒฐ์ด ์„ฑ๊ณตํ•˜๋ฉด reconnectTries๊ฐ€ ์žฌ์„ค์ •๋˜๋Š”์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

Fox ์ธ์Šคํ„ด์Šค์˜ ๊ฒฝ์šฐ reconnectTries๊ฐ€ 30์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ณ  ์—ฐ๊ฒฐ์ด ๋Š๊ธด ๋ชฝ๊ตฌ์Šค๋Š” 5๋ฒˆ ์‹œ๋„ํ•˜๊ณ  ์—ฐ๊ฒฐ์— ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ์— ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋ฉด ์žฌ์‹œ๋„ ์นด์šดํ„ฐ๋Š” ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ?
30๋ฒˆ ์žฌ์ ‘์†์„ ์‹œ๋„ํ• ๊นŒ์š”?
์•„๋‹ˆ๋ฉด 25๋ฒˆ?

@szabolcs-szilagyi ์˜ˆ, ํ•˜์ง€๋งŒ useUnifiedTopology ๋ฅผ true ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

@bhaveshvyas007 ๋„ค ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ›„์†์„ ์œ„ํ•ด:

useUnifiedTopology ์—†์ด Mongoose 5.x๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ MongoDB ์—ฐ๊ฒฐ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์ด ๊ฐ€์ด๋“œ๋ฅผ ์ฝ์œผ์‹ญ์‹œ์˜ค.

useUnifiedTopology Mongoose 5.x๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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