[๋ฐ๋ธŒ์ฝ”์Šค] Express DELETE์™€ PUT ๋ฉ”์„œ๋“œ ํ™œ์šฉ(+http ์ƒํƒœ์ฝ”๋“œ)

2025. 4. 15. 13:47ยท๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL
๋ชฉ์ฐจ
  1. ๐Ÿ—‘๏ธDELETE
  2. ๊ฐœ๋ณ„ ์œ ํŠœ๋ฒ„ ์‚ญ์ œ
  3. ์ „์ฒด ์œ ํŠœ๋ฒ„ ์‚ญ์ œ
  4. โฌ†๏ธPUT
  5. ๐Ÿ“ŠHTTP ์ƒํƒœ ์ฝ”๋“œ

์˜ค๋Š˜์€ Express์—์„œ REST API์˜ DELETE์™€ PUT ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์œ ํŠœ๋ฒ„ ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๋‹ค. ๋“œ๋””์–ด CRUD๋ฅผ ์ „๋ถ€ ํ•œ๋ฒˆ์”ฉ ์ž‘์„ฑํ•ด๋ด„


๐Ÿ—‘๏ธDELETE

๊ฐœ๋ณ„ ์œ ํŠœ๋ฒ„ ์‚ญ์ œ

DELETE /youtubers/:id
- req: params.id
- res: "์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."

app.delete("/youtubers/:id", function (req, res) {
  const { id } = req.params;

  if (db.get(parseInt(id)) == undefined) {
    res.json({ message: "์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ฑ„๋„์ž…๋‹ˆ๋‹ค" });
  } else {
    db.delete(parseInt(id));
    res.json({ message: "์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค" });
  }
});
  • req.params์—์„œ id๋ฅผ ๊ฐ€์ ธ์™€ ์‚ญ์ œํ•  ๋Œ€์ƒ์„ ์ง€์ •ํ•œ๋‹ค.
  • ์กด์žฌํ•˜์ง€ ์•Š๋Š” id์ธ ๊ฒฝ์šฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.
  • db.delete() ๋ฉ”์†Œ๋“œ๋กœ Map์—์„œ ํ•ด๋‹น ํ‚ค๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

โญ Map์—์„œ id๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ParseInt()๋กœ ๋ณ€ํ™˜!

 

์ „์ฒด ์œ ํŠœ๋ฒ„ ์‚ญ์ œ

DELETE /youtubers
- req: x
- res: "๋ชจ๋“  ์ฑ„๋„์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค"

app.delete("/youtubers", function (req, res) {
  var message = "";
  if (db.size >= 1) {
    db.clear();
    message = "๋ชจ๋“  ์ฑ„๋„์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค";
  } else {
    message = "์ฑ„๋„์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค";
  }
  res.json({ message: message });
});
  • ๊ฒฝ๋กœ๊ฐ€ /youtubers์ธ DELETE ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • db.size๋กœ ๋ฐ์ดํ„ฐ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ , db.clear()๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
  • ์ด๋ฏธ ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

โฌ†๏ธPUT

PUT /youtubers/:id
- req: params.id, body(channelName)
- res: "์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค"

app.put("/youtubers/:id", function (req, res) {
  let { id } = req.params;
  id = parseInt(id);

  var youtuber = db.get(id);

  if (youtuber == undefined) {
    res.json({ message: "์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ฑ„๋„์ž…๋‹ˆ๋‹ค" });
  } else {
    var newTitle = req.body.channelName;
    youtuber.channelName = newTitle;
    db.set(id, youtuber);
    res.json({ message: `${newTitle}๋กœ ์ฑ„๋„๋ช…์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค` });
  }
});
  • req.params์—์„œ id๋ฅผ ๊ฐ€์ ธ์™€ ์ˆ˜์ •ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • ์กด์žฌํ•˜์ง€ ์•Š๋Š” id์ธ ๊ฒฝ์šฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
  • req.body์—์„œ ์ƒˆ ์ฑ„๋„๋ช…์„ ๊ฐ€์ ธ์™€ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋‹ค์‹œ Map์— ์ €์žฅํ•œ๋‹ค.
  • ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์„ ํ™œ์šฉํ•ด ๋™์  ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

โญ PUT ์š”์ฒญ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ body ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, Express์—์„œ body-parser ๋ฏธ๋“ค์›จ์–ด ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค!


๐Ÿ“ŠHTTP ์ƒํƒœ ์ฝ”๋“œ

API ์‘๋‹ต์„ ๋” ์ „๋ฌธ์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ ์ ˆํ•œ HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” ๊ธฐ๋ณธ ์‘๋‹ต๋งŒ ๋ณด๋ƒˆ์ง€๋งŒ, ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ด๋ฉด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋” ๋ช…ํ™•ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

1xx: ์ •๋ณด  
100Continue์š”์ฒญ์˜ ์ฒซ ๋ถ€๋ถ„์ด ๋ฐ›์•„๋“ค์—ฌ์กŒ์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๋Š” ๋‚˜๋จธ์ง€๋ฅผ ๊ณ„์† ๋ณด๋‚ด์•ผ ํ•จ
101Switching Protocols์„œ๋ฒ„๊ฐ€ ํ”„๋กœํ† ์ฝœ์„ ์ „ํ™˜ ์ค‘ (์˜ˆ: ์›น์†Œ์ผ“)
2xx: ์„ฑ๊ณต  
200OK์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋จ
201Created์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด ์ƒˆ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋จ
204No Content์š”์ฒญ์ด ์„ฑ๊ณตํ–ˆ์ง€๋งŒ ์‘๋‹ต ๋ณธ๋ฌธ์ด ์—†์Œ (DELETE ์„ฑ๊ณต ์‹œ ์ฃผ๋กœ ์‚ฌ์šฉ)
3xx: ๋ฆฌ๋‹ค์ด๋ ‰์…˜  
301Moved Permanently์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์˜ URI๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋จ
302Found์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์˜ URI๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋จ
304Not Modified์บ์‹œ๋œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์—ฌ์ „ํžˆ ์œ ํšจํ•จ
4xx: ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜  
400Bad Request์š”์ฒญ ๊ตฌ๋ฌธ์ด ์ž˜๋ชป๋จ
401Unauthorized์ธ์ฆ์ด ํ•„์š”ํ•จ
403Forbidden์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•จ (๊ถŒํ•œ ๋ถ€์กฑ)
404Not Found์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ
405Method Not Allowedํ—ˆ์šฉ๋˜์ง€ ์•Š์€ HTTP ๋ฉ”์†Œ๋“œ
409Conflict์š”์ฒญ์ด ํ˜„์žฌ ์„œ๋ฒ„ ์ƒํƒœ์™€ ์ถฉ๋Œ (์˜ˆ: ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ)
5xx: ์„œ๋ฒ„ ์˜ค๋ฅ˜  
500Internal Server Error์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜
501Not Implemented์„œ๋ฒ„๊ฐ€ ์š”์ฒญ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ
502Bad Gateway๊ฒŒ์ดํŠธ์›จ์ด ๋˜๋Š” ํ”„๋ก์‹œ ์„œ๋ฒ„๊ฐ€ ์ž˜๋ชป๋œ ์‘๋‹ต์„ ๋ฐ›์Œ
503Service Unavailable์„œ๋น„์Šค๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ (๊ณผ๋ถ€ํ•˜ ๋˜๋Š” ์œ ์ง€๋ณด์ˆ˜)
504Gateway Timeout๊ฒŒ์ดํŠธ์›จ์ด ๋˜๋Š” ํ”„๋ก์‹œ ์„œ๋ฒ„์˜ ์š”์ฒญ ์‹œ๊ฐ„ ์ดˆ๊ณผ

 


๋“œ๋””์–ด CRUD๋ฅผ ํ•œ ๋ฒˆ์”ฉ ์ฒดํ—˜ํ•ด๋ณด๊ณ , ์ƒํƒœ์ฝ”๋“œ๋ฅผ ์•Œ์•„๋ณด์•˜๋‹ค. ์‚ฌ์‹ค ์ง€๊ธˆ์€ ๋ฌด์กฐ๊ฑด ์„ฑ๊ณต์„ ๊ฐ€์ •ํ•œ ์ƒํ™ฉ์ด๋ผ ์ƒํƒœ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ณ ๋ ค๋Š” ์—†์—ˆ๋Š”๋ฐ, ๋ฐฑ์—”๋“œ api๋ฅผ ๋ฐ›์„ ๋•Œ๋ฉด ๊ฐ ์ƒํƒœ ์ฝ”๋“œ์— ๋”ฐ๋ฅธ ์‘๋‹ต๋„ ๋”ฐ๋กœ ๋„์›Œ์ฃผ๊ณค ํ–ˆ๋˜๊ฒŒ ๊ธฐ์–ต์ด ๋‚˜, ์ƒํƒœ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•œ api ๊ณ ๋„ํ™”๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์„๊นŒ ์ƒ๊ฐ์ด ๋“ ๋‹ค. 
 
foreach, map ๋ฉ”์„œ๋“œ ๋“ฑ ์œ ์šฉํ•œ ๊ฒƒ๋“ค์„ ๋งŽ์ด ๋ฐฐ์šฐ๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ, Map์œผ๋กœ ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๋‹ˆ ์‹ค์ œ api๋ผ๋Š” ๋А๋‚Œ์ด ๋“ค์ง€๋Š” ์•Š๋Š”๋‹ค. MariaDB๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™œ์šฉ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๊ณ  ์‹ถ๋‹ค.

'๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค > TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐ๋ธŒ์ฝ”์Šค] ๋นˆ ๊ฐ์ฒด ์ดˆ๊ธฐํ™” ํŒจํ„ด๊ณผ app.route()๋ฅผ ํ™œ์šฉํ•œ Express API ๊ตฌ์กฐํ™”  (1) 2025.04.22
[๋ฐ๋ธŒ์ฝ”์Šค] HTTP ์ƒํƒœ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ณ ๋„ํ™”(+ํ•ธ๋“ค๋Ÿฌ, ๋ฆฌ์Šค๋„ˆ, ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ)  (0) 2025.04.16
[๋ฐ๋ธŒ์ฝ”์Šค] โญ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ์จ์•ผ ํ•˜๋Š” ์ด์œ ์™€ DB ๋ฉด์ ‘ ๊ฟ€ํŒ  (0) 2025.04.14
[๋ฐ๋ธŒ์ฝ”์Šค] Postman์œผ๋กœ API ํ…Œ์ŠคํŠธํ•˜๊ธฐ(GET, POST)  (0) 2025.04.12
[๋ฐ๋ธŒ์ฝ”์Šค] Express Generator ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ํŒŒ์ผ ๋œฏ์–ด๋ณด๊ธฐ(www, app.js)  (3) 2025.04.11
'๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐ๋ธŒ์ฝ”์Šค] ๋นˆ ๊ฐ์ฒด ์ดˆ๊ธฐํ™” ํŒจํ„ด๊ณผ app.route()๋ฅผ ํ™œ์šฉํ•œ Express API ๊ตฌ์กฐํ™”
  • [๋ฐ๋ธŒ์ฝ”์Šค] HTTP ์ƒํƒœ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ณ ๋„ํ™”(+ํ•ธ๋“ค๋Ÿฌ, ๋ฆฌ์Šค๋„ˆ, ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ)
  • [๋ฐ๋ธŒ์ฝ”์Šค] โญ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ์จ์•ผ ํ•˜๋Š” ์ด์œ ์™€ DB ๋ฉด์ ‘ ๊ฟ€ํŒ
  • [๋ฐ๋ธŒ์ฝ”์Šค] Postman์œผ๋กœ API ํ…Œ์ŠคํŠธํ•˜๊ธฐ(GET, POST)
ํ‚ํ‚์ž‰
ํ‚ํ‚์ž‰
๋ฟŒ๋ก ํŠธ ๊ฐœ๋ฐœ์ž(์ง€๋ง์ƒ)์˜ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž ๋„์ „๊ธฐ
monicx.dev๋ฟŒ๋ก ํŠธ ๊ฐœ๋ฐœ์ž(์ง€๋ง์ƒ)์˜ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž ๋„์ „๊ธฐ
  • ํ‚ํ‚์ž‰
    monicx.dev
    ํ‚ํ‚์ž‰
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (161)
      • ๐Ÿ–ฅ๏ธdevelop (2)
        • Github (2)
        • Frontend (4)
        • Backend (5)
        • Mobile (0)
        • CS (0)
        • Three.js (0)
        • Docker (2)
      • ๐Ÿ“šbook (9)
        • npm Deep Dive (4)
      • ๐Ÿ“•review (5)
        • ์ฑ… (13)
        • ํ–‰์‚ฌ (1)
        • ํšŒ๊ณ  (2)
      • โญproject (5)
        • petiary (2)
        • ๆšŽ่ฉ  (0)
        • ์ธํ„ด (2)
      • ๐Ÿ˜ถโ€๐ŸŒซ๏ธalgorithm (0)
      • ๐Ÿ’กtips (1)
      • ๐Ÿ˜Ždaily (10)
      • ๐Ÿ•น๏ธgame (0)
      • ๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค (87)
        • TIL (61)
        • ํ”„๋กœ์ ํŠธ (18)
        • ํšŒ๊ณ  (8)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
  • ๋งํฌ

    • ๋ฒจ๋กœ๊ทธ
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
ํ‚ํ‚์ž‰
[๋ฐ๋ธŒ์ฝ”์Šค] Express DELETE์™€ PUT ๋ฉ”์„œ๋“œ ํ™œ์šฉ(+http ์ƒํƒœ์ฝ”๋“œ)

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.