Responsive Advertisement

Node.js์—์„œ MongoDB ์‚ฌ์šฉํ•˜๊ธฐ: MongoDB ์—ฐ๋™ ๊ฐ€์ด๋“œ

MongoDB๋Š” NoSQL ๊ธฐ๋ฐ˜์˜ ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ JSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ตฌ์กฐ์™€ ๊ฐ•๋ ฅํ•œ ํ™•์žฅ์„ฑ ๋•๋ถ„์— ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์„ ํ˜ธํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Node.js์™€ MongoDB๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Node.js์™€ MongoDB ์—ฐ๋™ํ•˜๊ธฐ

Node.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ MongoDB๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € MongoDB์™€ Node.js๋ฅผ ์—ฐ๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. MongoDB์˜ ๊ณต์‹ Node.js ํด๋ผ์ด์–ธํŠธ์ธ mongodb ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ํ†ต์‹ ์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. MongoDB ์„œ๋ฒ„ ์„ค์น˜

MongoDB๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ๋กœ์ปฌ์ด๋‚˜ ์›๊ฒฉ ์„œ๋ฒ„์— MongoDB๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ์„œ๋ฒ„์— MongoDB๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ MongoDB ๊ณต์‹ ๋ฌธ์„œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜์˜ MongoDB Atlas๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

2. Node.js ํ”„๋กœ์ ํŠธ ์„ค์ •

MongoDB๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Node.js ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ mkdir myapp
$ cd myapp
$ npm init -y
$ npm install mongodb

์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Node.js ํ”„๋กœ์ ํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , MongoDB์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•œ mongodb ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

3. MongoDB ์—ฐ๊ฒฐ ์„ค์ •

์ด์ œ Node.js์™€ MongoDB๋ฅผ ์—ฐ๊ฒฐํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. mongodb ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•ด MongoDB ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋ณธ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// app.js

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

// MongoDB ์—ฐ๊ฒฐ URL
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);

// ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„
const dbName = 'myDatabase';

async function main() {
    try {
        // MongoDB ์—ฐ๊ฒฐ
        await client.connect();
        console.log('MongoDB์— ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');

        // ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ
        const db = client.db(dbName);

        // ์ž‘์—… ์ˆ˜ํ–‰ (์˜ˆ: ์ปฌ๋ ‰์…˜ ์กฐํšŒ)
        const collections = await db.collections();
        console.log('๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปฌ๋ ‰์…˜:', collections);
    } catch (error) {
        console.error('MongoDB ์—ฐ๊ฒฐ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        // MongoDB ์—ฐ๊ฒฐ ์ข…๋ฃŒ
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

main();

์œ„ ์ฝ”๋“œ๋Š” MongoClient๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ์˜ MongoDB ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•œ ํ›„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปฌ๋ ‰์…˜์„ ์กฐํšŒํ•˜๊ณ  ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

MongoDB์—์„œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…ํ•˜๊ธฐ

MongoDB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋ ค๋ฉด ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ปฌ๋ ‰์…˜์„ ์„ ํƒํ•œ ํ›„, insertOne() ๋˜๋Š” insertMany() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋‹จ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ์˜ˆ์‹œ

async function insertData() {
    try {
        await client.connect();
        console.log('MongoDB์— ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');

        const db = client.db(dbName);
        const collection = db.collection('users');

        // ๋‹จ์ผ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
        const result = await collection.insertOne({ name: 'John Doe', age: 30 });
        console.log('๋ฐ์ดํ„ฐ ์‚ฝ์ž… ์„ฑ๊ณต:', result.insertedId);
    } catch (error) {
        console.error('๋ฐ์ดํ„ฐ ์‚ฝ์ž… ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

insertData();

์œ„ ์ฝ”๋“œ๋Š” users ์ปฌ๋ ‰์…˜์— ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. insertOne() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด JSON ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MongoDB์—์„œ ๋ฐ์ดํ„ฐ ์กฐํšŒํ•˜๊ธฐ

MongoDB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋ ค๋ฉด find() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ชจ๋“  ์‚ฌ์šฉ์ž๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// ๋ฐ์ดํ„ฐ ์กฐํšŒ ์˜ˆ์‹œ

async function findData() {
    try {
        await client.connect();
        console.log('MongoDB์— ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');

        const db = client.db(dbName);
        const collection = db.collection('users');

        // ๋ฐ์ดํ„ฐ ์กฐํšŒ
        const users = await collection.find({}).toArray();
        console.log('์กฐํšŒ๋œ ์‚ฌ์šฉ์ž:', users);
    } catch (error) {
        console.error('๋ฐ์ดํ„ฐ ์กฐํšŒ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

findData();

์œ„ ์ฝ”๋“œ๋Š” find() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด users ์ปฌ๋ ‰์…˜์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

MongoDB์—์„œ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

MongoDB์—์„œ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด updateOne() ๋˜๋Š” updateMany() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํŠน์ • ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

// ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์˜ˆ์‹œ

async function updateData() {
    try {
        await client.connect();
        console.log('MongoDB์— ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');

        const db = client.db(dbName);
        const collection = db.collection('users');

        // ํŠน์ • ์‚ฌ์šฉ์ž์˜ ๋‚˜์ด ์—…๋ฐ์ดํŠธ
        const result = await collection.updateOne(
            { name: 'John Doe' },
            { $set: { age: 35 } }
        );
        console.log('์—…๋ฐ์ดํŠธ๋œ ๋ฌธ์„œ ์ˆ˜:', result.modifiedCount);
    } catch (error) {
        console.error('๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

updateData();

์œ„ ์ฝ”๋“œ์—์„œ๋Š” John Doe๋ผ๋Š” ์‚ฌ์šฉ์ž์˜ ๋‚˜์ด๋ฅผ 35๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. updateOne() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํŠน์ • ํ•„๋“œ๋งŒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MongoDB์—์„œ ๋ฐ์ดํ„ฐ ์‚ญ์ œํ•˜๊ธฐ

MongoDB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด deleteOne() ๋˜๋Š” deleteMany() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ํŠน์ • ์‚ฌ์šฉ์ž๋ฅผ ์‚ญ์ œํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

// ๋ฐ์ดํ„ฐ ์‚ญ์ œ ์˜ˆ์‹œ

async function deleteData() {
    try {
        await client.connect();
        console.log('MongoDB์— ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');

        const db = client.db(dbName);
        const collection = db.collection('users');

        // ํŠน์ • ์‚ฌ์šฉ์ž ์‚ญ์ œ
        const result = await collection.deleteOne({ name: 'John Doe' });
        console.log('์‚ญ์ œ๋œ ๋ฌธ์„œ ์ˆ˜:', result.deletedCount);
    } catch (error) {
        console.error('๋ฐ์ดํ„ฐ ์‚ญ์ œ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:', error);
    } finally {
        await client.close();
        console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
    }
}

deleteData();

์œ„ ์ฝ”๋“œ๋Š” John Doe๋ผ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์‚ญ์ œํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. deleteOne() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์กฐ๊ฑด์— ๋งž๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์„œ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MongoDB ์—ฐ๊ฒฐ ์ข…๋ฃŒ

์ž‘์—…์ด ๋๋‚œ ํ›„์—๋Š” MongoDB ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. client.close() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์—ฐ๊ฒฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// MongoDB ์—ฐ๊ฒฐ ์ข…๋ฃŒ
await client.close();
console.log('MongoDB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');

๊ฒฐ๋ก 

Node.js์—์„œ MongoDB๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. mongodb ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ MongoDB๋ฅผ ํ™œ์šฉํ•ด ํšจ์œจ์ ์ธ Node.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•ด๋ณด์„ธ์š”!

๋Œ“๊ธ€ ์“ฐ๊ธฐ