๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒŒ | WEB DEV/NodeJS

[NodeJS+Express] 5. MongoDB์—์„œ ๋ฐ์ดํ„ฐ ๊บผ๋‚ด๊ธฐ

by KASSID 2023. 9. 24.

๋ชฉ์ฐจ

    728x90

    ์ด๋ฒˆ์—๋Š” MongoDB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์™€๋ณด์ž!

     

    1. MongoDB์˜ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ

    ๊บผ๋‚ด์˜ค๊ธฐ ์ „์— ์‚ฌ์ดํŠธ์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด๋ณด์ž.

     

    ์„ธํŒ…์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋กœ DB / collection ์ด ๋“ฑ๋ก๋˜์–ด์žˆ์„ ๊ฒƒ์ด๋‹ค.

     

    [INSERT DOCUMENT]๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด {Key: Value}๋ฅผ ์ž…๋ ฅํ•ด๋ณด์ž.

     

    ์ด๋ ‡๊ฒŒ ์ž˜ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!

     

    ์ € ํ•œ ๋ธ”๋ก์ด document์ธ ๊ฒƒ์ด๋‹ค.

    โ€ป _id ๋ž€?
    document ์ƒ์„ฑ ์‹œ _id ๋ผ๋Š” ํ•ญ๋ชฉ๋„ ํ•จ๊ป˜ ์ƒ์„ฑ์ด ๋˜๋Š”๋ฐ,
    ์ด๋Š” document ๊ฐ„ ๊ตฌ๋ถ„์„ ์œ„ํ•œ id ์ด๋‹ค.

    ์ด๋•Œ ObjectId ๋ผ๋Š” ๋žœ๋ค ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•˜๋Š”๋ฐ ๋ช‡๊ฐ€์ง€ ํŠน์ง•์ด ์žˆ๋‹ค.
    1. ์ค‘๋ณตX / 2. ๋จผ์ € ๋งŒ๋“ค์ˆ˜๋ก ๋‚ฎ์€ ObjectId / 3. ObjectId ๋Œ€์‹  ์ž„์˜๋กœ ์„ค์ • ๊ฐ€๋Šฅ(e.g. 1, 2, 3, ... )

     

     

    Mongo DB๋Š” document DB์ด๋‹ค. ์ด์— ์ค‘์š”ํ•œ ํŠน์ง•์ด

    ์ˆ˜๋งŽ์€ document ์ค‘ ํŠน์ • 1๊ฐœ document๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

    ํ•˜์ง€๋งŒ ๊ทธ ์•ˆ์˜ ๋‚ด์šฉ์„ ์ฐพ๋Š” ๊ฒƒ์€ ๋งค์šฐ ์–ด๋ ต๋‹ค.

     

    ๋”ฐ๋ผ์„œ ์šฉ๋„์— ๋งž๊ฒŒ document์˜ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค!

     

    ์ด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ•œ ๊ฐœ์˜ ํฌ์ŠคํŠธ๊ฐ€ ํ•˜๋‚˜์˜ document๊ฐ€ ๋˜๋„๋ก ๊ด€๋ฆฌํ•  ๊ฒƒ์ด๋‹ค.

     

     


    2. ํŽ˜์ด์ง€ ์ ‘์† ์‹œ DB์˜ ๋ฐ์ดํ„ฐ ๋ณด์—ฌ์ฃผ๊ธฐ

    /list ์— ์ ‘์†ํ–ˆ์„๋•Œ DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด๋ณด์ž!

     

    1) server.js ์ˆ˜์ •ํ•˜๊ธฐ

    ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์˜ฌ๋•Œ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๊ฐ€์ ธ์˜จ ๋’ค Array๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

    ์ด๋ฅผ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜์—๋Š” ์ปฌ๋ ‰์…˜์˜ ๋ชจ๋“  document๊ฐ€ ๋“ค์–ด์žˆ๊ฒŒ ๋œ๋‹ค.

    await db.collections('์„ค์ •ํ•œ collection๋ช…').find().toArray()

     

    ์ด๋•Œ await ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ทธ๊ฒƒ์„ ๋‹ด์€ ํ•จ์ˆ˜์˜ ์•ž์— async๋ฅผ ๋ถ™์—ฌ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

     

    โ€ป await์ด๋ž€?
    JS๋Š” ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ ํ˜„์žฌ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    ์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.
    1. callback ํ•จ์ˆ˜ / 2. .then(Promise์—์„œ) / 3. await(Promise์—์„œ)

    ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ˜„ํ•˜๋ ค๋Š” DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์€ ์ฒ˜๋ฆฌ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
    await์„ ์ด์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์ง„ํ–‰ํ•ด์•ผ ์˜๋„ํ•œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋˜ํ•œ Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. โ–ผ

    2022.02.18 - [๐ŸŒŒ | WEB DEV/Vanilla JS] - JS_๋ฌธ๋ฒ• (5)_๋™๊ธฐ/๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

     

    ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ž! (๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ document์˜ title ๋ Œ๋”๋ง)

    app.get('/list', async (request, response) => {
      let result = await db.collection('post').find().toArray();
      response.send(result[0].title);
    })

     

    2) ํ™•์ธํ•˜๊ธฐ

    ์ž˜ ๋‚˜์˜จ๋‹ค!

     

     

     

    + ์œ„์—์„œ result ๋ณ€์ˆ˜๋ฅผ console.log()๋กœ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

     

    ๋Œ“๊ธ€