[๋ฐ๋ธŒ์ฝ”์Šค] HTTP ์ƒํƒœ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ณ ๋„ํ™”(+ํ•ธ๋“ค๋Ÿฌ, ๋ฆฌ์Šค๋„ˆ, ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ)

2025. 4. 16. 19:45ยท๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL

๐Ÿš—ํ•ธ๋“ค๋Ÿฌ์™€ ๋ฆฌ์Šค๋„ˆ

ํ•ธ๋“ค๋Ÿฌ

์š”์ฒญ์— ์˜ํ•ด ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ

HTTP ์š”์ฒญ์ด ๋‚ ์•„์˜ค๋ฉด ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. Node.js์—์„œ๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ํ˜•ํƒœ๋กœ app.HTTPMethod(path, ํ•ธ๋“ค๋Ÿฌ) ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, Express์—์„œ GET ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

app.get('/youtubers', function(req, res) {
    //์—ฌ๊ธฐ์„œ function(req, res) {} ๋ถ€๋ถ„์ด ํ•ธ๋“ค๋Ÿฌ!!
    res.json(youtubers);
});

 

ํ•ธ๋“ค๋Ÿฌ์˜ ์—ญํ• ๊ณผ ๊ตฌ์กฐ

ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ req, res ๋‘ ๊ฐœ์˜ ์ค‘์š”ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š”๋‹ค.

req(request): ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด

  • req.params: URL ๊ฒฝ๋กœ์—์„œ ์ถ”์ถœํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜
  • req.query: URL ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์—์„œ ์ถ”์ถœํ•œ ๊ฐ์ฒด
  • req.body: ์š”์ฒญ ๋ณธ๋ฌธ ๋ฐ์ดํ„ฐ
  • req.headers : HTTP ํ—ค๋” ์ •๋ณด
  • req.cookies: ์ฟ ํ‚ค ์ •๋ณด

res(response): ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ผ ์‘๋‹ต์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ์ฒด

  • res.send() : ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์‘๋‹ต ์ „์†ก
  • res.json() : JSON ํ˜•์‹์˜ ์‘๋‹ต ์ „์†ก
  • res.status() : HTTP ์ƒํƒœ ์ฝ”๋“œ ์„ค์ •
  • res.redirect() : ๋‹ค๋ฅธ URL๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
  • res.render() : ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ทฐ ๋ Œ๋”๋ง

์„ ํƒ์ ์œผ๋กœ, ์„ธ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์ธ next๋ฅผ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋กœ ์ œ์–ด๋ฅผ ๋„˜๊ธฐ๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

app.get('/youtubers', function(req, res, next) {
  //์ค‘๊ฐ„ ์ฒ˜๋ฆฌ ๋กœ์ง
  next(); //๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด๋กœ ์ œ์–ด ์ด๋™
});

 

๋ฆฌ์Šค๋„ˆ

ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜

๋ฆฌ์Šค๋„ˆ๋Š” Node.js์˜ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜์—์„œ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•œ๋‹ค. Express์—์„œ๋Š” ์ฃผ๋กœ ์„œ๋ฒ„ ๊ด€๋ จ ์ด๋ฒคํŠธ์™€ ์ฒ˜๋ฆฌ์— ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

 

์„œ๋ฒ„ ๋ฆฌ์Šค๋„ˆ

์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฆฌ์Šค๋„ˆ

const server = app.listen(3000, () => {
  console.log('์„œ๋ฒ„๊ฐ€ 3000๋ฒˆ ํฌํŠธ์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค');
});

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๊ฐ€ ๋ฆฌ์Šค๋„ˆ์ด๋‹ค.

 

์ด๋ฒคํŠธ ์ด๋ฏธํ„ฐ์™€ ๋ฆฌ์Šคํ„ฐ

Node.js๋Š” EventEmitter ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•œ๋‹ค. Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ HTTP ์„œ๋ฒ„๋Š” EventEmitter์„ ์ƒ์†๋ฐ›๋Š”๋‹ค.

// HTTP ์„œ๋ฒ„ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ
server.on('error', (error) => {
  if (error.syscall !== 'listen') throw error;

  console.error(`์„œ๋ฒ„ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: ${error}`);
  process.exit(1);
});

server.on('listening', () => {
  const addr = server.address();
  console.log(`์„œ๋ฒ„๊ฐ€ ${addr.port}๋ฒˆ ํฌํŠธ์—์„œ ๋ฆฌ์Šค๋‹ ์ค‘์ž…๋‹ˆ๋‹ค.`);
});

 

ํ•ธ๋“ค๋Ÿฌ์™€ ๋ฆฌ์Šค๋„ˆ์˜ ์ฐจ์ด

  • ํ•ธ๋“ค๋Ÿฌ: HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜(req, res๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์Œ)
  • ๋ฆฌ์Šค๋„ˆ: ํŠน์ • ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜(์ด๋ฒคํŠธ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์Œ)
โญ ํ•ธ๋“ค๋Ÿฌ๋Š” ๋ฆฌ์Šค๋„ˆ์˜ ํŠน์ˆ˜ ํ˜•ํƒœ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. HTTP ์š”์ฒญ์ด๋ผ๋Š” ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋ฐ”๋กœ ํ•ธ๋“ค๋Ÿฌ!

๐Ÿ”find() ๋ฉ”์„œ๋“œ

๋ฐฐ์—ด์—์„œ ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๋ฅผ ์ฐพ์„ ๋•Œ, ์ผ๋ฐ˜์ ์œผ๋กœ forEach ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

fruits.forEach((fruit) => {
    if (fruit.id == id) {
        findFruit = fruit;
        }
    });

 

ํ•˜์ง€๋งŒ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ find() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

var findFruit = fruits.find((fruit) => fruit.id == id);

โญ find() ๋ฉ”์„œ๋“œ๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๋‹ค๋ฅธ ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ๋“ค

find() ์™ธ์—๋„ ๋ฐฐ์—ด ์กฐ์ž‘์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ๋“ค์ด ์žˆ๋‹ค.

 

filter()

์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜

const expensive = fruits.filter((fruit) => fruit.price > 1000);

 

map()

๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ๋ณ€ํ™˜ํ•˜์—ฌ ์ƒˆ ๋ฐฐ์—ด ๋ฐ˜ํ™˜

const fruitNames = fruits.map((fruit) => fruit.name);

 

some()

ํ•˜๋‚˜ ์ด์ƒ์˜ ์š”์†Œ๊ฐ€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธ(boolean ๋ฐ˜ํ™˜)

const hasExpensive = fruits.some((fruit) => fruit.price > 1000);

 

every()

๋ชจ๋“  ์š”์†Œ๊ฐ€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธ(boolean ๋ฐ˜ํ™˜)

const allFresh = fruits.every((fruit) => fruit.fresh === true);

โฌ†๏ธ์ƒํƒœ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ณ ๋„ํ™”ํ•˜๊ธฐ

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

app.post("/test", function (req, res) {
  const channelName = req.body.channelName;

  if (channelName) {
    db.set(id++, req.body);

    res.status(201).json({
      message: `${db.get(id - 1).channelName}๋‹˜์˜ ์œ ํŠœ๋ฒ„ ์ƒํ™œ์„ ์‘์›ํ•ฉ๋‹ˆ๋‹ค.`,
    });
  } else {
    res.status(400).json({ message: "์š”์ฒญ๊ฐ’์„ ์ œ๋Œ€๋กœ ๋ณด๋‚ด์ฃผ์„ธ์š”" });
  }
});
  • 201: ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ์„ฑ๊ณต(POST ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋จ)
  • 400: ์ž˜๋ชป๋œ ์š”์ฒญ(ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ˆ„๋ฝ๋จ)
โญ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•œ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋Š” API์˜ ๊ฐ€๋…์„ฑ๊ณผ ์‚ฌ์šฉ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒํ•œ๋‹ค! ํด๋ผ์ด์–ธํŠธ๋Š” ์ƒํƒœ ์ฝ”๋“œ๋งŒ์œผ๋กœ ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋น ๋ฅด๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ณ , ์ ์ ˆํ•œ ํ›„์† ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘ฅ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ

์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๋‚ด์šฉ๋“ค์„ ํ™œ์šฉํ•˜์—ฌ, ๊ฐ„๋‹จํ•œ ํšŒ์›๊ฐ€์ž… API๋ฅผ ์‹ค์Šตํ•ด๋ณด์•˜๋‹ค.

 

๊ตฌํ˜„ ๊ธฐ๋Šฅ

ํšŒ์›
-๋กœ๊ทธ์ธ
-ํšŒ์›๊ฐ€์ž…
-ํšŒ์› ์ •๋ณด ์กฐํšŒ
-ํšŒ์› ํƒˆํ‡ด

์ฑ„๋„
-์ฑ„๋„ ์ƒ์„ฑ
-์ฑ„๋„ ์ˆ˜์ •
-์ฑ„๋„ ์‚ญ์ œ

ํšŒ์›์€ ๊ณ„์ • 1๊ฐœ ๋‹น ์ตœ๋Œ€ 100๊ฐœ ์ฑ„๋„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

API ์„ค๊ณ„

๋กœ๊ทธ์ธ

method post
path /login
req body(userId, password)
res 200: ${name} ๋‹˜ ๋กœ๊ทธ์ธ ์„ฑ๊ณต.
400: ์ž˜๋ชป๋œ ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

 

ํšŒ์›๊ฐ€์ž…

method post
path /signup
req body(userId, password, name)
res 201: ${name} ๋‹˜ ํšŒ์›๊ฐ€์ž…์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.
400: ์š”์ฒญ๊ฐ’์„ ์ œ๋Œ€๋กœ ๋ณด๋‚ด์ฃผ์„ธ์š”

 

ํšŒ์› ์กฐํšŒ(๊ฐœ๋ณ„)

method get
path /users/:id
req params(id)
res 200: {userId, name}
404: ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํšŒ์›์ž…๋‹ˆ๋‹ค.

 

ํšŒ์› ํƒˆํ‡ด(๊ฐœ๋ณ„)

method delete
path /users/:id
req params(id)
res 200: ํšŒ์›ํƒˆํ‡ด๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
404: ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํšŒ์›์ž…๋‹ˆ๋‹ค.

 

API ๊ตฌํ˜„

ํšŒ์›๊ฐ€์ž…

app.post("/signup", function (req, res) {
  if (req.body !== undefined && req.body.userID) {
    db.set(id++, req.body);
    res.status(201).json({
      message: `${req.body.userID}๋‹˜ ํšŒ์›๊ฐ€์ž…์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.`,
    });
  } else {
    res.status(400).json({ message: "์š”์ฒญ๊ฐ’์„ ์ œ๋Œ€๋กœ ๋ณด๋‚ด์ฃผ์„ธ์š”" });
  }
});

 

ํšŒ์› ์กฐํšŒ(๊ฐœ๋ณ„)

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

  const user = db.get(id);

  if (user == undefined) {
    res.status(404).json({ message: "์กด์žฌํ•˜์ง€ ์•Š๋Š” ํšŒ์›์ž…๋‹ˆ๋‹ค" });
  } else {
    res.status(200).json({ userId: user.userId, name: user.name });
  }
});

 

ํšŒ์› ์‚ญ์ œ(๊ฐœ๋ณ„)

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

  const user = db.get(id);
  if (user == undefined) {
    res.status(404).json({ message: "์กด์žฌํ•˜์ง€ ์•Š๋Š” ํšŒ์›์ž…๋‹ˆ๋‹ค" });
  } else {
    db.delete(id);
    res.status(200).json({ message: "ํšŒ์› ํƒˆํ‡ด๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค" });
  }
});


์ƒํƒœ ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ์ •๋ง ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ ์ ˆํ•œ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ์ „์†กํ•˜๋‹ˆ API์˜ ํ’ˆ์งˆ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋œ ๊ฒƒ ์ฒ˜๋Ÿผ ๋А๊ปด์กŒ๋‹ค. 200, 201, 400, 404 ์ฝ”๋“œ๋งŒ์œผ๋กœ๋„ ์š”์ฒญ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋น ๋ฅด๊ฒŒ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ ์“ฐ์ง€๋Š” ์•Š์•˜์ง€๋งŒ, app.route()๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋™์ผํ•œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐ€์ง„ API๋“ค์„ ๋ถ„๊ธฐํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋” ๊น”๋”ํ•˜๊ฒŒ ์งœ๋Š” ๋ฐฉ๋ฒ•์„ ์ž ๊น ๋ฐฐ์› ๋‹ค.์•ž์œผ๋กœ ๋” ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ API๋ฅผ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋  ํ…๋ฐ, ์ •๋ง ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ด๊ฒ ๊ตฌ๋‚˜ ์ƒ๊ฐํ–ˆ๋‹ค. .get().delete() ๋กœ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ ธ์„œ ์ฝ”๋“œ๊ฐ€ ๋” ์งง์•„์ง€์ง„ ์•Š๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ..? ์•ž์œผ๋กœ ๋” ํšจ์œจ์ ์ธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๋ฐฐ์šฐ์ง€ ์•Š์„๊นŒ ์‹ถ์–ด ๊ธฐ๋Œ€๊ฐ€ ๋œ๋‹ค. 

 

 

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

[๋ฐ๋ธŒ์ฝ”์Šค] Express ๋ผ์šฐํ„ฐ ๋ชจ๋“ˆํ™”์™€ userId๋ฅผ ํ™œ์šฉํ•œ API ๊ตฌ์กฐ ๊ฐœ์„   (0) 2025.04.23
[๋ฐ๋ธŒ์ฝ”์Šค] ๋นˆ ๊ฐ์ฒด ์ดˆ๊ธฐํ™” ํŒจํ„ด๊ณผ app.route()๋ฅผ ํ™œ์šฉํ•œ Express API ๊ตฌ์กฐํ™”  (1) 2025.04.22
[๋ฐ๋ธŒ์ฝ”์Šค] Express DELETE์™€ PUT ๋ฉ”์„œ๋“œ ํ™œ์šฉ(+http ์ƒํƒœ์ฝ”๋“œ)  (0) 2025.04.15
[๋ฐ๋ธŒ์ฝ”์Šค] โญ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ์จ์•ผ ํ•˜๋Š” ์ด์œ ์™€ DB ๋ฉด์ ‘ ๊ฟ€ํŒ  (0) 2025.04.14
[๋ฐ๋ธŒ์ฝ”์Šค] Postman์œผ๋กœ API ํ…Œ์ŠคํŠธํ•˜๊ธฐ(GET, POST)  (0) 2025.04.12
'๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐ๋ธŒ์ฝ”์Šค] Express ๋ผ์šฐํ„ฐ ๋ชจ๋“ˆํ™”์™€ userId๋ฅผ ํ™œ์šฉํ•œ API ๊ตฌ์กฐ ๊ฐœ์„ 
  • [๋ฐ๋ธŒ์ฝ”์Šค] ๋นˆ ๊ฐ์ฒด ์ดˆ๊ธฐํ™” ํŒจํ„ด๊ณผ app.route()๋ฅผ ํ™œ์šฉํ•œ Express API ๊ตฌ์กฐํ™”
  • [๋ฐ๋ธŒ์ฝ”์Šค] Express DELETE์™€ PUT ๋ฉ”์„œ๋“œ ํ™œ์šฉ(+http ์ƒํƒœ์ฝ”๋“œ)
  • [๋ฐ๋ธŒ์ฝ”์Šค] โญ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ์จ์•ผ ํ•˜๋Š” ์ด์œ ์™€ DB ๋ฉด์ ‘ ๊ฟ€ํŒ
ํ‚ํ‚์ž‰
ํ‚ํ‚์ž‰
๋ฟŒ๋ก ํŠธ ๊ฐœ๋ฐœ์ž(์ง€๋ง์ƒ)์˜ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž ๋„์ „๊ธฐ
  • ํ‚ํ‚์ž‰
    monicx.dev
    ํ‚ํ‚์ž‰
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (144) N
      • ๐Ÿ–ฅ๏ธdevelop (2)
        • Github (2)
        • Frontend (4)
        • Backend (5)
        • Mobile (0)
        • CS (0)
        • Three.js (0)
        • Docker (2)
      • ๐Ÿ“šbook (6) N
        • npm Deep Dive (4)
      • ๐Ÿ“•review (4)
        • ์ฑ… (12)
        • ํ–‰์‚ฌ (0)
        • ํšŒ๊ณ  (2)
      • โญproject (5)
        • petiary (2)
        • ๆšŽ่ฉ  (0)
        • ์ธํ„ด (2)
      • ๐Ÿ˜ถ‍๐ŸŒซ๏ธalgorithm (0)
      • ๐Ÿ’กtips (1)
      • ๐Ÿ˜Ždaily (10)
      • ๐Ÿ•น๏ธgame (0)
      • ๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค (76) N
        • TIL (51) N
        • ํ”„๋กœ์ ํŠธ (17)
        • ํšŒ๊ณ  (8)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
ํ‚ํ‚์ž‰
[๋ฐ๋ธŒ์ฝ”์Šค] HTTP ์ƒํƒœ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ณ ๋„ํ™”(+ํ•ธ๋“ค๋Ÿฌ, ๋ฆฌ์Šค๋„ˆ, ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ)
์ƒ๋‹จ์œผ๋กœ

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