Dev.log/Node.js (39) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [Node.js ๊ต๊ณผ์] #39. ์น API ์๋ฒ ๋ง๋ค๊ธฐ - JWT ํ ํฐ์ผ๋ก ์ธ์ฆํ๊ธฐ JWT ํ ํฐ์ผ๋ก ์ธ์ฆํ๊ธฐ ๋ค์ API ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ ์ฅ์ด ๋์ด๋ณด์. NodeBird ์ฑ์ด ์๋ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ NodeBird์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ ์ ์๊ฒ ํด์ผ ํ๋ ๋งํผ ๋ณ๋์ ์ธ์ฆ ๊ณผ์ ์ด ํ์ํ๋ค. ์ด ์ฑ ์ JWT ํ ํฐ์ ์ฌ์ฉํ์ฌ ์ธ์ฆํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. JWT๋ JSON Web Token์ ์ฝ์ด๋ก, JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ํ ํฐ์ด๋ค. JWT๋ ๋ค์๊ณผ ๊ฐ์ด ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. JWT ํ ํฐ ๊ตฌ์ฑ์์ ํค๋(HEADER) : ํ ํฐ ์ข ๋ฅ์ ํด์ ์๊ณ ๋ฆฌ์ฆ ์ ๋ณด๊ฐ ๋ค์ด์๋ค. ํ์ด๋ก๋(PAYLOAD) : ํ ํฐ์ ๋ด์ฉ๋ฌผ์ด ์ธ์ฝ๋ฉ๋ ๋ถ๋ถ์ด๋ค. ์๊ทธ๋์ฒ(SIGNATURE) : ์ผ๋ จ์ ๋ฌธ์์ด๋ก, ์๊ทธ๋์ฒ๋ฅผ ํตํด ํ ํฐ์ด ๋ณ์กฐ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค. ์๊ทธ๋์ฒ๋ JWT ๋น๋ฐํค๋ก ๋ง๋ค์ด์ง๋ค. .. [Node.js ๊ต๊ณผ์] #38. ์น API ์๋ฒ ๋ง๋ค๊ธฐ - ํ๋ก์ ํธ ๊ตฌ์กฐ ๊ฐ์ถ๊ธฐ API ์๋ฒ ์ดํดํ๊ธฐ API (Application Programming Interface)๋ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์ฌ ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํ์ฉํ๋ ์ ์ ์ ์๋ฏธํ๋ค. ์น API๋ ๋ค๋ฅธ ์น ์๋น์ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ฑฐ๋ ์์์ ๊ฐ์ ธ์ฌ ์ ์๋ ์ฐฝ๊ตฌ์ด๋ค. ํํ API๋ฅผ ์ด์๋ค ๋๋ ๋ง๋ค์๋ค๊ณ ํํํ๋๋ฐ, ์ด๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์์ ํ์ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํ์ฉํ์์์ ๋ปํ๋ค. ๋ค๋ฅธ ์ฌ๋์๊ฒ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ ์ถ์ ๋ถ๋ถ๋ง API๋ฅผ ์ด์ด ๋๊ณ , ์ ๊ณตํ๊ณ ์ถ์ง ์์ ๋ถ๋ถ์ API๋ฅผ ๋ง๋ค์ง ์๋ ๊ฒ์ด๋ค. ๋ํ, API๋ฅผ ์ด์ด ๋์๋ค ํ๋๋ผ๋ ๋ชจ๋ ์ฌ๋์ด ์ ๋ณด๋ฅผ ๊ฐ์ ธ๊ฐ ์ ์๋ ๊ฒ์ด ์๋๋ผ ์ธ์ฆ๋ ์ฌ๋๋ง ์ผ์ ํ์ ๋ด์์ ๊ฐ์ ธ๊ฐ๊ฒ ์ ํ์ ๋ ์๋ ์๋ค. ์์ ๊ฐ์ ์๋ฒ์ API๋ฅผ ์ฌ๋ ค์ URL์ ํตํด ์ ๊ทผ.. [Node.js ๊ต๊ณผ์] #37. ์ต์คํ๋ ์ค๋ก SNS ์๋น์ค ๋ง๋ค๊ธฐ - ํ๋ก์ ํธ ๋ง๋ฌด๋ฆฌํ๊ธฐ ํ๋ก์ ํธ ๋ง๋ฌด๋ฆฌํ๊ธฐ ์ด๋ฏธ์ง ์ ๋ก๋๊น์ง ๋ง๋ฌด๋ฆฌ๋์์ผ๋ ์ด์ ํด์ํ๊ทธ ๊ฒ์ ๊ธฐ๋ฅ๊ณผ ํ๋ก์๋ง ์ถ๊ฐํ๋ฉด ๋๋ค. ๋ง์ง๋ง์ผ๋ก routes/post.js์ routes/user.js๋ฅผ app.js์ ์ฐ๊ฒฐํ๋ค. ์ ๋ก๋ํ ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ ๋ผ์ฐํฐ(/img)๋ express.static ๋ฏธ๋ค์จ์ด๋ก uploads ํด๋์ ์ฐ๊ฒฐํ๋ค. ๊ฒฐ๊ณผ [Node.js ๊ต๊ณผ์] #36. ์ต์คํ๋ ์ค๋ก SNS ์๋น์ค ๋ง๋ค๊ธฐ - Multer ๋ชจ๋๋ก ์ด๋ฏธ์ง ์ ๋ก๋ ๊ตฌํํ๊ธฐ Multer ๋ชจ๋๋ก ์ด๋ฏธ์ง ์ ๋ก๋ ๊ตฌํํ๊ธฐ SNS ์๋น์ค์ธ ๋งํผ ์ด๋ฏธ์ง ์ ๋ก๋๋ ์ค์ํ๋ค. ์ด๋ฏธ์ง๋ ๋ณดํต input[type=file] ํ๊ทธ์ form ํ๊ทธ๋ฅผ ํตํด์ ์ ๋ก๋ํ๋ค. ์ด ๋ form์ ์ธ์ฝ๋ฉ ํ์ ์ multipart/form-data์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด๋ฐ ํ์์ผ๋ก ์ฌ๋ผ์จ ๋ฐ์ดํฐ๋ ์ง์ ์ฒ๋ฆฌํ๊ธฐ ํ๋๋ฏ๋ก multipart ์ฒ๋ฆฌ์ฉ ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ๋ํ์ ์ธ ๊ฒ์ด Multer์ด๋ค. ํ์ฌ NodeBird๋ ๊ฒ์๊ธ ์์ฑ ํผ์ enctype์ด multipart/form-data๋ก ๋์ด ์๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ผ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด Multer๊ฐ ํ์ํ๋ค. ๋ชจ๋์ ๋จผ์ ์ค์นํ๋ค. npm i multer ์ด๋ฏธ์ง๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํ ๊ฒ์ธ์ง๋ ์๋น์ค์ ํน์ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. NodeBird๋ input.. [Node.js ๊ต๊ณผ์] #35. ์ต์คํ๋ ์ค๋ก SNS ์๋น์ค ๋ง๋ค๊ธฐ - Passport ๋ชจ๋๋ก ๋ก๊ทธ์ธ ๊ตฌํํ๊ธฐ Passport ๋ชจ๋๋ก ๋ก๊ทธ์ธ ๊ตฌํํ๊ธฐ SNS ์๋น์ค์ด๋ฏ๋ก ๋ก๊ทธ์ธ์ด ํ์ํ๋ค. ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ์ ์ง์ ๊ตฌํํ ์๋ ์์ง๋ง, ์ธ์ ๊ณผ ์ฟ ํค ์ฒ๋ฆฌ ๋ฑ ๋ณต์กํ ์์ ์ด ๋ง์ผ๋ฏ๋ก ๊ฒ์ฆ๋ ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ๋ฐ๋ก Passport๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ์ด๋ฆ์ฒ๋ผ ์ฐ๋ฆฌ์ ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ์ฌ๊ถ ์ญํ ์ ํ๋ค. ์์ฆ์๋ ์๋น์ค์ ๋ก๊ทธ์ธ์ ํ ๋ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํด์ ํ์ง ์๊ณ ๊ตฌ๊ธ, ํ์ด์ค๋ถ, ์นด์นด์คํก ๊ฐ์ ๊ธฐ์กด์ SNS ์๋น์ค ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ๊ธฐ๋ ํ๋ค. ์ด ๋ํ Passport๋ฅผ ์ฌ์ฉํด์ ํด๊ฒฐํ ์ ์๋ค. 1. Passport ๊ด๋ จ ํจํค์ง ์ธํ ํ๊ธฐ 1-1. Passport ๊ด๋ จ ํจํค์ง๋ค์ ์ค์นํ๋ค. npm i passport passport-local passport-kakao bcrypt .. [Node.js ๊ต๊ณผ์] #34. ์ต์คํ๋ ์ค๋ก SNS ์๋น์ค ๋ง๋ค๊ธฐ - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธํ ํ๊ธฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธํ ํ๊ธฐ MySQL๊ณผ ์ํ๋ผ์ด์ฆ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์ ํ๋ค. 1. model ์์ฑํ๊ธฐ 2. ์์ฑํ ๋ชจ๋ธ๋ค์ ์ํ๋ผ์ด์ฆ์ ๋ฑ๋กํ๊ธฐ as: ์ํ๋ผ์ด์ฆ๊ฐ JOIN ์์ ์ ์ฌ์ฉํ๋ ์ด๋ฆ์ด๋ค. as์ ๋ฑ๋กํ ์ด๋ฆ์ ๋ฐํ์ผ๋ก ์ํ๋ผ์ด์ฆ๋ getFollowers, getFollowings, addFollower, addFollowing ๋ฑ์ ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ๋ค. NodeBird์ ๋ชจ๋ธ์ User, Post, Hashtag, PostHashtag, Follow ์ด๋ ๊ฒ ์ด 5๊ฐ ์ด๋ค. 3. ์์ฑํ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ์๋ฒ์ ์ฐ๊ฒฐํ๊ธฐ ์ํ๋ผ์ด์ฆ๋ config.json์ ์ฝ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํด์ฃผ๋ ๊ธฐ๋ฅ์ด ์๋ค. ๋ฐ๋ผ์ config.json์ ๋จผ์ ์์ ํ๋ค. ์ฝ์์์ sequelize db:crea.. [Node.js ๊ต๊ณผ์] #33. ์ต์คํ๋ ์ค๋ก SNS ์๋น์ค ๋ง๋ค๊ธฐ - ํ๋ก์ ํธ ๊ตฌ์กฐ ๊ฐ์ถ๊ธฐ ์ต์คํ๋ ์ค๋ก SNS ์๋น์ค ๋ง๋ค๊ธฐ ๋ก๊ทธ์ธ, ์ด๋ฏธ์ง ์ ๋ก๋, ๊ฒ์๊ธ ์์ฑ, ํด์ํ๊ทธ ๊ฒ์, ํ๋ก์ ๋ฑ์ ๊ธฐ๋ฅ์ด ์๋ SNS ์๋น์ค์ธ NodeBird ์ฑ์ ๋ง๋ค์ด๋ณด์. 1. nodebird ํด๋ ์์ฑ express-generator์ ์ฌ์ฉํ์ง ์๊ณ ์ง์ ํ๋ก์ ํธ ์์ฑํ๊ธฐ. 2. package.json ์์ฑ ํญ์ package.json์ ์ ์ผ ๋จผ์ ์์ฑํด์ผ ํ๋ค. package.json์ ์์ฑํด์ฃผ๋ npm init ๋ช ๋ น์ด๋ฅผ ์ฝ์์์ ํธ์ถํด๋ ๋๊ณ ์ง์ ๋ง๋ค์ด๋ ๋๋ค. version์ด๋ description, author, license๋ ์ํ๋ ๋๋ก ์์ ๋กญ๊ฒ ์์ ํด๋ ๋๋ค. scripts ๋ถ๋ถ์ start ์์ฑ์ ์์ง ๋ง๊ณ ๋ฃ์ด์ค์ผ ํ๋ค. 3. ์ํ๋ผ์ด์ฆ ์ค์น npm i -g sequelize-cli npm .. [Node.js ๊ต๊ณผ์] #32. MongoDB - ๋ชฝ๊ตฌ์ค ์ฌ์ฉํ๊ธฐ ๋ชฝ๊ตฌ์ค ์ฌ์ฉํ๊ธฐ MySQL์ ์ํ๋ผ์ด์ฆ๊ฐ ์๋ค๋ฉด ๋ชฝ๊ณ ๋๋น์๋ ๋ชฝ๊ตฌ์ค(Mongoose)๊ฐ ์๋ค. ๋ชฝ๊ตฌ์ค๋ ์ํ๋ผ์ด์ฆ์ ๋ฌ๋ฆฌ ODM(Object Document Mapping)์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค. ๋ชฝ๊ณ ๋๋น๋ ๋ฆด๋ ์ด์ ์ด ์๋๋ผ ๋คํ๋จผํธ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ORM์ด ์๋๋ผ ODM์ด๋ค. ๋ชฝ๊ตฌ์ค๋ฅผ ์ฐ๋ ์ด์ ๋ชฝ๊ณ ๋๋น๋ ํ ์ด๋ธ์ด ์์ด์ ์์ ๋กญ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ์ ์์ง๋ง, ๋๋ก๋ ์์ ๋ก์์ด ๋ถํธํจ์ ์ด๋ํ๋ค. ์ค์๋ก ์๋ชป๋ ์๋ฃํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ์๋ ์๊ณ , ๋ค๋ฅธ ๋คํ๋จผํธ์๋ ์๋ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ์๋ ์๋ค. ๋ชฝ๊ตฌ์ค๋ ๋ชฝ๊ณ ๋๋น์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ธฐ ์ ๋ ธ๋ ์๋ฒ ๋จ์์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ ํํฐ๋งํ๋ ์ญํ ์ ํ๋ค. populate() ๋ฉ์๋๋ฅผ ํตํด JOIN ๊ธฐ๋ฅ์ ์ด๋ ์ ๋ ๋ณด์ํด์ค๋ค. ES2015 ํ๋ก๋ฏธ์ค ๋ฌธ๋ฒ๊ณผ ๊ฐ๋ ฅํ๊ณ ๊ฐ๋ ์ฑ์ด ๋.. ์ด์ 1 2 3 4 5 ๋ค์