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

[NodeJS+Express] 6. EJS๋กœ MongoDB ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ

by KASSID 2023. 10. 8.

๋ชฉ์ฐจ

    728x90

    ์ €๋ฒˆ ํฌ์ŠคํŠธ๊นŒ์ง€ MongoDB๋ฅผ ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐํ•˜๊ณ  DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์˜ค๋Š” ๊ฒƒ๊นŒ์ง€ ์™„๋ฃŒํ•˜์˜€๋‹ค.

    ์ด๋ฒˆ์—๋Š” ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์ œ์ž‘ํ•ด๋ณด์ž!

    1. EJS (Embedded JavaScipt Template)

    1) ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ธฐ

    EJS๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด๋‹ค.

    ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด๋ž€, DB๋‚˜ API์˜ ๋ฐ์ดํ„ฐ์™€ ๋ฏธ๋ฆฌ ์ •์˜๋œ ํ…œํ”Œ๋ฆฟ์„ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ HTML ํŒŒ์ผ์„ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๋ชจ๋“ˆ์ด๋‹ค.

    ํŠนํžˆ EJS๋Š” JavaScript ๋ฌธ๋ฒ•์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์— ์•„์ฃผ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    2) ์„ธํŒ…ํ•˜๊ธฐ

    (1) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

    npm install ejs

     

    (2) server.js(์„œ๋ฒ„ํŒŒ์ผ) ์ˆ˜์ •

    app.set('view engine', 'ejs')

     

    ์œ„ ์ฝ”๋“œ๋ฅผ ์„œ๋ฒ„ํŒŒ์ผ ์ƒ๋‹จ์— ์ž‘์„ฑํ•œ๋‹ค.

     

    (3) views ๋””๋ ‰ํ† ๋ฆฌ / ejs ํŒŒ์ผ ์ƒ์„ฑ

    ํ…œํ”Œ๋ฆฟ ์•ˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ .ejs ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

    ์ด๋•Œ ejs ํŒŒ์ผ๋“ค์€ views๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊ด€๋ฆฌํ•ด์•ผํ•œ๋‹ค.

     

    ์˜ˆ์‹œ

     

    ejs ํŒŒ์ผ์˜ ํƒœ๊ทธ๋“ค์€ html ํŒŒ์ผ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค. (์ •์ ํŒŒ์ผ ์ ์šฉ๋„ ๋™์ผ)

     

    (4) ejs ํŒŒ์ผ ์„œ๋ฒ„ ๋“ฑ๋ก

    //server.js
    app.get('/path๋ช…', (request, response) => {
      response.render('ํŒŒ์ผ๋ช….ejs');
    })

    htmlํŒŒ์ผ๊ณผ ๋‹ค๋ฅด๊ฒŒ sendFile()์ด ์•„๋‹Œ

    render()๋ฅผ ์ด์šฉํ•œ๋‹ค.

     

     

    3) ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ

    ๋ณธ๊ฒฉ์ ์œผ๋กœ DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ ๋’ค ejsํŒŒ์ผ์—์„œ ๋ณด์—ฌ์ฃผ๋„๋ก ํ•˜์ž!

     

    ๊ทธ ๊ณผ์ •์„ ์š”์•ฝํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

    1. DB์—์„œ ejsํŒŒ์ผ๋กœ ๋ฐ์ดํ„ฐ ๋ณด๋‚ด๊ธฐ
    2. ๋ฐ์ดํ„ฐ๋ฅผ ejs ํŒŒ์ผ ๋‚ด ์›ํ•˜๋Š” ์œ„์น˜์— ๋ฐ”์ธ๋”ฉ

     

    (1) ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

    DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” ์ง€๋‚œ ๊ธ€์—์„œ ๋‹ค๋ค˜๋˜ ๊ฒƒ์ฒ˜๋Ÿผ

    ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

     

    ์‚ฌ์šฉ๋ฒ•

    app.get('/path๋ช…', async (request, response) => {
      let result = await db.collection('์„ค์ •ํ•œ collection๋ช…').find().toArray();
      response.render('ํŒŒ์ผ๋ช….ejs', {๋ณ€์ˆ˜๋ช… : result});
    })

    ์œ„์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ

    {๋ณ€์ˆ˜๋ช… : ๋ฐ์ดํ„ฐ}๋กœ renderํ•จ์ˆ˜์— ์ „๋‹ฌํ•œ๋‹ค.

     

    (2) ejs ํŒŒ์ผ ๋‚ด ๋ฐ”์ธ๋”ฉ

    <%= ๋ณ€์ˆ˜๋ช… %>

    ์ด๋Ÿฌํ•œ ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด ์›ํ•˜๋Š” ์œ„์น˜์—์„œ

    render ํ•จ์ˆ˜์— ์ „๋‹ฌํ•œ ๋ณ€์ˆ˜๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

     

     

    ์˜ˆ์‹œ

    MongoDB์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ด๋‹ค. ์ด๊ฒƒ์„ ๊ฐ€์ ธ์™€๋ณด์ž!

     

     

    //server.js
    app.get('/list', async (request, response) => {
      let result = await db.collection('post').find().toArray();
      response.render('list.ejs', {list : result});
    })

     

    //list.ejs
    <%= JSON.stringify(list) %>

    (JSON.stringify() ๋ฅผ ์ด์šฉํ•˜๋ฉด JSON ํ˜•์‹์„ string์œผ๋กœ ๋ฐ”๊พธ์–ด ์ฃผ๋Š”๋ฐ, ์‹œ๊ฐ์ ์œผ๋กœ ์ž˜ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด ์ข‹๋‹ค!)

     

    ๊ฒฐ๊ณผ

     

    ๊ธ€ ๋ชฉ๋ก์„ ์ •์ƒ์ ์œผ๋กœ ๋ฐ›์•„์˜จ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!

     

     

    ๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ DB ๋ชฉ๋ก์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ๊ธ€ ๋ชฉ๋ก ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž!

     

     

     

     

    ๋Œ“๊ธ€