Skip to content

beduty/wetube

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

7 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

WeTube

cloning Youtube with VanillaJS and NodeJS

  1. npm init์œผ๋กœ package.json ์„ค์ • ์ดˆ๊ธฐํ™”

  2. npm install express๋กœ ์„œ๋ฒ„์œ„ํ•œ Express ๋ชจ๋“ˆ ์ถ”๊ฐ€. (dependency)

  3. package.json์˜ Scriptํ•ญ๋ชฉ์œผ๋กœ ๋‹จ์ถ• ๋ช…๋ น์–ด ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋‹ค. --> npm start๋กœ ์ž…๋ ฅํ•˜๋ฉด, node index.js๋กœ ์น˜ํ™˜๋˜์–ด ์‹คํ–‰๋œ๋‹ค. "scripts": { "start" : "node index.js" }

  4. app.listen(4000); ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ ‘์†ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

  5. app.get("/", handle )์œผ๋กœ ๋“ค์–ด์˜จ ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์‘๋‹ต์„ ํ•œ๋‹ค. function handleHome(req, res){ // req : ์„œ๋ฒ„์ž…์žฅ์—์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์–ด๋–ค ์ •๋ณด๋“ค์„ ๋ณด๋ƒˆ๋Š”์ง€ ํ™•์ธ๊ฐ€๋Šฅํ•œ๋‹ค. // res : ์–ด๋–ป๊ฒŒ ์‘๋‹ตํ•  ์ง€ ๋ช…์„ธํ•  ์ˆ˜ ์žˆ๋‹ค. res๋กœ .html๊ณผ .css๋ฅผ ๋ณด๋ƒ„์œผ๋กœ์จ ์ ‘์†ํ•œ ์ƒ๋Œ€์—๊ฒŒ ํ™”๋ฉด์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค. console.log(req); res.send("Hello from home"); } app.get("/", handleHome);

  6. npm install nodemon -D ๋กœ -D๋ฅผ ๋ถ™์—ฌ์คŒ์œผ๋กœ์จ ๊ฐœ๋ฐœํ•  ๋•Œ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

  7. babel๋ชจ๋“ˆ์€ JavaScript์˜ ์ตœ์‹  ํ‘œ์ค€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ๋„ ์•Œ์•„์„œ ๋ธŒ๋ผ์šฐ์ €๋ณ„ ๊ทœ๊ฒฉ์— ๋งž๊ฒŒ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ํŽธ๋ฆฌํ•จ์„ ์ œ๊ณตํ•œ๋‹ค.

  8. 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๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

  9. ์ถ”๊ฐ€ํ•œ ๋ฏธ๋“ค์›จ์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    1. morgan์€ ๋กœ๊น…์šฉ์œผ๋กœ ์‚ฌ์šฉ--> app.use(morgan("dev"));๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ฏธ๋“ค์›จ์–ด๋กœ ๋™์ž‘ํ•˜์—ฌ HTTP Method์ค‘๊ฐ„์— ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
    2. helmet์€ ๋ณด์•ˆ์šฉ์œผ๋กœ ์‚ฌ์šฉ.
    3. body-parser : ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ๋กœ ์ „๋‹ฌํ•˜๋Š” ์ •๋ณด๋“ค์„ ๊ฒ€์‚ฌํ•œ๋‹ค. form, json์œผ๋กœ ๋œ body๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ด์˜จ HTTP POST ๋ฐ์ดํ„ฐ์˜ body๋กœ ๋ถ€ํ„ฐ ์‰ฝ๊ฒŒ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. app.use(bodyParser.urlencoded({extended:true})); -> html๋กœ ๋ณด๋‚ธ ์ •๋ณด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค. app.use(bodyParser.json());-> json์œผ๋กœ ๋ณด๋‚ธ ์ •๋ณด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.
    4. cookie-parser : ์ฟ ํ‚ค ์ „๋‹ฌ ๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž ์ธ์ฆ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ •๋ณด๋ฅผ ๊ฐœ์ธ ์ปดํ“จํ„ฐ์— ์ €์žฅํ•œ๋‹ค. ์ฟ ํ‚ค์— ์œ ์ € ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  10. ES6์—์„œ๋Š” ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ๊ฐ„ ๋ณ€์ˆ˜๋“ฑ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. --> Export๋กœ ๋ณ€์ˆ˜๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ , Import๋กœ ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. --> export default "๋ณ€์ˆ˜"; ํ•ด์ฃผ๋ฉด, ์™ธ๋ถ€์—์„œ๋Š” import "๋ณ€์ˆ˜" from "./path"๋กœ ๋ฐ›์•„์˜จ๋‹ค. ํŒŒ์ผ ์ „์ฒด๋ฅผ Exportํ•ด์ค€๋‹ค. --> export ๋ณ€์ˆ˜ ํ•ด์ฃผ๋ฉด, ์™ธ๋ถ€์—์„œ๋Š” import {๋ณ€์ˆ˜} from "./path"๋กœ ๋ฐ›์•„์˜จ๋‹ค.

  11. ๋ผ์šฐํŒ…์€ url ์š”์ฒญ์— ๋”ฐ๋ผ์„œ App์ด ์‘๋‹ตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. --> export const userRouter = express.Router();๋กœ ์ •์˜ํ•˜์—ฌ app.js์—์„œ๋Š” userRouter๋ฅผ ๋ถ™์—ฌ์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค! --> app.use("/user", userRouter); //์œผ๋กœ userRouter๋Š” "http://localhost:4000/user" ์ดํ›„์˜ ๋ผ์šฐํŠธ์— ๋Œ€ํ•ด์„œ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. --> ์š”์ฒญ url์˜ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ์„œ .jsํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

  12. MVC(Model_Data, View_How does the data look, Controller_function that looks for the data) --> ๋กœ์ง ๋ถ€๋ถ„๋“ค์€ Controller์—์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  13. [ํ”„๋กœ๊ทธ๋žจ WrapUp]

    1. init.js๊ฐ€ ์‹œ์ž‘์ ์ด๋‹ค. ./app์—์„œ importํ•ด์˜จ App์„ ์‹œ์ž‘ํ•œ๋‹ค.(listen..)
    2. app์„ importํ•ด์˜ค๋Š” ์‹œ์ ์€ App์—์„œ express()๋ฅผ ๋ฐ›์•„์™€ ์‹คํ–‰์‹œํ‚ค๊ณ , use๋กœ ๋‹ค์–‘ํ•œ MiddleWare๋“ค(Logger, ์ฟ ํ‚คํŒŒ์„œ, BodyํŒŒ์„œ, ๋ณด์•ˆ(Helmet))์„ ๋ถˆ๋Ÿฌ์˜จ ๋‹ค์Œ, Route๋ฅผ ์ •์˜ํ•œ ์‹œ์  ์ดํ›„ ์ด๋‹ค!
    3. Router๋Š” URL ๊ทธ๋ฃน์„ ๋‚˜๋ˆ„๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋˜์–ด ๊ทธ๋ฃน๋‚ด์˜ Url๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค.
  14. Pug๋Š” MVC์—์„œ V(View)์— ํ•ด๋‹นํ•œ๋‹ค. View Engine์œผ๋กœ์„œ express๋กœ res.send๋Œ€์‹ ์— ์‹ค์ œ HTML์„ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

About

Cloning Youtube with VanillaJS and NodeJS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published