[MongoDB] Change Stream: Watch

watch๋Š” MongoDB์—์„œ CDC๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋‹ค.

ํŠน์ • ์ปฌ๋ ‰์…˜, ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‹จ์œ„์— Stream์„ ์—ด์–ด์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ• ๋•Œ๋งˆ๋‹ค ๊ทธ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ „๋‹ฌ๋ฐ›๊ณ  ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋‹จ์ผ ๋…ธ๋“œ์—๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , replicaset์ด๋‚˜ ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์ด๋‹ค.

์˜ˆ์ œ์ฝ”๋“œ๋Š” Node.js๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด๋ผ๋„ ์‚ฌ์šฉ ์›๋ฆฌ์— ์žˆ์–ด์„œ ํฌ๊ฒŒ ๋‹ค๋ฅธ ์ ์€ ์—†์„ ๊ฒƒ์ด๋‹ค.

๋จผ์ € ๋‹น์—ฐํžˆ ํด๋ผ์ด์–ธํŠธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๊ณ  watch๋ฅผ ๊ฑธ๊ณ ์‹ถ์€ ์ปฌ๋ ‰์…˜ ๊ฐ์ฒด๊นŒ์ง€ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ์—, watch ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์„œ stream์„ ์—ด๋ฉด ๊ทธ๋งŒ์ด๋‹ค.

const changeStream = db.weather.watch();
changeStream.on('change', next => {
  console.log(next);
});

์ด๋ ‡๊ฒŒ ์ฝœ๋ฐฑ ํ˜•ํƒœ๋กœ ํ•ด์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.
๋งค๋ฒˆ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋ ๋•Œ๋งˆ๋‹ค ์ € change ์ฝœ๋ฐฑ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ๋ผ์˜ฌ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰ํ•ด๋‘” ์ƒํƒœ์—์„œ

๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•ด๋ณด๋ฉด

๋ฐ”๋กœ๋ฐ”๋กœ ๋‚ ๋ผ์˜ฌ ๊ฒƒ์ด๋‹ค.

DB ์ „์ฒด์— ๋Œ€ํ•ด์„œ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๊ฑฐ๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์€ ๊ฐ™๋‹ค.
๊ทธ๋ƒฅ db์—์„œ watch ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ€๋ฅด๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

const { MongoClient } = require("mongodb");

const url =
  "mongodb+srv://sssang...ngodb.net";
const client = new MongoClient(url);

async function main() {
  await client.connect();
  console.log("Connected successfully to server");

  const db = client.db("test");

  const collection = db.collection("weather");

  const changeStream = collection.watch();

  changeStream.on("change", (next) => {
    console.log(next);
  });

  // wait
  await new Promise((resolve) => setTimeout(resolve, 60000));
}

main()
  .then(() => {
    console.log("Done");
    process.exit(0);
  })
  .catch((err) => {
    console.error(err);
    process.exit(1);
  });

๊ทธ๋ฆฌ๊ณ  ์•„๋ฌด ์ปฌ๋ ‰์…˜์—๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‘ค์…”๋ณด๋ฉด

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ๋ผ์˜ฌ ๊ฒƒ์ด๋‹ค.



์ฐธ์กฐ
https://www.mongodb.com/docs/manual/changeStreams/#std-label-changeStreams
https://www.mongodb.com/docs/manual/reference/method/db.collection.watch/