๐โโ๏ธ1. Node.js๋ก 5๋ถ๋ง์ API ๋ง๋ค๊ธฐ
๐โโ๏ธ2. Node.js๋ก POST API ๋ง๋ค๊ธฐ
๐โโ๏ธ3. Node.js๋ก ๋ฐ์ดํฐ ์ ์ฅํ๊ธฐ
๐โโ๏ธ4. Node.js์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค ๋ถ์ด๊ธฐ, ๋ฐ์ดํฐ ์ญ์ ํ๊ธฐ
์ด๋ฒ์๋ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด์. ์ ์ผ ๊ธฐ๋ณธ์ ์ธ ์ธ์
์ ์ฅ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๊ณ , ์ํธํ๋ ๊ณ ๋ คํ์ง ์๋๋ค(์๋๋ ๊ผญ ๋น๋ฐ๋ฒํธ ์ํธํ ํด์ผ ํจ!).
์ฌ์ ์ค๋น 1 : ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
1 |
|
ํฐ๋ฏธ๋์ ์์ ๊ฐ์ด ์ ๋ ฅํด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ค์นํด์ค๋ค. ๋ก๊ทธ์ธ, ๋ก๊ทธ์ธ ๊ฒ์ฆ, ์ธ์ ์์ฑ์ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด๋ค. ์ค์ ์๋น์ค ์์๋ express-session ๋ง๊ณ , MongoDB์์ ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ ๊ฒ ์ข๋ค.
์ฌ์ ์ค๋น 2 : ์ค์นํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค require
1 |
|
์์์ ์ค์นํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฌ์ฉํ๋ ค๋ฉด server.js ์๋จ์ ์ด๋ ๊ฒ ์ ์ธ์ ํด์ฃผ์ด์ผ ํ๋ค. app.use()
๋ ์ด ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค๋ ์ ์ธ์ด๋ค.
์ฌ์ ์ค๋น 3 : MongoDB์ ๊ฐ์์ ์ฌ์ฉ์ ์ ๋ณด ๋ง๋ค๊ธฐ
ํ์๊ฐ์
๊ธฐ๋ฅ์ ๊ตฌํํ์ง ์์์ผ๋ฏ๋ก ๋ก๊ทธ์ธ ์๋๋ฅผ ํ๋ ค๋ฉด ์์์ ๊ณ์ ์ด ํ๋ ํ์ํ๋ค. MongoDB์ ์ ์ปฌ๋ ์
์ ํ๋ ๋ง๋ค๊ณ , Insert Document
๋ฒํผ์ ๋๋ฌ ๊ฐ์ ๋ก ํ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ ๋ฃ์ด๋ณด์.
์ด์ ์ฌ์ ์ค๋น๋ ๋ชจ๋ ๋๋ฌ๊ณ , ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด ๋๋ค.
์ด๋ค ์ฌ๋์ด ๋ก๊ทธ์ธ ์๋๋ฅผ ํ๋ฉด ์์ด๋์ ๋น๋ฐ๋ฒํธ๊ฐ DB์ ์๋์ง ๊ฒ์ฌํ๊ณ , ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ์ธ์
์ ํ๋ ์์ฑํ๋ฉฐ ์ฑ๊ณต ํ์ด์ง๋ก ์ด๋์ํจ๋ค. ๋ก๊ทธ์ธ์ ์คํจํ๋ฉด ์คํจ ํ์ด์ง๋ก ์ด๋์ํค๋ฉด ๋์ด๋ค.
๊ฐ๋ฐ 1 : ๋ก๊ทธ์ธ ํ์ด์ง ๋ง๋ค๊ธฐ & ๋ผ์ฐํ
/login์ผ๋ก ๋ฐฉ๋ฌธํ์ ๋ ๋ณด์ฌ์ค ํ์ด์ง๋ฅผ ํ๋ ์ค๋นํด์ผ ํ๋ค. ์๋์ ๊ฐ์ด login.ejs ํ์ผ์ ์์ฑํ๋ค. (๋ฐ๋ ๋ถ๋ถ๋ง ๊ฐ์ ธ์์)
1 |
|
๊ทธ๋ฆฌ๊ณ /login์ด ํธ์ถ๋๋ฉด ejsํ์ด์ง๋ฅผ ๋ณด์ฌ์ค ์ ์๋๋ก ๋ผ์ฐํ ๋ ํด์ฃผ์ด์ผ ํ๋ค.
1 |
|
๊ฐ๋ฐ 2 : ์์ด๋์ ํจ์ค์๋ ๊ฒ์ฌ
๋๊ตฐ๊ฐ loginํผ์์ ID์ PW๋ฅผ ์
๋ ฅํ๊ณ ์ ์ก ๋ฒํผ์ ๋๋ฅด๋ฉด, ์ด ํ์ ์ ๋ณด๊ฐ ์ ํจํ์ง ๊ฒ์ฌํด์ผ ํ๋ค. ์๋์ ๊ฐ์ด ์์ฑํ๋ฉด Local ๋ฐฉ์์ผ๋ก ์์ด๋/๋น๋ฐ๋ฒํธ๋ฅผ ์ธ์ฆ
๋ฐ์ ์ ์๋ค. failureRedirect ๋ถ๋ถ์ ์ธ์ฆ์ ์คํจํ์ ๋ ์ด๋์ํฌ ๊ฒฝ๋ก์ด๋ค.
์ด ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ์์์ ์ถ๊ฐํ passport ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๋ค.
1
2
3
4
5
6//passport.authenticate๋ฅผ ํตํด ์๋ต ์ ์ local ๋ฐฉ์์ผ๋ก ์์ด๋/๋น๋ฐ๋ฒํธ๋ฅผ ์ธ์ฆ๋ฐ์ ์ ์๋ค. app.post('/login', passport.authenticate('local', { failureRedirect: '/fail' }), function (req, res) { res.redirect('/'); });
๊ฐ๋ฐ 3 : ๊ฒ์ฌ๋ฅผ ํด์ฃผ๋ ์ธ๋ถ์ ์ธ ์ฝ๋
2๋ฒ์ ์ฝ๋๋ง ์์ฑํ๋ค๊ณ ๋ก๊ทธ์ธ์ด ๋์ง๋ ์๋๋ค. ์๋์ ๊ฐ์ด passport ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ ๋์ํ๋๋ก ์ถ๊ฐ ์ฝ๋๋ฅผ ์ ๋ ฅํด์ฃผ์ด์ผ ํ๋ค. ์ง์ ์ฐฝ์กฐํ๋ ๊ฒ ์๋๋ผ ์ด๋ ๊ฒ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ ์ฝ๋์ ๋์์๋ค.
1 |
|
๊ฐ๋ฐ 4 : ๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ๋ค๋ฉด ์ธ์ ์ ๋ง๋ค์
๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด ์ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด์ ์ฟ ํค๋ก ๋ณด๋ด์ฃผ์ด์ผ ํ๋ค. ์ด๊ฒ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๋งจ ์์์ ๋ฏธ๋ฆฌ ์ถ๊ฐํด๋์๋ค. ์๋์ ์ฝ๋๋ง ์ ๋ ฅํ๋ฉด ์ ์ id ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ , ์์ฑ๋ ์ธ์ ์์ด๋๋ฅผ ์ด์ฉ ํ ์ ์๋ค.
1 |
|
ํ ์คํธ : ์ ์ ๋์ํ๋์ง ํ์ธํ๊ธฐ
์ด์ localhost:8080
์์ ์๊น ๋ง๋ค์ด ๋ ๊ณ์ ์ ๋ณด๋ก ๋ก๊ทธ์ธ์ ์๋ํ ํ, ์ฟ ํค๋ฅผ ํ์ธํด๋ณด๋ฉด ์ ์์ ์ผ๋ก session์ด ์์ฑ๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ฐ๋ฐ 5 : ๋ก๊ทธ์ธ ํ ์ ์ ๋ง ๋ณผ ์ ์๋ ํ์ด์ง ๋ง๋ค๊ธฐ
๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๋ง๋ค์์ผ๋ ๋ก๊ทธ์ธ ํ ์ ์ ๋ง ๋ณผ ์ ์๋ ํ์ด์ง๋ ๋ง๋ค์ด ๋ณด๋ฉด ์ข๊ฒ ๋ค. ๋ง์ดํ์ด์ง mypage.ejs
ํ๋๋ฅผ ๋ง๋ค์ด๋ณด์. ์๋์ ๊ฐ์ด ์์ฃผ ์ฌํํ ๋ด์ฉ๋ง ์์ด๋ ๊ด์ฐฎ๋ค.
1 |
|
์ ejs ํ์ด์ง๋ฅผ ํธ์ถํ ์ ์๋๋ก server.js์์ ๋ผ์ฐํ
์ ํด์ฃผ์ด์ผ ํ๋ค. ์ด ๋, ๋ก๊ทธ์ธ ์ฒดํฌ๋ฅผ ํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ์์ฑํ ์ ์๋ค. get ์์ loginCheck
์ฒ๋ผ ์์๋ก ๋ง๋ ๋ฏธ๋ค์จ์ด๋ฅผ ๋ฃ์ผ๋ฉด /mypage ์์ฒญ๊ณผ mypage.ejs ์๋ต ์ฌ์ด์ loginCheck๊ฐ ์คํ๋๋ค.
1 |
|
server.js ์๋์ชฝ ์ด๋๊ฐ์ loginCheck
๋ ๊ตฌํํด๋ณด์. ์ด๋ ๊ฒ ์์ฑํ๋ฉด ๋์ด๋ค. deserializeUser ํจ์์์ req.user์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํ๋๋ก ๊ตฌํํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ req.user๋ deserializeUser๊ฐ ๋ณด๋ด์ค ๋ก๊ทธ์ธ ์ ์ ์ ์ ๋ณด๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.
1 |
|