[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/