[Web Server] Refactor Express

์œ ์•„ํ˜„ยท2022๋…„ 12์›” 15์ผ
0

Server

๋ชฉ๋ก ๋ณด๊ธฐ
3/3
post-thumbnail

โค๏ธโ€๐Ÿ”ฅ Express

  • Node.js ํ™˜๊ฒฝ์—์„œ ์›น ์„œ๋ฒ„, API ์„œ๋ฒ„๋ฅผ ์ œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ

[Express๋กœ ๊ตฌํ˜„ํ•œ ์„œ๋ฒ„๊ฐ€ Node.js HTTP ๋ชจ๋“ˆ๋กœ ์ž‘์„ฑํ•œ ์„œ๋ฒ„์™€ ๋‹ค๋ฅธ ์ ]

  1. ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
  2. ๋ผ์šฐํ„ฐ ์ œ๊ณต // https://expressjs.com/ko/guide/routing.html

โค๏ธโ€๐Ÿ”ฅ ๊ธฐ๋ณธ ๋ผ์šฐํŒ…

โญ ๋ผ์šฐํŒ…

  • URI ๋ฐ ํŠน์ •ํ•œ HTTP ์š”์ฒญ ๋ฉ”์†Œ๋“œ์ธ ํŠน์ • ์—”๋“œ ํฌ์ธํŠธ์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‘๋‹ตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ/ ์—”๋“œ ํฌ์ธํŠธ์˜ ์ •์˜, ํ•ด๋‹น ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•ด์„œ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‘๋‹ตํ•˜๋Š” ๋ฐฉ์‹
  • ๋ฉ”์„œ๋“œ์™€ url๋กœ ๋ถ„๊ธฐ์ ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ
  • ํด๋ผ์ด์–ธํŠธ๋Š” ํŠน์ •ํ•œ HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ์™€ ํ•จ๊ป˜ ์„œ๋ฒ„์˜ ํŠน์ • URL๋กœ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š”๋ฐ, ๋ผ์šฐํŒ…์€ ํด๋ผ์ด์–ธํŠธ์— ํ•ด๋‹นํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ์— ๋”ฐ๋ผ ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•œ๋‹ค.

โญ ๋ผ์šฐํ„ฐ

  • ํŒจํ‚ท์˜ ์œ„์น˜๋ฅผ ์ถ”์ถœํ•˜์—ฌ, ๊ทธ ์œ„์น˜์— ๋Œ€ํ•œ ์ตœ์ ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์—ฌ, ์ด ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ ํŒจํ‚ท์„ ๋‹ค์Œ ์žฅ์น˜๋กœ ์ „ํ–ฅ์‹œํ‚ค๋Š” ์žฅ์น˜, ํ•œ ๊ฐœ์˜ ์ธํ„ฐ๋„ท ํšŒ์‹ ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ชผ๊ฐœ์–ด ์ค‘๊ณ„ ์—ญํ• ์„ ํ•ด ์ฃผ๋Š” ์žฅ์น˜ ex) ์ธํ„ฐ๋„ท ๊ณต์œ ๊ธฐ

โญ ๋ผ์šฐํŠธ

  • ๊ฒฝ๋กœ, ์„œ๋กœ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ  ์ „์†กํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ๊ฒฝ๋กœ

app.METHOD(PATH, HANDLER)

ex)
app.get('/', (req, res)=> {
	res.send('Hello World!')
})

์œ„์™€ ๊ฐ™์ด ๊ฐ ๋ผ์šฐํŠธ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•จ์ˆ˜๋Š” ๋ผ์šฐํŠธ(๊ฒฝ๋กœ)๊ฐ€ ์ผ์น˜ํ•  ๋•Œ ์‹คํ–‰๋œ๋‹ค.

  • app: express์˜ ์ธ์Šคํ„ด์Šค
  • METHOD: HTTP ์š”์ฒญ ๋ฉ”์†Œ๋“œ
  • PATH: ์„œ๋ฒ„์—์„œ์˜ ๊ฒฝ๋กœ
  • HANDLER: ๋ผ์šฐํŠธ(๊ฒฝ๋กœ)๊ฐ€ ์ผ์น˜ํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜

๐ŸŽƒ ex) /user ๋ผ๋Š” ๋ผ์šฐํŠธ์— ๋Œ€ํ•œ PUT ์š”์ฒญ์— ์‘๋‹ต

app.put('/user', (req, res) => {
	res.send('Got a PUT request at /user')
})

โค๏ธโ€๐Ÿ”ฅ ๋ผ์šฐํŒ…: ๋ฉ”์„œ๋“œ์™€ url์— ๋”ฐ๋ผ ๋ถ„๊ธฐํ•˜๊ธฐ!

Node.js๋กœ ๋ผ์šฐํŒ…์„ ๊ตฌํ˜„

const http - require('http');
const PORT = 4999;
const ip = 'localhost'

const requestHandler = (req, res) => {
	// ์š”์ฒญ ๊ฒฝ๋กœ๊ฐ€ lower์ผ ๋•Œ
    if(req.url === '/lower') {
    	if(req.method === 'GET'){
        	res.end(data)
        } else if(res.method === 'POST'){
        	req.on('data', (req, res) => {
             // do something
            })
        }
    }
}

Express๋กœ ๋ผ์šฐํŒ…์„ ๊ตฌํ˜„

const express - require('express');
const router = express.Router()

router.get('/lower', (req, res) => {
	res.send(data);
})

router.post('/lower', (req, res) => {
	// do something
})


โค๏ธโ€๐Ÿ”ฅ Middleware

  • ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋Š” req ๊ฐ์ฒด, res ๊ฐ์ฒด ๊ทธ๋ฆฌ๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”์ฒญ-์‘๋‹ต ์ฃผ๊ธฐ ์ค‘์—์„œ ๊ทธ ๋‹ค์Œ์˜ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๊ฐ–๋Š” ํ•จ์ˆ˜์ด๋‹ค.
  • ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ req, res ๊ฐ์ฒด์— ๋Œ€ํ•ด ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ๋ณ€ํ˜•์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฏธ๋“ค์›จ์–ด ์Šคํƒ ๋‚ด ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ next๋ผ๋Š” ์ธ์ž๋กœ ๊ฐ–๋Š” ํ•จ์ˆ˜์ด๋‹ค.
  • next ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด๋กœ ํ˜„์žฌ ์š”์ฒญ์„ ๋„˜๊ธธ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.

๐Ÿค” ์ฃผ๋กœ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ
1. POST ์š”์ฒญ ๋“ฑ์— ํฌํ•จ๋œ body(payload)๋ฅผ ๊ตฌ์กฐํ™”ํ•  ๋•Œ(์‰ฝ๊ฒŒ ์–ป์–ด๋‚ด๊ณ ์ž ํ•  ๋•Œ)
2. ๋ชจ๋“  ์š”์ฒญ/์‘๋‹ต์— CORS ํ—ค๋”๋ฅผ ๋ถ™์—ฌ์•ผ ํ•  ๋•Œ
3. ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด url์ด๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ™•์ธํ•  ๋•Œ
4. ์š”์ฒญ ํ—ค๋”์— ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š”์ง€ ํ™•์ธํ•  ๋•Œ

0๊ฐœ์˜ ๋Œ“๊ธ€