cloning Youtube with VanillaJS and NodeJS
-
npm init์ผ๋ก package.json ์ค์ ์ด๊ธฐํ
-
npm install express๋ก ์๋ฒ์ํ Express ๋ชจ๋ ์ถ๊ฐ. (dependency)
-
package.json์ Scriptํญ๋ชฉ์ผ๋ก ๋จ์ถ ๋ช ๋ น์ด ์์ ํ ์ ์๋ค. --> npm start๋ก ์ ๋ ฅํ๋ฉด, node index.js๋ก ์นํ๋์ด ์คํ๋๋ค. "scripts": { "start" : "node index.js" }
-
app.listen(4000); ์ผ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค.
-
app.get("/", handle )์ผ๋ก ๋ค์ด์จ ๋ธ๋ผ์ฐ์ ์๊ฒ ์๋ต์ ํ๋ค. function handleHome(req, res){ // req : ์๋ฒ์ ์ฅ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ค ์ ๋ณด๋ค์ ๋ณด๋๋์ง ํ์ธ๊ฐ๋ฅํ๋ค. // res : ์ด๋ป๊ฒ ์๋ตํ ์ง ๋ช ์ธํ ์ ์๋ค. res๋ก .html๊ณผ .css๋ฅผ ๋ณด๋์ผ๋ก์จ ์ ์ํ ์๋์๊ฒ ํ๋ฉด์ ๋ณด์ฌ์ค ์ ์๋ค. console.log(req); res.send("Hello from home"); } app.get("/", handleHome);
-
npm install nodemon -D ๋ก -D๋ฅผ ๋ถ์ฌ์ค์ผ๋ก์จ ๊ฐ๋ฐํ ๋๋ง ์ธ ์ ์๋ค.
-
babel๋ชจ๋์ JavaScript์ ์ต์ ํ์ค ํจ์๋ฅผ ์ฌ์ฉํ์ฌ๋ ์์์ ๋ธ๋ผ์ฐ์ ๋ณ ๊ท๊ฒฉ์ ๋ง๊ฒ ๋ณ๊ฒฝํด์ฃผ๋ ํธ๋ฆฌํจ์ ์ ๊ณตํ๋ค.
-
Express์ ๋ฏธ๋ค์จ์ด(MiddleWare)๋ HTTP์ Method ์คํ์ ์ ์ฒ๋ฆฌ ํจ์๋ก ์ฌ์ฉํ๋ค. --> app.get("/profile", middle, callback)์ผ๋ก callback ์คํํ ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ์ง์ ์ ์๋ค. --> ๋ฏธ๋ค์จ์ด๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋๋ค. const middle = (req, res, next)=>{} --> middle ํจ์ ๋ด๋ถ์์ ์ด๋ ํ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ฉด next();๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค. --> const middle = (req, res, next)=>{} ๋ก next์ ๋๋ค๋ฅธ MiddleWare ํจ์๋ฅผ ๋ฃ์ผ๋ฉด, ์ฝ๋ฐฑ์ฒด์ธ์ผ๋ก ์ธ ์ ์๋ค. --> app.use(middle)๋ก ๋ชจ๋ ์ฐ๊ฒฐ์ ๋ํด์ ์ค๊ฐ์ middleWare๋ฅผ ๋ฃ์ด์ค ์ ์๋ค.
-
์ถ๊ฐํ ๋ฏธ๋ค์จ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
- morgan์ ๋ก๊น ์ฉ์ผ๋ก ์ฌ์ฉ--> app.use(morgan("dev"));๋ก ์ฌ์ฉํ๋ฉด ๋ฏธ๋ค์จ์ด๋ก ๋์ํ์ฌ HTTP Method์ค๊ฐ์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๋ค.
- helmet์ ๋ณด์์ฉ์ผ๋ก ์ฌ์ฉ.
- body-parser : ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ๋ก ์ ๋ฌํ๋ ์ ๋ณด๋ค์ ๊ฒ์ฌํ๋ค. form, json์ผ๋ก ๋ body๋ฅผ ๊ฒ์ฌํ๋ค. ์ฌ์ฉ์๊ฐ ๋ณด๋ด์จ HTTP POST ๋ฐ์ดํฐ์ body๋ก ๋ถํฐ ์ฝ๊ฒ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค. app.use(bodyParser.urlencoded({extended:true})); -> html๋ก ๋ณด๋ธ ์ ๋ณด๋ฅผ ์ฝ์ ์ ์๋ค. app.use(bodyParser.json());-> json์ผ๋ก ๋ณด๋ธ ์ ๋ณด๋ฅผ ์ฝ์ ์ ์๋ค.
- cookie-parser : ์ฟ ํค ์ ๋ฌ ๋ฐ์ ์ฌ์ฉํ ์ ์๋ค. ์ฌ์ฉ์ ์ธ์ฆ๋ฑ์ ์ ๋ณด๋ฅผ ์ ๋ณด๋ฅผ ๊ฐ์ธ ์ปดํจํฐ์ ์ ์ฅํ๋ค. ์ฟ ํค์ ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅํ ์ ์๋ค.
-
ES6์์๋ ๋ชจ๋์ ์ฌ์ฉํ์ฌ ํ์ผ๊ฐ ๋ณ์๋ฑ์ ๊ณต์ ํ ์ ์๋ค. --> Export๋ก ๋ณ์๋ฅผ ๋ด๋ณด๋ด๊ณ , Import๋ก ๋ณ์๋ฅผ ๋ฐ์์ ์ฌ์ฉํ ์ ์๋ค. --> export default "๋ณ์"; ํด์ฃผ๋ฉด, ์ธ๋ถ์์๋ import "๋ณ์" from "./path"๋ก ๋ฐ์์จ๋ค. ํ์ผ ์ ์ฒด๋ฅผ Exportํด์ค๋ค. --> export ๋ณ์ ํด์ฃผ๋ฉด, ์ธ๋ถ์์๋ import {๋ณ์} from "./path"๋ก ๋ฐ์์จ๋ค.
-
๋ผ์ฐํ ์ url ์์ฒญ์ ๋ฐ๋ผ์ App์ด ์๋ตํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ๊ฒ์ ์๋ฏธํ๋ค. --> export const userRouter = express.Router();๋ก ์ ์ํ์ฌ app.js์์๋ userRouter๋ฅผ ๋ถ์ฌ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค! --> app.use("/user", userRouter); //์ผ๋ก userRouter๋ "http://localhost:4000/user" ์ดํ์ ๋ผ์ฐํธ์ ๋ํด์ ์ ์ํ ์ ์๋ค. --> ์์ฒญ url์ ์ฑ๊ฒฉ์ ๋ฐ๋ผ์ .jsํ์ผ์ ๋ถ๋ฆฌํ ์ ์๋ ์ฅ์ ์ด ์๋ค.
-
MVC(Model_Data, View_How does the data look, Controller_function that looks for the data) --> ๋ก์ง ๋ถ๋ถ๋ค์ Controller์์ ์ํํ๋ค.
-
[ํ๋ก๊ทธ๋จ WrapUp]
- init.js๊ฐ ์์์ ์ด๋ค. ./app์์ importํด์จ App์ ์์ํ๋ค.(listen..)
- app์ importํด์ค๋ ์์ ์ App์์ express()๋ฅผ ๋ฐ์์ ์คํ์ํค๊ณ , use๋ก ๋ค์ํ MiddleWare๋ค(Logger, ์ฟ ํคํ์, Bodyํ์, ๋ณด์(Helmet))์ ๋ถ๋ฌ์จ ๋ค์, Route๋ฅผ ์ ์ํ ์์ ์ดํ ์ด๋ค!
- Router๋ URL ๊ทธ๋ฃน์ ๋๋๋ ์ญํ ์ ํ๋ค. ๋ถ๊ธฐ์ฒ๋ฆฌ๋์ด ๊ทธ๋ฃน๋ด์ Url๊ด๋ฆฌ๋ฅผ ํ ์ ์๊ฒํ๋ค.
-
Pug๋ MVC์์ V(View)์ ํด๋นํ๋ค. View Engine์ผ๋ก์ express๋ก res.send๋์ ์ ์ค์ HTML์ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ค.