[MEMO APP] Back-end/ REST API+Session&Token-Login
๐จ๐ป REST API-Login
์ง๋ ํฌ์คํ ์์ ์ ํฌ๋ RegisterLocal ๊ธฐ๋ฅ์ ์์ฑ์์ผ์ฃผ์์ต๋๋ค. ์ค๋์ ํ์๊ฐ์ ๋ ์ ๋ณด๋ฅผ ์ด์ฉํด์ ๋ก๊ทธ์ธ์ ์ฒ๋ฆฌํด์ฃผ๋ Controller method๋ฅผ ๋ง๋ค์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ Login Controller method
Login ๊ด๋ จ ๋ฐ์ดํฐ์ฒ๋ฆฌ๋ authentication๊ณผ ๊ด๋ จ๋์ด ์์ผ๋ฏ๋ก auth.ctrl.js์์ ์์ ์ ํด์ค๊ฒ๋๋ค. ์ผ๋จ ํด๋น ํ์ผ์ ์ด์ด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
์๋์ ์ฌ์ง์ ํ์ด๋ผ์ดํธ ๋ถ๋ถ์ ์ง๊ธ๋ถํฐ ์์ ํด์ฃผ๊ฒ ์ต๋๋ค.
์ผ๋จ, ๋ก๊ทธ์ธ์์๋ ์ ์ (=ํด๋ผ์ด์ธํธ)๋ก๋ถํฐ ๋ณด๋ด์ง ๋ฐ์ดํฐ๊ฐ ์์๊ฒ๋๋ค. ๋ก๊ทธ์ธ์ด๋๊น email, password์ ๋๊ฐ ๋๊ฒ ๋ค์.
์ด ๋ณด๋ด์ง email๊ณผ password๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํ์์ธ์ง ๊ฒ์ฆํด์ฃผ๋ ์ ์ฐจ๋ฅผ ํ์๊ฐ์ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ์งํํด์ฃผ์ด์ผ ํฉ๋๋ค.
(๋ค์ํ๋ฒ Joi๋ฅผ ์ฌ์ฉํด์ผ๊ฒ ๋ค์.)
๊ฒ์ฆ์ด ์คํจํ์๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์ค๋ฅ๋ฉ์์ง๊ฐ ๋ํ๋๋๋ก ์ค์ ์ ํด์ฃผ๋ ์์ค๋ ์ถ๊ฐํด ์ฃผ๊ฒ ์ต๋๋ค.
๊ทธ ๋ค์์ ๊ฒ์ฆ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ด์ ๋ณด(email, password)๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค์ ๋ก ์กด์ฌํ๋์ง ๊ฒ์ฌํ๋ ์์ค์ฝ๋๋ ๋ง๋ค์ด์ฃผ๋๋ก ํ ๊ฒ์.
์ผ๋จ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๋ จํ ์์ ์์ผ๋ก try catch ๋ธ๋ก์์์ ์์ ์ ์งํํ ๊ฒ์.
์ด์ ์ ์ฐ๋ฆฌ๊ฐ User.js์์ ๋ง๋ค์๋ email์ ๊ฐ์ง๊ณ DB์์ ํน์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ findByEmailํจ์๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
์์ ๊ทธ๋ฆผ์์ 86๋ฒ์งธ์ค์ฒ๋ผ ์ฐพ์์ ๊ฐ์ ธ์จ ์ ์ ์ ์ ๋ณด๊ฐ ์กด์ฌํ๋์ง ์๋์ง์ ๋ฐ๋ผ ๋ก๊ทธ์ธ์ ์ฒ๋ฆฌํด์ฃผ๋ ์ผ์ข ์ ์กฐ๊ฑด๋ฌธ์ ๋ง๋ค์ด์ฃผ๊ฒ ์ต๋๋ค.
(์ฌ๊ธฐ์ ์ต์ข ์ ์ผ๋ก ํด๋น email์ ์ ๋ณด๋ฅผ ๊ฐ์ง ์ ์ ๋ฐ์ดํฐ๊ฐ ์๋์ง ๊ฒ์ฆํฉ๋๋ค.)
์ด๋ถ๋ถ์ ์ ํต๊ณผํ๋ค๋ฉด, ์ฐ๋ฆฌ๊ฐ email์ ๋ณด๋ง๊ณ ๋ฐ์ ๋๋ค๋ฅธ ์ ๋ณด์ธ password๊ฐ ํด๋น ์ ์ DB data์ ์ ๋ณด์ ์ผ์นํ๋์ง๋ฅผ ๊ฒ์ฆํด์ฃผ์ด์ผ ํฉ๋๋ค.
(์ฌ๊ธฐ์ Password์ผ์น์ฌ๋ถ๋ฅผ ๊ฒ์ฆํฉ๋๋ค.)
์ด๋ฅผ ๊ฒ์ฆํ๊ธฐ ์ํด์๋ User Database์ ์ ๊ทผํด์ผํ๋๋ฐ์, ๊ทธ๋์ User.js์ User์ password ์ ๋ณด์ ์ผ์นํ๋์ง ๊ฒ์ฆ์์ผ์ฃผ๋ ํจ์๋ฅผ ์๋กญ๊ฒ ๋ง๋ค์ด์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ํจ์๋ฅผ auth.ctrl.js์์ ์ฌ์ฉํด์ password๊ฒ์ฆ์ ์ฐจ๊น์ง ์์ฑํด ์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ค์ auth.ctrl.js ํ์ผ์ ์ด์ด์ฃผ์ธ์.
(email์ ๊ฐ์ง๊ณ ์ ์ ์ ๋ณด ๊ฒ์ฆํ๋ ์กฐ๊ฑด๋ฌธ์ฒ๋ผ password ๊ฒ์ฆ๋ ๋น์ทํ๊ฒ ์์ค์ฝ๋๋ฅผ ๊ตฌ์ฑํด์ค๋๋ค.)
์ฌ๊ธฐ๊น์ง ํด์ฃผ์ จ๋ค๋ฉด ์ ์ ๊ฐ ๋ณด๋ธ์ค์ ๋ณด๊ฐ DB์ ์กด์ฌํ๋์ง์ ๋ํ ๊ฒ์ฆํ๋ ์ ์ฐจ๋ ์๋ฃ๊ฐ ๋์์ต๋๋ค.
ํ์ง๋ง ์ฌ๊ธฐ๊น์ง๋ง ํ๋ค๋ฉด ๋ก๊ทธ์ธ์ด ์ง์์ ์ผ๋ก ์ ์ง๊ฐ ๋์ด์ง์ง ์์๊ฒ๋๋ค.
ํ์๊ฐ์ ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก Web Token์ ์ด์ฉํด์ ๋ก๊ทธ์ธ์ ์ ์ง์์ผ์ฃผ์ด์ผ ํ๋๋ฐ์, ๊ทธ ์ ์ฐจ๋ฅผ ์ง๊ธ ๋ง๋ค์ด์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋ ๊ฒ ์์ฑํด์ฃผ๋ฉด ๋ก๊ทธ์ธ์ ๋ณด๋ฅผ ๋ด์ ๋ฐ์ดํฐ(Token)์ด ๋ด๊ธด ์ธ์ ์ด ๋ง๋ค์ด์ง๋๋ค.
(ํด๋ผ์ด์ธํธ์์๋ ์ด๋ฅผ ์ด์ฉํด ๋ก๊ทธ์ธ์ ์ ์ง์์ผ์ฃผ๋ฉด ๋ฉ๋๋ค.)
์ ์ฌ์ง์์ ์๋์ catch ๋ธ๋ก ์์ ๋ด์ฉ์ ์ถํ ๋ฆฌ์กํธ์์ ์ฌ์ฉํ๊ธฐ์ํด ๋ณด๋ด์ฃผ๋ ์ ๋ณด์์ผ๋ก ์์ง ์์ฑ์ ์ํด๋ ๋ฌด๊ดํ๋ ์๋ต๋ฉ์์ง๋ฅผ ๋ฐ๋ก ์ง์ ์ ํด์ค์ผ ํจ์ผ๋ก ๋ฐ๋ผ์ ์์ฑํด์ฃผ์ ๋ ๋ฌด๊ดํฉ๋๋ค.
(์๋ ์ฌ์ง์ ์ฐธ๊ณ ํด์ฃผ์ธ์.)
์ฌ๊ธฐ์ ๋๋๋๊ฒ์ด ์๋๋ผ ์ฐ๋ฆฌ๊ฐ ๋ง๋ loginLocal method๋ฅผ ์ฐ๋ฆฌ์ ํน์ URI์ ์ฐ๊ฒฐ์ ํด์ค์ผํฉ๋๋ค.
์ด๋ฅผ ์ํด์ auth/inde.js ํ์ผ๋ก ์ด๋์ ํ๊ฒ ์ต๋๋ค.
์์ ํ์ด๋ผ์ดํธํ ๋ถ๋ถ์ด ์ฐ๋ฆฌ๊ฐ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋์๋ Login์ ์ํ URI์ ๋๋ค.
๋ค์ ์๋ Arrow function์ด ๋ฐฉ๊ธ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค์๋ loginLocal ํจ์๊ฐ ๋ค์ด๊ฐ ์๋ฆฌ์ ๋๋ค.
๋ฐ๋ก ์์ ์๋ ํ์๊ฐ์ URI์ฝ๋์ฒ๋ผ ์์ ์ ํด์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋ ๊ฒ ํด์ฃผ๋ฉด ํด๋น๊ฒฝ๋ก๋ก ๋ก๊ทธ์ธ์ ์๋ํ๋๊ฒ์ด ๊ฐ๋ฅํด์ง๋๋ค.
ํ๋ฒ ์๋ฒ๋ฅผ ์ผ๊ณ PostMan์ ์ด์ฉํด ํ ์คํธ๋ฅผ ์งํํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
(ํ ์คํธ์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ ์๋์๊ฐ์ด ํ์๊ฐ์ ๋ ์ฌ์ฉํ ์ ๋ณด๋ฅผ ํ์ฉํ๋๋ก ํ๊ฒ ์ต๋๋ค.)
์๋์ ์ฌ์ง์ฒ๋ผ PostMan ํ๋จ์์ ๊ทธ๊ฒฐ๊ณผ๋ก Cookie ์์ accsee_token์ด ์์ฑ๋๊ฒ์ ํ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ด ์ ๋ณด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ง๋ค์ด์ก๋์ง https://jwt.io/ ์ฌ์ดํธ๋ก ์ด๋ํด์ ๊ฒ์ฌ๋ฅผ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ค๋ ํฌ์คํ ์ ์ฌ๊ธฐ๊น์ง์ ๋๋ค. ์ ํฌ๋ REST API๊ธฐ๋ฐ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํด์ฃผ์์ต๋๋ค.
์กฐ๊ธ ๊ธฐ๋๊ธด ๋ด์ฉ์ด์๋๋ฐ์, ๋ค์ ํฌ์คํ ์์๋ ํํ ํฌ ์ฌ์ด๊ฐ๋ ์๊ฐ์ผ๋ก ์ ํฌ๊ฐ ๋ง๋๋ ์๋น์ค์ ์๋๋ ํจ์จ์ ์ธ ์ธก๋ฉด์ ์์น์์ผ์ค ๋ฏธ๋ค์จ์ด ๋ช๊ฐ๋ฅผ ์ค์ ํด ์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ค์ ํฌ์คํ ์์ ๋ต๊ฒ์~!๐