[๋ฐ๋ธŒ์ฝ”์Šค] Express REST API ๊ธฐ์ดˆ(get(), res.send(), res.json(), res.params())

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

์ง€๊ธˆ๊นŒ์ง€๋Š” HTTP ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ  ๋ผ์šฐํŒ…์„ ๊ตฌํ˜„ํ•ด ๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ ๋งค๋ฒˆ ์ด๊ฑธ ์ง์ ‘ ๋‹ค ๋งŒ๋“ค์–ด์•ผ ํ•˜๋‚˜? ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

Express.js๋Š” ์ด๋Ÿฐ ์ž‘์—…์„ ๋” ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„ ์›Œํฌ์ด๋‹ค. ์˜ค๋Š˜์€ Express.js ๋ฅผ ์•Œ์•„๋ณด๊ณ , Express.js๋ฅผ ํ™œ์šฉํ•˜์—ฌ REST API๋ฅผ ๋งŒ๋“œ๋Š” ์‹ค์Šต์„ ํ•ด๋ณด์•˜๋‹ค.


๐Ÿ–คExpress

Express๋ž€?

Node.js ํ™˜๊ฒฝ์—์„œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ API๋ฅผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฒฝ๋Ÿ‰ ์›น ํ”„๋ ˆ์ž„์›Œํฌ

Express ๋Š” HTTP ๋ชจ๋“ˆ ์œ„์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ๋” ์ง๊ด€์ ์ธ ๋ผ์šฐํŒ…, ๋ฏธ๋“ค์›จ์–ด ์ฒ˜๋ฆฌ, ๋‹ค์–‘ํ•œ ์‘๋‹ต ๋ฉ”์„œ๋“œ ๋“ฑ์„ ์ œ๊ณตํ•œ๋‹ค.

 

ํŠน์ง•

  • ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•: ๋ผ์šฐํŒ…๊ณผ ์‘๋‹ต ์ฒ˜๋ฆฌ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๋‹จ
  • ๋ฏธ๋“ค์›จ์–ด ๊ธฐ๋ฐ˜: ์š”์ฒญ ํ๋ฆ„์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๋‹จ๊ณ„๋ณ„๋กœ ์‚ฝ์ž…
  • RESTful API ์„ค๊ณ„์— ์ตœ์ ํ™”: ๋‹ค์–‘ํ•œ HTTP ๋ฉ”์„œ๋“œ ์ฒ˜๋ฆฌ์— ์œ ๋ฆฌ
  • ํ’๋ถ€ํ•œ ์ƒํƒœ๊ณ„: ๋‹ค์–‘ํ•œ ๋ฏธ๋“ค์›จ์–ด์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์‰ฝ๊ฒŒ ํ†ตํ•ฉ ๊ฐ€๋Šฅ

Express๋Š” npm์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

npm i express

 

Express์™€ Node.js HTTP ๋ชจ๋“ˆ์˜ ์ฐจ์ด์ 

Node.js์˜ http.CreateServer() ๋ฐฉ์‹์€ ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด if๋ฌธ์ด๋‚˜ switch ๋ฌธ์œผ๋กœ ๋ถ„๊ธฐํ•˜๋ฉฐ, ๋ผ์šฐํŒ…์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ๋‹ค.

๋ฐ˜๋ฉด, Express๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

const express = require("express");
const app = express();

app.get("/", (req, res) => {
  res.send("Hello World");
});

app.listen(3000);
  • express() ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ app์— ๋‹ด๋Š”๋‹ค. app ๊ฐ์ฒด๋Š” ์„œ๋ฒ„ ์ž์ฒด๋ผ๊ณ  ๋ณด์•„๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.
  • app.listen()์œผ๋กœ ํฌํŠธ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  • ๋ผ์šฐํŒ…์€ app.get() ๋“ฑ์œผ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Express REST API ์‹ค์Šต

์•„๋ž˜๋Š” ๊ฐ„๋‹จํ•œ REST API ๋ผ์šฐํŒ… ์˜ˆ์ œ์ด๋‹ค.

app.get("/", (req, res) => {
  res.send("Hello World");
});

app.get("/test", (req, res) => {
  res.send("TEST SUCCESS");
});

app.get("/test/1", (req, res) => {
  res.send("One!!");
});
  • app.get()์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŠน์ • URL์— GET ์š”์ฒญ์„ ๋ณด๋ƒ‡์„ ๋•Œ ์‹คํ–‰ํ•  ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋งค์„œ๋“œ์ด๋‹ค.
  • URL ๊ฒฝ๋กœ๋ณ„๋กœ ๋ผ์šฐํŠธ๋ฅผ ์ •์˜ํ•˜๊ณ , ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ํ•ด๋‹น ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.(๋ฌธ์ž์—ด ์‘๋‹ต)
  • ์ด ์ฝœ๋ฐฑ์€ (req, res)๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋‹ค๋ฃฌ๋‹ค.

 

app.listen()์˜ ์œ„์น˜๋Š” ์ค‘์š”ํ• ๊นŒ?

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด ์•„๋‹ˆ๋‹ค.

app.listen(3000);

listen()์€ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ผ ๋ฟ์ด๋‹ค. ์ฝ”๋“œ ์ƒ๋‹จ์— ์žˆ๋“ , ํ•˜๋‹จ์— ์žˆ๋“  ์ƒ๊ด€์—†์ด ์ •์ƒ ์ž‘๋™ํ•œ๋‹ค. 

โญ ๋ชจ๋“  ๋ผ์šฐํŠธ์™€ ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ์ •์˜๋œ ์ดํ›„ listen()์„ ํ˜ธ์ถœํ•ด์•ผ ๋ชจ๋“  ์š”์ฒญ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ค€๋น„๋œ ์ƒํƒœ์—์„œ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

โŒ์˜ค๋ฅ˜: ERR_HTTP_HEADERS_SENT

์—ฌ๋Ÿฌ๊ฐœ์˜ ์‘๋‹ต์„ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ธฐ ์œ„ํ•ด, res.send()๋ฅผ ๋‘ ๋ฒˆ ์‚ฌ์šฉํ•ด๋ณด์•˜๋‹ค.

app.get('/product/1', function(res, req){
    res.send('node.js๋ฅผ ๋ฐฐ์›Œ๋ณด์ž(์ฑ…) 20000์›');
    res.send(20000);
})

์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋‹ˆ, ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (node:_http_outgoing:659:11)
    at ServerResponse.header (c:\Users\monic\OneDrive\๋ฐ”ํƒ• ํ™”๋ฉด\programmers\expressPractice\node_modules\express\lib\response.js:684:10)
    at ServerResponse.contentType (c:\Users\monic\OneDrive\๋ฐ”ํƒ• ํ™”๋ฉด\programmers\expressPractice\node_modules\express\lib\response.js:514:15)
    at ServerResponse.send (c:\Users\monic\OneDrive\๋ฐ”ํƒ• ํ™”๋ฉด\programmers\expressPractice\node_modules\express\lib\response.js:136:14)
    at c:\Users\monic\OneDrive\๋ฐ”ํƒ• ํ™”๋ฉด\programmers\expressPractice\express_demo.js:23:7
    at Layer.handleRequest (c:\Users\monic\OneDrive\๋ฐ”ํƒ• ํ™”๋ฉด\programmers\expressPractice\node_modules\router\lib\layer.js:152:17)
    at next (c:\Users\monic\OneDrive\๋ฐ”ํƒ• ํ™”๋ฉด\programmers\expressPractice\node_modules\router\lib\route.js:157:13)
    at Route.dispatch (c:\Users\monic\OneDrive\๋ฐ”ํƒ• ํ™”๋ฉด\programmers\expressPractice\node_modules\router\lib\route.js:117:3)
    at handle (c:\Users\monic\OneDrive\๋ฐ”ํƒ• ํ™”๋ฉด\programmers\expressPractice\node_modules\router\index.js:435:11)
    at Layer.handleRequest (c:\Users\monic\OneDrive\๋ฐ”ํƒ• ํ™”๋ฉด\programmers\expressPractice\node_modules\router\lib\layer.js:152:17)

ERR\_HTTP\_HEADERS\_SENT ์˜ค๋ฅ˜๋Š” ์‘๋‹ต ํ—ค๋”๊ฐ€ ์ด๋ฏธ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†ก๋œ ํ›„์— ๋‹ค์‹œ ํ—ค๋”๋ฅผ ์„ค์ •ํ•˜๋ ค ํ•ด์„œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์ด๋‹ค. ์ด๋ฏธ /product/1 ๋ผ์šฐํŠธ์—์„œ res.send()๋ฅผ ํ˜ธ์ถœํ–ˆ๋Š”๋ฐ, ๋‘ ๋ฒˆ์งธ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๊ฒƒ์ด๋‹ค.

โญ express์—์„œ๋Š” ํ•˜๋‚˜์˜ ์š”์ฒญ์— ๋Œ€ํ•ด res.send() ๋ฅผ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋ฌถ์–ด ํ•œ๋ฒˆ์— ์ „๋‹ฌํ•œ๋‹ค.

 


๐Ÿ”๊ฐ์ฒด์™€ JSON

๊ฐ์ฒด๋ž€?

์†์„ฑ(key)์™€ ๊ฐ’(value)์˜ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ

let book = {
  title: "Node.js๋ฅผ ๊ณต๋ถ€ํ•ด๋ณด์ž",
  price: 20000,
  description: "๋…ธ๋“œ๋ฅผ ๋ฐฐ์›Œ๋ณด์ž",
};

book.title ๋“ฑ์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ตฌ์กฐ์ ์ธ ๋ฐ์ดํ„ฐ ํ‘œํ˜„์— ์ ํ•ฉํ•œ ์ž๋ฃŒํ˜•์ด๋‹ค.

 

JSON์ด๋ž€?

javascript Object Notation, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ํ˜•์‹

์›น์—์„œ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.(JSON.stringify(), JSON.parse())

ํ•ญ๋ชฉ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด JSON
key ๋”ฐ์˜ดํ‘œ ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์Œ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์•ผ ํ•จ.
value type ํ•จ์ˆ˜, ์‹ฌ๋ณผ ๋“ฑ ํฌํ•จ ๊ฐ€๋Šฅ ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ฐฐ์—ด, ๊ฐ์ฒด๋งŒ ํ—ˆ์šฉ

 

โญres.send() vs res.json()

res.send()

๋ชจ๋“  ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์ž‡๋Š” ๋ฒ”์šฉ ์‘๋‹ต ๋ฉ”์„œ๋“œ
/**
     * Send a response.
     *
     * Examples:
     *
     *     res.send(new Buffer('wahoo'));
     *     res.send({ some: 'json' });
     *     res.send('<p>some html</p>');
     *     res.status(404).send('Sorry, cant find that');
     */
    send: Send<ResBody, this>;
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด(JSON)๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•ด์„œ ์‘๋‹ตํ•œ๋‹ค.
  • HTML, ๋ฒ„ํผ, ๋ฌธ์ž์—ด ๋“ฑ ๋‹ค์–‘ํ•œ ํƒ€์ž… ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

res.json()

JSON ์ „์šฉ ์‘๋‹ต ๋ฉ”์„œ๋“œ
/**
     * Send JSON response.
     *
     * Examples:
     *
     *     res.json(null);
     *     res.json({ user: 'tj' });
     *     res.status(500).json('oh noes!');
     *     res.status(404).json('I dont have that');
     */
    json: Send<ResBody, this>;
  • ๋ช…ํ™•ํ•˜๊ฒŒ JSON ํ˜•์‹์œผ๋กœ ์‘๋‹ตํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ํ•„์š”ํ•œ REST API ๊ฐœ๋ฐœ ์‹œ์—๋Š” ๊ฐ€๋…์„ฑ๊ณผ ๋ช…ํ™•์„ฑ ์ธก๋ฉด์—์„œ ๊ถŒ์žฅ๋œ๋‹ค!

๐ŸŒŠํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ›์•„์„œ ๋™์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ

๋ผ์šฐํŠธ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด /product/1์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

app.get("/product/1", (req, res) => {
  res.json({
    title: "Node.js๋ฅผ ๊ณต๋ถ€ํ•ด๋ณด์ž",
    price: 20000,
    description: "๋…ธ๋“œ๋ฅผ ๋ฐฐ์›Œ๋ณด์ž",
  });
});

ํ•˜์ง€๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, /product/:num ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋ฉด, :num์€ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ๊ฐ’์ด๋ฏ€๋กœ /product/1, /product/2, product/3...์–ด๋–ค ๊ฐ’์ด ์˜ค๋“  ๋Œ€์‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

const express = require("express");
const app = express();

app.get("/product/:num", (req, res) => {
  res.json({ num: req.params.num });
});

app.listen(3001);
  • req.params.num์€ URL์—์„œ ์ „๋‹ฌ๋œ num ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.
  • ๋™์  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.


http ๋ชจ๋“ˆ๋งŒ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ผ์šฐํŒ… ์ฒ˜๋ฆฌ๊ฐ€ ๊ฝค๋‚˜ ๋ณต์žกํ–ˆ๋Š”๋ฐ, express๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ get(), res.send()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋ฐ”๋กœ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์˜ค๋Š˜์€ get() ๋ฉ”์„œ๋“œ ์ •๋„๋งŒ ์‚ฌ์šฉํ•ด์„œ ์งฑ ์‰ฝ๋„ค ๋А๋‚Œ์ด์—ˆ๋Š”๋ฐ ๋นจ๋ฆฌ ๋ณต์žกํ•œ api ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ๋ณด๊ณ  ์‹ถ๋‹ค.

 

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

[๋ฐ๋ธŒ์ฝ”์Šค] Express Generator ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ํŒŒ์ผ ๋œฏ์–ด๋ณด๊ธฐ(www, app.js)  (3) 2025.04.11
[๋ฐ๋ธŒ์ฝ”์Šค] Express URL ํ•ธ๋“ค๋ง (req.query(), ๋น„๊ตฌ์กฐํ™”, Map)  (1) 2025.04.10
[๋ฐ๋ธŒ์ฝ”์Šค] Node.js ๋ชจ๋“ˆ๊ณผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ดํ•ด(๋ชจ๋“ˆํ™”, npm, ๋…ผ๋ธ”๋กœํ‚น I/O)  (1) 2025.04.07
[๋ฐ๋ธŒ์ฝ”์Šค] API์™€ REST API ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ  (0) 2025.04.05
[๋ฐ๋ธŒ์ฝ”์Šค] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์ž‘ํ•˜๊ธฐ(๐Ÿ‹Docker, MariaDB, SQL)  (1) 2025.04.04
'๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐ๋ธŒ์ฝ”์Šค] Express Generator ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ํŒŒ์ผ ๋œฏ์–ด๋ณด๊ธฐ(www, app.js)
  • [๋ฐ๋ธŒ์ฝ”์Šค] Express URL ํ•ธ๋“ค๋ง (req.query(), ๋น„๊ตฌ์กฐํ™”, Map)
  • [๋ฐ๋ธŒ์ฝ”์Šค] Node.js ๋ชจ๋“ˆ๊ณผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ดํ•ด(๋ชจ๋“ˆํ™”, npm, ๋…ผ๋ธ”๋กœํ‚น I/O)
  • [๋ฐ๋ธŒ์ฝ”์Šค] API์™€ REST API ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ
ํ‚ํ‚์ž‰
ํ‚ํ‚์ž‰
๋ฟŒ๋ก ํŠธ ๊ฐœ๋ฐœ์ž(์ง€๋ง์ƒ)์˜ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž ๋„์ „๊ธฐ
  • ํ‚ํ‚์ž‰
    monicx.dev
    ํ‚ํ‚์ž‰
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (173)
      • ๐Ÿ–ฅ๏ธdevelop (2)
        • Github (2)
        • Frontend (4)
        • Backend (5)
        • Mobile (0)
        • CS (0)
        • Three.js (0)
        • Docker (2)
      • ๐Ÿ“šbook (9)
        • npm Deep Dive (4)
      • ๐Ÿ“•review (33)
        • ์ฑ… (24)
        • ํ–‰์‚ฌ (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 REST API ๊ธฐ์ดˆ(get(), res.send(), res.json(), res.params())
์ƒ๋‹จ์œผ๋กœ

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