๐ Express ๊ธฐ์ด
ํ๋ ์์ํฌ vs ๋ผ์ด๋ธ๋ฌ๋ฆฌ
ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ชจ๋ ๋จ์ ์ฝ๋๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๋ ๊ฒ์ด์ง๋ง, ์ ์ด๊ถ์ ์์น๊ฐ ๋ค๋ฅด๋ค.
- ํ๋ ์์ํฌ
- ํ๋ ์์ํฌ๊ฐ ํธ์ถ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋ด๊ฐ ํธ์ถ
- ๋ด๊ฐ ํธ์ถ
์ด๋ฐ์์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ด๊ฐ ํ์ํ ๋ ํธ์ถํ๊ณ , ํ๋ ์์ํฌ๋ ๋ด ์ฝ๋๋ฅผ ๋์ ํธ์ถํ๋ ํ์์ด๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ณต๊ตฌ์ธํธ, ํ๋ ์์ํฌ๋ ์กฐ๋ฆฝ์ ๊ฐ๊ตฌ ํคํธ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
ํ๋ ์์ํฌ์ ์ฅ์
ํ๋ ์์ํฌ์ ์ธ์ฆ, ๋ผ์ฐํ , ์๋ฌ ์ฒ๋ฆฌ ๋ฑ ์ด๋ฏธ ๊ฒ์ฆ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๋ฉด ๊ฐ๋ฐ ์๋๊ฐ ๋นจ๋ผ์ง๊ณ ๋ฒ๊ทธ๋ ์ค์ด๋ ๋ค.
๋ํ ํ๋ ์์ํฌ๋ ์ ํด์ง ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๊ธฐ์ ํ์๋ค์ด ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ณ , ์ ์ง๋ณด์๊ฐ ํธํ๋ค.
Express
Express๋ Node.js์์์ ๋์ํ๋ ์น ํ๋ ์์ํฌ๋ค.
Node.js๋ง์ผ๋ก๋ ์๋ฒ๋ ๋ง๋ค ์ ์์ง๋ง ๊ทธ๋ ๊ฒ๋๋ฉด ๋ผ์ฐํ , ๋ฏธ๋ค์จ์ด๋ฑ์ ์ง์ ๊ตฌํํ๊ณ ๊ทธ์๋ฐ๋ฅธ ๊ฐ๋ฐ ์๊ฐ๋ ๋์ด๋๊ณ ์ ์ง๋ณด์๋ ํ๋ค์ด์ง๋ฉฐ ์ฌ๋ฌ๊ฐ์ง๋ก ์ข์ง์๋ค.
ํ์ง๋ง Express๋ฅผ ์ฌ์ฉํ๋ฉด ๋ผ์ฐํ , ๋ฏธ๋ค์จ์ด, ์์ฒญ, ์๋ต ์ฒ๋ฆฌ๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์๊ฒ ๋๋ค. ๊ทธ์๋ฐ๋ฅธ ๊ฐ๋ฐ ์๋์ ์ ์ง๋ณด์ ์ธก์์๋ ์ด์ ์ด ์๋ค.
์์ฒญ๋ฐ์ดํฐ
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
์ด 3๊ฐ์ง์ ์ฐจ์ด๋ ๋ฐ์ดํฐ๊ฐ ์ด๋์ ๋ถ์ด ์๋๋์ ์ฐจ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
Query String
URL ๋ค์ ?key=value ํํ๋ก ๋ถ๋ ๋ฐ์ดํฐ์ด๋ค. ์ฃผ๋ก ๊ฒ์์ด, ํํฐ, ์ ๋ ฌ ์กฐ๊ฑด์ฒ๋ผ ๊ฒฐ๊ณผ๋ฅผ ์ขํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค.
/search?q=apple // apple์ด๋ผ๋ ํค์๋๋ก ๊ฒ์ํด์ค
// ์๋ฒ์์ ๋ฐ๋ ๋ฐฉ๋ฒ (Express)
req.query.q
URL Parameter
URL Parameter๋ ๊ฒฝ๋ก ์์ ํฌํจ๋ ๊ฐ์ด๋ค. ๋ณดํต :id ์ฒ๋ผ ํ๋์ ๋ฆฌ์์ค (ํน์ ๋์)์ ์ง์ (์กฐํ)ํ๊ฑฐ๋ ํน์ ๋จ์ด ์์ ์ด๋ ์ญ์ ๋ฑ์ ์ฌ์ฉํ๋ค.
/tweets/3 // 3๋ฒ ํธ์ ๊ฐ์ ธ์์ค
// ์๋ฒ์์ ๋ฐ๋ ๋ฐฉ๋ฒ (Express)
req.params.id // param๋ค์ s ๊ผญ ๋ถ์ฌ์ผํจ!
Body
Body๋ ์์ฒญ ๋ณธ๋ฌธ์ ๋ด๊ธฐ๋ ๋ฐ์ดํฐ๋ก, ์ฃผ๋ก JSON ํํ๋ก ์ ๋ฌ๋๋ค.
์ฌ๊ธฐ์ JSON์ด๋ JavaScript Object Notation์ ์ฝ์์ด๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๊ตํํ๊ณ ์ ์ฅํ๊ธฐ ์ํ ํ ์คํธ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ๊ตํ ํ์ค์ด๋ค.
์ฃผ๋ก ํ์๊ฐ์ , ๋ก๊ทธ์ธ, ๊ธ ์์ฑ, ๋ฐ์ดํฐ ์์ ๋ฑ์ ์์ฑ์ด๋ ์์ ๋ฐ์ดํฐ์ ์ฌ์ฉ๋๋ค.
{
"name": "node"
// name ๊ฐ์ node๋ก ์ ์ฅ
}
// ์๋ฒ์์ ๋ฐ๋ ๋ฐฉ๋ฒ (Express)
req.body.name
์๋ต ๋ฉ์๋
Express์์ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ ๋ณด๋ด๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ๋ค์ด๋ค.
- res.send()
- ๋ฌธ์์ด/HTML ์ ์ก
- res.send(โHiโ)
- res.json()
- JSON(API) ์ ์ก
- res.json({data:twt})
- res.sendFile()
- ํ์ผ ์ ์ก
- res.sendFile(โfile.pdfโ)
- res.redirect()
- ๋ค๋ฅธ URL๋ก ์ด๋ ์ง์
- res.redirect(โ/loginโ)
- ๋ก๊ทธ์ธ ์ํ ์ฌ์ฉ์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ณด๋ผ ๋ ๋ฑ์ ์ฌ์ฉ
- res.status()
- ์์ฒญ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ HTTP ์ํ ์ฝ๋๋ก ๋ช ํํ๊ฒ ์ ๋ฌํ ๋ ์ฌ์ฉ
- res.status(404).json({ message: โNot Foundโ })
- ์์ฒญํ ๋ฐ์ดํฐ๊ฐ ์์๋ค
- ์๋ฒ๊ฐ ๊ณต์์ ์ฌ์ค์ ์๋ ค์ฃผ๋ ๊ฒ
HTTP ์ํ ์ฝ๋
์์ res.status()์์ ๋์จ HTTP ์ํ ์ฝ๋์ ๋ํด ์ ์ด๋ณธ๋ค.
HTTP ์ํ ์ฝ๋๋ 3๊ฐ์ง ์ซ์๋ก, ์ฒซ ๋ฒ์งธ ์ซ์๊ฐ ์๋ฏธ๋ฅผ ๋ํ๋ธ๋ค.
2๋ ์ฑ๊ณต, 4๋ ํด๋ผ์ด์ธํธ ์ค๋ฅ(์์ฒญ์๋ชป), 5๋ ์๋ฒ ์ค๋ฅ๋ค.
- ์์ฃผ ์ฐ๋ ์ํ์ฝ๋
- 200 : ์ฑ๊ณต
- 201 : ์์ฑ ์ฑ๊ณต
- 400 : ์๋ชป๋ ์์ฒญ
- 401 : ์ธ์ฆ ํ์
- 403 : ๊ถํ ์์
- 404 : ๋ฐ์ดํฐ ์์
- 500 : ์๋ฒ ์ค๋ฅ