๊ด€๋ฆฌ ๋ฉ”๋‰ด

Nevertheless

youtuber-demo ( ์ „์ฒด ์กฐํšŒ, ์‚ญ์ œ, ์ˆ˜์ •) ๋ณธ๋ฌธ

๋ฐ๋ธŒ์ฝ”์Šค

youtuber-demo ( ์ „์ฒด ์กฐํšŒ, ์‚ญ์ œ, ์ˆ˜์ •)

hxx_1 2024. 9. 6. 23:20

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์‹ค์Šตํ•ด๋ณด๊ธฐ

1. ์ „์ฒด ์œ ํŠœ๋ฒ„ ์กฐํšŒ(GET)

// ์ „์ฒด ์œ ํŠœ๋ฒ„ ์กฐํšŒ
app.get('/youtubers', function (req, res) { 
  let youtubers = {}
  db.forEach(function (value, key) {
    youtubers[key] = value
  });

  res.json(youtubers)
})

 

โžก๏ธ Map ์œผ๋กœ ์„ ์–ธ๋œ db ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ๊ฐ์ฒด๋ฅผ youtubers ๋ฐฐ์—ด์— ์ €์žฅํ•œ ํ›„, ์ด ๋ฐฐ์—ด์„ JSON ํ˜•์‹์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•œ๋‹ค.

 

2. ๊ฐœ๋ณ„ ์œ ํŠœ๋ฒ„ ์‚ญ์ œ (DELETE)

// ๊ฐœ๋ณ„ ์œ ํŠœ๋ฒ„ ์‚ญ์ œ
app.delete('/youtubers/:id', (req, res) => {
  let { id } = req.params
  id = parseInt(id)

  let youtuber = db.get(id)
  if (youtuber == undefined) {
    res.json({
      message: `์š”์ฒญํ•˜์‹  ${id}๋ฒˆ์€ ๊ฐ€์ž…๋œ ์œ ํŠœ๋ฒ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.`
    })
  }
  else {
    const channelTitle = youtuber.channelTitle
    db.delete(id)

    res.json({
      message: `${channelTitle} ๋‹˜์„ ์ฆ๊ฒจ์ฐพ๊ธฐ์—์„œ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.`
    })
  }
})

โžก๏ธ URL ์— ์ž…๋ ฅ๋œ id ์— ํ•ด๋‹นํ•˜๋Š” ์œ ํŠœ๋ฒ„๋ฅผ ์ฐพ๋Š”๋‹ค. ํ•ด๋‹น ์œ ํŠœ๋ฒ„๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์—๋Š” ๊ฐ€์ž…๋œ ์œ ํŠœ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ํ•ด๋‹น ์œ ํŠœ๋ฒ„๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ delete ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น id ์˜ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ญ์ œํ–ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. 

 

3. ์ „์ฒด ์œ ํŠœ๋ฒ„ ์‚ญ์ œ (DELETE)

// ์ „์ฒด ์œ ํŠœ๋ฒ„ ์‚ญ์ œ
app.delete('/youtubers' , (req, res) => {
  let msg=""
  //db ์— ๊ฐ’์ด 1๊ฐœ ์ด์ƒ์ด๋ฉด, ์ „์ฒด ์‚ญ์ œ
  if(db.size >= 1) { 
    db.clear()
    msg = "์ „์ฒด ์œ ํŠœ๋ฒ„๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."
  }
  else { // ๊ฐ’์ด ์—†์œผ๋ฉด
    msg = "์‚ญ์ œํ•  ์œ ํŠœ๋ฒ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."
  }

  res.json({
    message: msg
  })
})

์™ผ) ์‚ญ์ œ ํ›„ ํ™”๋ฉด , ์˜ค) ์‚ญ์ œ ํ›„ ์กฐํšŒ ํ™”๋ฉด
db์— ๊ฐ’์ด ์—†์„ ๋•Œ

 

โžก๏ธ db ์— ๊ฐ’์ด 1๊ฐœ ์ด์ƒ์ด๋ฉด clear ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ „์ฒด ์‚ญ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , db ์— ๊ฐ’์ด ์—†์œผ๋ฉด ์‚ญ์ œํ•  ์œ ํŠœ๋ฒ„๊ฐ€ ์—†๋‹ค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. 

 

4. ๊ฐœ๋ณ„ ์œ ํŠœ๋ฒ„ ์ˆ˜์ • (PUT)

// ๊ฐœ๋ณ„ ์œ ํŠœ๋ฒ„ ์ˆ˜์ •
app.put('/youtubers/:id', function (req, res) {
  let { id } = req.params
  id = parseInt(id)

  let youtuber = db.get(id)
  let oldTitle = youtuber.channelTitle

  if (youtuber == undefined) {
    res.json({
      message: `์š”์ฒญํ•˜์‹  ${id}๋ฒˆ์€ ๊ฐ€์ž…๋œ ์œ ํŠœ๋ฒ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.`
    })
  }
  else {
    let newTitle = req.body.channelTitle
    youtuber.channelTitle = newTitle // ์ƒˆ๋กœ์šด ์ฑ„๋„๋ช…์œผ๋กœ ๋ณ€๊ฒฝ
    db.set(id, youtuber) // ๋‹ค์‹œ ์œ ํŠœ๋ฒ„๋ฅผ ์…‹ํŒ… => ๋ฎ์–ด์“ฐ๊ธฐ 

    res.json({
      message: `${oldTitle} ๋‹˜, ์ฑ„๋„๋ช…์ด ${newTitle} ๋กœ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. `
    })
  }
})

์™ผ) ์ฑ„๋„๋ช… ๋ณ€๊ฒฝ , ์˜ค) ์ฑ„๋„๋ช… ๋ณ€๊ฒฝ ํ›„ ์กฐํšŒ

 

โžก๏ธ URL ์— ์ž…๋ ฅ๋œ ํ•ด๋‹น id ์˜ ์œ ํŠœ๋ฒ„๋ฅผ ์ฐพ๋Š”๋‹ค. ํ•ด๋‹น id ์˜ ์œ ํŠœ๋ฒ„๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๊ฐ€์ž…๋œ ์œ ํŠœ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ์œ ํŠœ๋ฒ„๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ฑ„๋„๋ช…์„ ์ƒˆ๋กœ์šด ์ฑ„๋„๋ช…์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ๋ณ€๊ฒฝ์ด ์™„๋ฃŒ๋  ๊ฒฝ์šฐ, ์ˆ˜์ •๋˜์—ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. 


๐ŸŒŸ ๋ฐฐ์šด ์ ๊ณผ ๋А๋‚€ ์ 

์ด๋ฒˆ์ฃผ๋ถ€ํ„ฐ ๊ณ„์† ์œ ํŠœ๋ฒ„ ๋ฐ๋ชจ REST API ์„ค๊ณ„ ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฐ์šฐ๊ณ  ์žˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‚ฏ์„ค๊ณ  ์–ด๋ ค์› ๋Š”๋ฐ, ๊ณ„์† ๋ฐ˜๋ณตํ•ด์„œ ํ•˜๋‹ค๋ณด๋‹ˆ ์ต์ˆ™ํ•ด์ง€๊ณ  ์žฌ๋ฏธ๋ฅผ ๋А๋ผ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์กฐํšŒํ•  ๋•Œ๋Š” GET, ๋“ฑ๋กํ•  ๋•Œ๋Š” POST, ์‚ญ์ œํ•  ๋•Œ๋Š” DELETE ๊ทธ๋ฆฌ๊ณ  ์ˆ˜์ •ํ•  ๋•Œ๋Š” PUT ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋ง์•„์•ผ๊ฒ ๋‹ค. ๋ญ”๊ฐ€ ์ด์ „์—๋Š” ๋ฐฑ์—”๋“œ์— ๋Œ€ํ•ด์„œ ์–ด๋ ต๊ณ  ์žฌ๋ฏธ์—†์„ ๊ฒƒ์ด๋ผ๋Š” ํŽธ๊ฒฌ์ด ์žˆ์—ˆ๋Š”๋ฐ ์˜คํžˆ๋ ค ๋ฐฑ์—”๋“œ๊ฐ€ ํ•œ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‹ค์งˆ์ ์ธ ์—ญํ• ์„ ํ•˜๋Š” ๋งŒํผ ์€๊ทผ ์žฌ๋ฐŒ๋‹ค๋Š” ์ƒ๊ฐ๋„ ๋“ ๋‹ค. ์•ž์œผ๋กœ๋„ ์—ด์‹ฌํžˆ ํ•ด์•ผ๊ฒ ๋‹ค๐Ÿ”ฅ