๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป Dev/Back-End

express ๊ธฐ์ดˆ(1): ์„œ๋ฒ„ ์„ค์ •, http ๋ชจ๋“ˆ๊ณผ์˜ ๋น„๊ต

yesolz 2024. 9. 1. 23:22
728x90

Express.js๋Š” Node.js ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ธ๊ธฐ ์žˆ๋Š” ์›น ํ”„๋ ˆ์ž„์›Œํฌ. ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„ ์„ค์ •๊ณผ API ์—”๋“œํฌ์ธํŠธ ์ •์˜๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
https://www.npmjs.com/package/express

 

express

Fast, unopinionated, minimalist web framework. Latest version: 4.19.2, last published: 5 months ago. Start using express in your project by running `npm i express`. There are 85293 other projects in the npm registry using express.

www.npmjs.com

npm i express
 

Express ์„œ๋ฒ„ ์„ค์ •

const express = require('express')
const app = express()

app.get('/', function (req, res) {
  res.send('Hello World')
})

app.listen(3000)
  • express ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์™€ ์•ฑ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ
  • app.listen์œผ๋กœ ์„œ๋ฒ„ ์‹คํ–‰. ์—ฌ๊ธฐ์„œ๋Š” 3000๋ฒˆ ํฌํŠธ๋ฅผ ์‚ฌ์šฉ
  • res.send๋Š” ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋”ฐ๋ผ ์‘๋‹ต์˜ Content-Type์„ ์ž๋™์œผ๋กœ ์„ค์ •ํ•จ.

 

๋™์  ๋ผ์šฐํŠธ์™€ ๋งค๊ฐœ๋ณ€์ˆ˜

๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•œ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ

  • "/products/:n"์—์„œ :n์€ ๋™์  ๋งค๊ฐœ๋ณ€์ˆ˜. req.params.n์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ.
  • res.json์€ JavaScript ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์„ JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ ํ›„, Content-Type์„ application/json์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์‘๋‹ตํ•จ.
app.get("/products/:n", function (req, res) {
  console.log(req.params.n);
  res.json({
    product: req.params.n,
  });
});
  • ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ฐ์ฒด๋ฅผ JSON์œผ๋กœ ์‘๋‹ต
let book = {
  title: "Node.js",
  price: 25.5,
  description: "Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine.",
};

app.get("/book", function (req, res) {
  res.json(book);
});

 

HTTP ๋ชจ๋“ˆ๊ณผ Express.js ๋น„๊ต

1. ์ฝ”๋“œ ์ž‘์„ฑ์˜ ๊ฐ„๊ฒฐํ•จ

  • HTTP ๋ชจ๋“ˆ: Node.js์— ๋‚ด์žฅ๋œ ๊ธฐ๋ณธ ๋ชจ๋“ˆ๋กœ, ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋ผ์šฐํŒ…์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ. ๋ณต์žกํ•œ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ๋‚˜ ์š”์ฒญ๋ณ„ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๊ณ  ๋ณต์žกํ•ด์ง.
  • Express.js: ๋ผ์šฐํŒ…๊ณผ ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ๋‚ด์žฅ๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•จ. ๋ช‡ ์ค„์˜ ์ฝ”๋“œ๋กœ ์„œ๋ฒ„ ์„ค์ • ๋ฐ ๋‹ค์–‘ํ•œ ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ.

2. ๋ฏธ๋“ค์›จ์–ด ์ง€์›

  • HTTP ๋ชจ๋“ˆ: ๋ฏธ๋“ค์›จ์–ด ๊ธฐ๋Šฅ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜์ง€ ์•Š์Œ. ์š”์ฒญ๊ณผ ์‘๋‹ต ์‚ฌ์ด์˜ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ.
  • Express.js: ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ†ตํ•ด ์š”์ฒญ ์ฒ˜๋ฆฌ์˜ ๊ฐ ๋‹จ๊ณ„์—์„œ ์‰ฝ๊ฒŒ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Œ. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ๊ทธ ๊ธฐ๋ก, ์ธ์ฆ ์ฒ˜๋ฆฌ, ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋“ฑ์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ.

3. ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ

  • HTTP ๋ชจ๋“ˆ: ๊ฒฝ๋กœ์™€ ๋ฉ”์„œ๋“œ๋ณ„๋กœ ์š”์ฒญ์„ ์ˆ˜๋™์œผ๋กœ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ. ๋ณต์žกํ•œ ๋ผ์šฐํŒ… ๋กœ์ง์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง.
  • Express.js: ๋ผ์šฐํŒ…์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด ๊ฒฝ๋กœ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ. ๋™์  ๊ฒฝ๋กœ์™€ URL ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ๋„ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ.

4. ํ™•์žฅ์„ฑ

  • HTTP ๋ชจ๋“ˆ: ๊ธฐ๋ณธ ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณตํ•˜๋ฉฐ, ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ์ถ”๊ฐ€ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•จ.
  • Express.js: ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ†ตํ•ด ๊ธฐ๋Šฅ ํ™•์žฅ์ด ์šฉ์ดํ•จ. ํ…œํ”Œ๋ฆฟ ์—”์ง„, ์ •์  ํŒŒ์ผ ์ œ๊ณต, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์†์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ.

5. ์‚ฌ์šฉ ์šฉ๋„

  • HTTP ๋ชจ๋“ˆ: ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„๋‚˜ ํŠน์ •ํ•œ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ ํ•ฉ.
  • Express.js: ๋ณต์žกํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ API ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ์ ํ•ฉ.

 

๋ฏธ๋“ค์›จ์–ด(Middleware): Express.js์™€ ๊ฐ™์€ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์š”์ฒญ(req)์™€ ์‘๋‹ต(res) ์‚ฌ์ด์— ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜.
์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ํ๋ฆ„์„ ์ œ์–ดํ•˜๊ณ , ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.
ex) ์š”์ฒญ ์ฒ˜๋ฆฌ ๋ฐ ๋ณ€ํ™˜, ๋กœ๊ทธ ๊ธฐ๋ก, ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ, ์ •์  ํŒŒ์ผ ์ œ๊ณต, ๋ผ์šฐํŒ…, ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋“ฑ. 
728x90