express static, ์ •์ ํŒŒ์ผ ์ „๋‹ฌํ•˜๊ธฐ
ยท
๐Ÿงฑ Framework/Node.js
์ •์  ํŒŒ์ผ์ด๋ž€? ๋ณ€ํ™”ํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ. image, css, jsํŒŒ์ผ ๋“ฑ์„ ์˜๋ฏธํ•œ๋‹ค. express์—์„œ๋Š” ์ •์  ํŒŒ์ผ์„ ์‰ฝ๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. express.static() express.static ๋ฏธ๋“ค์›จ์–ด์— ํฌํ•จ์‹œํ‚ค๋ฉฐ ์ „๋‹ฌํ•˜๋ฉด, ํŒŒ์ผ์˜ ์ง์ ‘์ ์ธ ์ œ๊ณต์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. app.use(expres.static('public')); ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์†Œ๋กœ public ๋””๋ ‰ํ† ๋ฆฌ์— ํฌํ•จ๋œ ํŒŒ์ผ์„ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค. http://localhost:3000/images/kitten.jpg http://localhost:3000/css/style.css http://localhost:3000/js/app.js http://localhost:3000/images/bg.png http..
Kakao Login API error_code(KOE010)
ยท
๐Ÿงฑ Framework/Node.js
์นด์นด์˜ค ๋กœ๊ทธ์ธ api ๊ตฌํ˜„์‹œ, access_token์ด 'KOE010'์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋„˜์–ด์˜ค์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋Š” Client Serect์„ ํ™œ์„ฑํ™” ํ–ˆ์ง€๋งŒ, ์ „๋‹ฌ ์ธ์ž๋กœ ๋„˜๊ฒจ ์ฃผ์ง€ ์•Š์•˜์„๋•Œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜๋‹ค. ๋”ฐ๋ผ์„œ ํ™œ์„ฑํ™”๋ฅผ ๋„๊ฑฐ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์ด client_id ๋’ค์— ๋ถ™์—ฌ์ฃผ๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค! const baseUrl = "https://kauth.kakao.com/oauth/token"; const config = { grant_type: "authorization_code", client_id: process.env.KAKAO_REST_KEY, client_secret: process.env.KAKAO_SECRET_KEY, .//์—ฌ๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์„ ๋ฟ์ด๋‹ค redirect_uri: "http://localhost:..
[nodeJS] ๊นƒํ—ˆ๋ธŒ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ํ•˜๊ธฐ
ยท
๐Ÿงฑ Framework/Node.js
OAuto2.0์„ ์ด์šฉํ•œ ์†Œ์…œ ๋กœ๊ทธ์ธ์˜ ๊ณผ์ •์€ ๋Œ€๋ถ€๋ถ„ ์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค๊ณ ํ•œ๋‹ค. express์„œ๋ฒ„์™€ node.js๋ฅผ ์ด์šฉํ•ด git ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์–ป์–ด๋‚ด๋ณด์ž! 1. ๊นƒํ—ˆ๋ธŒ์— ๋กœ๊ทธ์ธ ์š”์ฒญํ•˜๊ธฐ 1.1 client_id ์ƒ์„ฑํ•˜๊ธฐ ๊นƒํ—ˆ๋ธŒ ํ™ˆํŽ˜์ด์ง€ -> settings -> Developer settings -> OAuth apps ์•ฑ ์„ฑ์„ฑ์„ ํ•˜๋ฉด ์ž๋™์ ์œผ๋กœ client_id๊ฐ€ ๋ถ€์—ฌ๋œ๋‹ค. client secrets๋Š” ๋‚˜์ค‘์— ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ๋ฐœํ–‰ ํ›„ ์ž˜ ์ €์žฅํ•ด ๋‘์ž. 1.2 ์‚ฌ์šฉ์ž์˜ ๊นƒํ—ˆ๋ธŒ ์•„์ด๋”” ์š”์ฒญํ•˜๊ธฐ https://github.com/login/oauth/authorize + ํด๋ผ์ด์–ธํŠธ ์•„์ด๋”” ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค https://github.com/login/oauth/authorize?client_id=8..
์ฟ ํ‚ค์™€ ์„ธ์…˜์ด๋ž€? ๋ชจ๋“  ์ฟ ํ‚ค ํ—ˆ์šฉ์˜ ์‹ค์ฒด
ยท
๐Ÿงฑ Framework/Node.js
1. ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ์–ตํ•˜๋Š”๋ฒ• 1.1 ์ฟ ํ‚ค ์„œ๋ฒ„๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ์–ตํ• ๊นŒ? ์œ ์ €์—๊ฒŒ ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์„œ๋ฒ„๋Š” ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ž˜ ๊ฐ„์ˆ˜ํ•˜๋ผ๋ฉฐ ์ฟ ํ‚ค๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์œ ์ €๋Š” ์„œ๋ฒ„์— ์–ด๋–ค ์š”์ฒญ์„ ํ• ๋•Œ๋งˆ๋‹ค ์ฟ ํ‚ค๋ฅผ ๊ฐ™์ด ๋ณด์—ฌ์ฃผ๋ฉฐ ๋‚˜๋ผ๋Š”๊ฒƒ์„ ์ธ์ฆํ•œ๋‹ค. ์‚ฌ์ดํŠธ์— ์ ‘์†ํ–ˆ์„ ๋•Œ 'accept all cookies'๋‚˜ '๋ชจ๋“  ์ฟ ํ‚ค ํ—ˆ์šฉ' ์— ์ˆ˜๋ฝ์„ ํ•œ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋ฐฉ๋ฌธ์ž์™€ ์›น์‚ฌ์ดํŠธ์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•จ์ด๋ฉฐ, ์ด๋ฅผ ํ†ต๊ณ„๋กœ ํ™œ์šฉํ•ด ํšจ์œจ์ ์ธ ์›น์‚ฌ์ดํŠธ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค ์ฟ ํ‚ค ์ˆ˜์ง‘์— ๋™์˜ํ•˜๋ฉด์„œ, ํ•ด๋‹น ์ •๋ณด๊ฐ€ ๊ด‘๊ณ  ์šฉ๋„๋กœ ์ œ๊ณต ๋˜๊ธฐ๋„ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์šฐ๋ฆฌ ์ฃผ๋ณ€์— ๋งž์ถคํ˜• ๊ด‘๊ณ ๊ฐ€ ๋ˆˆ์— ๋„๋Š” ์ด์œ ๋‹ค. ์‚ฌ์‹ค ๋”ฐ๋กœ ์ฟ ํ‚คํ—ˆ์šฉ์„ ํ•˜์ง€ ์•Š์•„๋„ ์•ฝ๊ด€ ์„ธ๋ถ€์‚ฌํ•ญ์—” ๊ด€๋ จ ๋‚ด์šฉ์ด ํฌํ•จ ๋˜์–ด ์•Œ๊ฒŒ ๋ชจ๋ฅด๊ฒŒ ํ—ˆ์šฉ์„ ๋™์˜ ํ•œ๋‹ค. ๋‚˜์˜ ํ‹ฐ์Šคํ† ๋ฆฌ ์ฟ ํ‚ค๋“ค์ด๋‹ค..
bcrypt๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑํ•˜๊ธฐ
ยท
๐Ÿงฑ Framework/Node.js
1. bcrypt bcrypt๋Š” ํ•œ๋ฒˆ ํ•ด์‹ฑํ•˜๋ฉด ๋˜๋Œ๋ฆด ์ˆ˜ ์—†๋Š” ๋‹จ๋ฐฉํ–ฅ ํ•ด์‹ฑ์ด๋‹ค. ์•”ํ˜ธํ™” ๊ธฐ๋ฒ•์ธ salt์™€ ํ‚ค ์ŠคํŠธ๋ ˆ์นญ์„ ํ†ตํ•ด ๊ธฐ์กด ๋ณด์•ˆ ๋ฐฉ์‹๋ณด๋‹ค ์•ˆ์ „ํ•˜๋‹ค. 1.1 salt? ๋น„๋ฐ€๋ฒˆํ˜ธ์— ์ถ”๊ฐ€ ๋ฌธ์ž์—ด์„ ๋ถ™์—ฌ ์•”ํ˜ธํ™” ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋ณด์•ˆ์„ฑ์ด ๋†’์•„์ง„๋‹ค. salt์ •๋ณด๋Š” ๋งค์šฐ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ๋ณด๊ด€ํ•ด์•ผ ํ•œ๋‹ค. 1.2 ํ‚ค ์ŠคํŠธ๋ ˆ์นญ? ํ‚ค๋ฅผ ๋Š˜๋ฆฐ๋‹ค๋Š”๊ฑด ๊ธธ์ด๋ฅผ ๋Š˜๋ฆฌ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•ด ์ถœ๋ ฅ ๊ฐ’์ด ์•„์ฃผ ๋А๋ฆฌ๊ฒŒ ์‚ฐ์ถœ๋˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ํ•ดํ‚น์„ ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„๊ณผ ๋น„์šฉ์ด ์ฆ๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณตํš ์ˆ˜๋ฅผ ๋Š˜๋ฆด์ˆ˜๋ก ๋ณด์•ˆ์ด ๊ฐ•ํ™”๋œ๋‹ค. 2. bcrypt๋ฅผ ํ†ตํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ, ๋น„๊ต ์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. bcrypt.hash(myPlaintextPassword, saltRounds) ์‚ฌ..
[nodeJS] res. render์™€ redirect ์ฐจ์ด
ยท
๐Ÿงฑ Framework/Node.js
render์™€ redirect์˜ ์ฐจ์ด๊ฐ€ ๊ถ๊ธˆํ•ด์„œ ๊ตฌ๊ธ€๋งํ•ด๋ดค์ง€๋งŒ ์ „๋ถ€ django์— ๋Œ€ํ•œ render redirect๋งŒ ๋ณด์˜€๋‹ค... ์–ด์ฉŒ๋ฉด ๋„ˆ๋ฌด ์‰ฌ์šด๊ฑฐ๋ผ ๋‚˜๋นผ๊ณ  ๋‹ค ์•Œ๊ณ  ์žˆ๋˜๊ฑฐ์ผ์ˆ˜๋„...? ์•”ํŠผ ๊ทธ๋ž˜์„œ express ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด ํ˜ผ์ž ๋ถ„์„ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ฐจ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 1. ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ฐจ์ด 1.1 res.redirect([status,] path) redirect๋Š” ๊ฒฝ๋กœ์™€ ํ•จ๊ป˜ ์ƒํƒœ๋ฅผ ๊ฐ™์ด ๋ณด๋‚ธ๋‹ค. ์—ฌ๊ธฐ์„œ ์ƒํƒœ๋Š” http ์ƒํƒœ์ฝ”๋“œ์— ํ•ด๋‹นํ•˜๋Š” ์–‘์˜ ์ •์ˆ˜๋‹ค. ์ƒํƒœ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ƒํƒœ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ found๋ผ๋Š” ๋œป์„๊ฐ€์ง„ 302๋กœ ์„ค์ •๋œ๋‹ค. ์ƒํƒœ์ฝ”๋“œ๋ณ„๋กœ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ ์‚ฌ์ดํŠธ์— ์ „๋ถ€ ์ •๋ฆฌ ๋˜์–ด์žˆ๋‹ค. click! ์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. res.redirect(302, "myHome"); 1.2 res..
mongoose?
ยท
๐Ÿงฑ Framework/Node.js
1. mongoose๋ž€? mongoose๋Š” mongoDB์™€ nodeJS๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ๋‹ค๋ฆฌ์ด๋‹ค. 2. ๋ชฝ๊ตฌ์Šค ์„ค์น˜ ๋ฐ ์—ฐ๋™ 2.1. mongoose ์„ค์น˜ ํ„ฐ๋ฏธ๋„์— ๋‹ค์Œ์„ ์ž…๋ ฅํ•ด ์ค€๋‹ค. $ npm i mongoose 2.2 node.js์™€ ์—ฐ๋™ํ•˜๊ธฐ mongo ๋ช…๋ น์–ด ์ž…๋ ฅ ํ›„ db url์„ ํ™•์ธํ•œ๋‹ค. db.jsํŒŒ์ผ์„ ์ƒ์„ฑํ•œ ๋’ค, ๋‹ค์Œ url์„ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค //db.js import mongoose from "mongoose"; //mongo๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์–ป์€ url ์—ฐ๊ฒฐ mongoose.connect("mongodb://127.0.0.1:27017"); const handleOpen = () => { console.log("DB Connectedโญ"); } const handleError = () => { c..
์œˆ๋„์šฐ์—์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ mongoDB ์„ค์น˜ํ•˜๊ธฐ
ยท
๐Ÿงฑ Framework/Node.js
1. wsl ํ„ฐ๋ฏธ๋„ ์—ด๊ธฐ 2. ์„ค์น˜ ๊ฐ€๋Šฅํ•œ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ $ sudo apt update 3. mongodb ์„ค์น˜ $ sudo apt-get install mongodb 4. ์„ค์น˜ ํ™•์ธํ•˜๊ธฐ $ mongod --version 5. ์ ‘์†ํ•˜๊ธฐ mongodb์— ์ ‘์†ํ•˜๊ธฐ ์ „์—๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ ํ›„ ์ ‘์†ํ•ด์•ผํ•œ๋‹ค. $ sudo service mongodb start ์ด์ œ mongo๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด DB์— ์ ‘์†ํ›„ show dbs๋ฅผ ์ž…๋ ฅํ•ด๋ณด์ž. $ mongo show dbs ์ด์šฉํ•  ์ค€๋น„๊ฐ€ ๋๋‹ค๋Š” ๊ฒƒ์ด๋‹ค!! ctrl + c๋ฅผ ํ†ตํ•ด DB๋ฐ–์œผ๋กœ ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๋‚˜๊ฐ„ ๋’ค์—๋Š” ์ •์ƒ์ ์œผ๋กœ mongo๋ฅผ ์ข…๋ฃŒํ•ด์ฃผ์ž. ์ฐธ๊ณ ๋กœ ์ข…๋ฃŒ, ์ƒํƒœ ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. $ sudo service mongodb stop $ sud..
express์—์„œ html์ ‘๊ทผ, ์ œ๋ชฉ๋ณ€๊ฒฝ
ยท
๐Ÿงฑ Framework/Node.js
๐ŸŒณ๋ฐฉ๋ฒ• First Video์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ณ ์‹ถ๋‹ค๋ฉด html์— ์ ‘๊ทผํ•ด์•ผํ•˜๋Š”๋ฐ express๋ฅผ ์ด์šฉํ• ๋•Œ๋Š” html์˜ form์„ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ• ์ˆ˜์žˆ๋Š” js object ํ˜•์‹์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋ฉ”์ธjsํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ(๋ฏธ๋“ค์›จ์–ด)๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. app.use(express.urlencoded({ extended: true })); router๋กœ ์—ฐ๊ฒฐ๋˜๊ธฐ ์ „์— ์„ ์–ธํ•ด์ฃผ์–ด์•ผ ์ฃผ์†Œ์— ์ ‘๊ทผํ•˜๊ธฐ ์ „์— ์ ์šฉ๋œ๋‹ค. ๐ŸŒณ์ œ๋ชฉ๋ณ€๊ฒฝ ์ฝ”๋“œ extends partials/base.pug block content h4 Change Title of video form(method = "POST") input(name = "title", placeholder = "Video Title", value = video.t..