์ฒซ๋ฒ์งธ ๊ธฐ๋ณธ์ ์ธ ์น ์ฌ์ดํธ๋ฅผ ๋ง๋๋๋ฐ, ์ ์ ์ค์ ์ ์ด๋ ๋ค.
์ง์ญ ์๋ฆฌ ํ๊ต Confetti Cuisine์์ ์์ ๋ค์ด ์ ๊ณตํ๋ ์ฝ์ค์ ๋ ์ํผ ๊ทธ๋ฆฌ๊ณ ์๋น ํ์๋ค์ด ๋ฑ๋กํ ์ ์๋ ๊ณต๊ฐ์ด ์๋ ๋๋ฉ ํ์ด์ง๋ฅผ ๊ฐ๊ณ ์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํด์ค ๊ฒ์ ์๋ขฐํ ์ค์ .
์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ package.json์ ์ด๊ธฐํ
- ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ ์ ์
- main.js์ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง ๋ง๋ค๊ธฐ
- view (html) ์์ฑ -> Index, Course, Contact, Thanks, Error
- ์์ ์ ์ถ๊ฐ
- ์ ํ๋ฆฌ์ผ์ด์ ๋ผ์ฐํธ ๊ตฌ์ฑ
- ์ ํ๋ฆฌ์ผ์ด์ ์๋ฌ ์ฒ๋ฆฌ
- ์ ํ๋ฆฌ์ผ์ด์ ์คํ
1. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐํ
์ฐ์ npm์ ์ฌ์ฉํด package.json ํ์ผ์ ์ด๊ธฐํ ํ๋ค.
๊ทธ๋ฆฌ๊ณ npm install http-status-codes --save ๋ช ๋ น์ด๋ก ์ข ์ ํจํค์ง๋ฅผ ์ค์นํ๋ค.
์์์ ํด๋ดค๋ ๋ด์ฉ์ด๋ผ ์๋ต.
2. ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ
ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ค์๋ค.
views ์์ ์๋ html ํ์ผ๋ก ์๋ฒ๊ฐ ์๋ตํ๊ณ , ์ด ํ์ผ๋ค์ ์ง์ํ๋ ์์ ์ public ํด๋ ๋ฐ์ ์๋ค.
3. router.js ๋ฐ main.js ํ์ผ์ ์์ฑ
๋จผ์ main.js์ 1ํ๋ถํฐ 6ํ๊น์ง๋ง ์ดํด๋ณด๋ฉด ์ด๋ ๊ฒ ํฌํธ ๋ฒํธ 3000์ ์ง์ ํ๊ณ , http, http-status-codes ๋ชจ๋์ ํ ๋นํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ์ router, content-types, utils ๋ชจ๋๋ ํ ๋นํ๋ค.
์ฌ๊ธฐ์ content-types ๋ utils ํ์ผ์
์ด๋ ๊ฒ ์์ฑํ์๋ค. ์ด ๋๊ฐ์ง ๋ชจ๋์ main.js ๋ด์ ์๋ ๋ณ์๋ค์ ๊ตฌ์กฐํ๋ฅผ ์ํ ๊ฒ์ด๋ค.
content-types.js ์์๋ ์ฝํ ์ธ ํ์ ๋งคํ ๊ฐ์ฒด๋ฅผ ์ต์คํฌํธ ํ์ฌ ํ์ผ ํ์ ์ ๋งคํํ๊ณ ,
utils.js์์๋ ์ ๊ณต๋ ์์น์ ํ์ผ์ ์ฐพ์ ๋ฐํํ๊ณ , ์ฐพ๋ ํ์ผ์ด ์์ผ๋ฉด ์๋ฌ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ router.js ํ์ผ์ ์ด๋ ๊ฒ ์ ์๋๋ค.
์ด ํ์ผ์ http-status-codes์ ์์์ ์ ์ํ content-types, utils๊ฐ ํ์ํ๋ค.
๋จผ์ 5ํ์ ๋ณด๋ฉด routes ๊ฐ์ฒด๋ฅผ ์ ์ํ๋ค.
routes ๊ฐ์ฒด๋ ํค-๊ฐ ์์ผ๋ก get ํจ์๋ฅผ ํตํ GET ์์ฒญ, post ํจ์๋ฅผ ํตํ POST ์์ฒญ์ ๋งคํํ๋ค.
๊ทธ๋ฆฌ๊ณ 10ํ์ handle ํจ์๋ main.js์์ createServer์ ์ฝ๋ฐฑ ํจ์๋ก ๊ฐ์ฃผ๋๋ค.
19ํ๊ณผ 23ํ์ get๊ณผ post ํจ์๋ ์ฝ๋ฐฑ ํจ์์ URL์ ์ทจํ๋ฉฐ routes ๊ฐ์ฒด์์ ์๋ก ๋งคํํ๋ค.
handle ํจ์์์ try-catch ๊ตฌ๋ฌธ ์์ ์๊ณ ๋ฆฌ์ฆ์ ๋ผ์ฐํธ๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๋ฉด utils ๋ชจ๋ ๋ด ์ฌ์ฉ์ ์ ์ ํจ์ getFile ํจ์๋ฅผ ์ฌ์ฉํด ์๋ฌ ๋ฉ์์ง๋ฅผ ํ์ํ๋ค.
4. ๋ทฐ ํ์ด์ง ์์ฑ
๋๋
https://startbootstrap.com/themes
Free Bootstrap Themes & Templates - Start Bootstrap
Landing Page A clean, functional landing page theme
startbootstrap.com
์ฌ๊ธฐ์์ ๋ฌด๋ฃ ๋ถํธ์คํธ๋ฉ ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ๋ทฐํ์ด์ง๋ฅผ ์์ฑํ์๋ค.
์ฌ๊ธฐ์ ํ ํ๋ฆฟ์ ๋ค์ด๋ฐ๊ณ ํด๋น css, js, images ํ์ผ๋ค์ ๊ฐ์ ธ์์ ์ฐ๋ฉด ๋๋ค.
์ด๊ฑฐ๋ ํ๊ต๋ค๋๋ ์น ๊ฐ๋ฐํ๋ฉด์ ๋ง์ด ํ๋๊ฑฐ๋ผ ํจ์ค.
๊ทผ๋ฐ ์ ์ฉํ๋ ๋ฐฉ์์ด ๋ญ๊ฐ ์ข ๋ฌ๋ผ์ ํค๋งธ์๋๋ฐ ๊ทธ๊ฑด ๋์ค์ ๊ทธ ๋ถ๋ถ ๋์ค๋ฉด ์ ๊ฒ ์.
5. ๋ผ์ฐํธ ์์ฑ
๋ผ์ฐํธ๋ค์ ํธ๋ค๋งํ๊ธฐ ์ํด router.js ํ์ผ์ ์ด๋ฏธ ๋ง๋ค์๋ค. ์ด์ ์ด๊ฑธ ๋ฑ๋ก์ ํด์ผํ๋ค.
๋ฑ๋ก์ด๋ผ๋ ๋ง์ ์๋ฏธ๋ url ๋ฐ http ๋ฉ์๋๋ค์ ๋ฐ๋ผ router.get, router.post ํจ์๋ก ๋ณด๋ธ๋ค๋ ์๋ฏธ์ด๋ค.
๋ผ์ฐํธ ๋ฑ๋ก์ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ์์ฒญ์ด GET์ธ๊ฐ POST ์ธ๊ฐ
- URL ๋ผ์ฐํธ
- ๋๋ ค์ค ํ์ผ ์ด๋ฆ
- HTTP ์ํ ์ฝ๋
- ๋๋ ค์ค ํ์ผ ํ์ (Content Type)
๊ฐ ์ฝ๋ฐฑ ํจ์์์ ์๋ต์ ๋ณด๋ผ ์ฝํ ์ธ ํ์ ์ ์ง์ ํด์ผ ํ๋ฉฐ, fs ๋ชจ๋์ ์ฌ์ฉํด ๋ทฐ ํ์ด์ง์ ์์ ์ ์๋ต ์ฝํ ์ธ ๋ก ์ฝ์ด๋ค์ฌ์ผ ํ๋ค.
์ด๋ ๊ฒ ๋ฑ๋ก, ์ ์ํ๋ค.
์ฌ๊ธฐ์๋ ํ๋ก์ ํธ์์ ํ์ผ๋ก ๋ณด์ผ ์์ (์ด๋ฏธ์ง, js, css ํ์ผ)์ ๋ํ ๋ผ์ฐํธ๋ง ๋ง๋ ๋ค.
์ด๋ถ๋ถ์ด ์ค์ํ๋ค....
์์์ ์ข ํค๋งธ๋ค๊ณ ํ๊ฒ ์ฌ๊ธฐ ๋๋ฌธ์ด์๋ค.
index.html ํ์ผ์ ๋ณด๋ฉด
์ด๋ ๊ฒ favicon์ด๋ ์คํ์ผ์ํธ๋ฅผ ์ ์ฉ์ํค ์ํด ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํ๋ ๋ถ๋ถ์ด ์๋ค.
์ฌ๊ธฐ์ ๋๋ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๋ณด๊ณ ๊ทธ๋๋ก ์๋๊ฒฝ๋ก๋ก
๊ทธ๋๊น ์ฌ๊ธฐ์ ์ด html ํ์ผ์ views ํด๋์ ์์ผ๋๊น ../๋ก ์์ํด๋๋ก ์ฎ๊ฒจ๊ฐ์
../public/images/favicon.ico ์ฒ๋ผ ์ ๋ ฅํ์๋๋ฐ, ์คํ์ํค๋ฉด ์๊พธ cssํ์ผ์ด ์ ์ฉ๋์ง ์์์๋ค.
๊ทผ๋ฐ ์๊ณ ๋ณด๋ ์ด๊ฒ ์ด์ ์ main.js ํ์ผ์์ router.get์ผ๋ก ๊ฒฝ๋ก๋ฅผ ๋ฑ๋กํด์ค์ผ ํ๋ ๊ฒ์ด๋ค!
๊ทธ๋์ ์ ์์ main.js ์ฝ๋๋ฅผ ๋ค์ ๋ณด๋ฉด
router.get("/styles.css", (req, res) => {
res.writeHead(httpStatus.OK, contentTypes.css);
utils.getFile("public/css/styles.css", res);
});
์ด๋ ๊ฒ "/styles.css"๋ก ๊ฒฝ๋ก๋ฅผ ๋ฑ๋กํด์ฃผ๊ณ , utils์์ ํ์ผ์ ์์์ ์ฐพ์์ฃผ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ฒ ํด์ ์คํ์ผ์ด ๋ค ์ ์ฉ๋๊ณ ์๋ฒ์
์ด๋ ๊ฒ ์ ๋ฌ๋ค ^____^
'โ๏ธ 21-2 IPP > Node.js study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Node.js - 11 ๋ทฐ์ ํ ํ๋ฆฟ, ๋ ์ด์์ (0) | 2021.10.25 |
---|---|
Node.js - 10 Express.js (0) | 2021.10.21 |
Node.js - 8 ์์ , ๋ผ์ฐํธ exports (0) | 2021.10.15 |
Node.js - 7 ๋ผ์ฐํธ(2) (0) | 2021.10.15 |
Node.js - 6 ๋ผ์ฐํธ(1) (0) | 2021.10.15 |
๋๊ธ