๋ก๊ทธ์ธ์ ๊ตฌํํ๋๋ฐ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐฉ์์ผ๋ก ์ธ์ (Session)๋ฐฉ์๊ณผ ํ ํฐ(JWT)๋ฐฉ์์ด ์๋ค. ๊ทธ๋์ ๊ฐ๋จํ ์ด ๋๊ฐ์ง ๋ฐฉ์์ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง๋ฅผ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๊ณ , ๋ด๊ฐ JWT์ ์ด์ฉํด ๋ก๊ทธ์ธ์ ๊ตฌํํ ๋ฐฉ์๋ ๊ธฐ๋กํด๋ณด๋ ค ํ๋ค.
#. http stateless
๋จผ์ http๋ connectionless(๋น์ฐ๊ฒฐ์ฑ), stateless(๋ฌด์ํ) ๋ผ๋ ๋๊ฐ์ง ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค. ๋น์ฐ๊ฒฐ์ฑ์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด์ด ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์๋ต์ ๋ง์น ํ ์ฐ๊ฒฐ์ ๋์ด๋ฒ๋ฆฌ๋ ํน์ง์ ๋งํ๋ค. ์ฆ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํ๋ฒ์ ํต์ ์ด ์ด๋ฃจ์ด์ง ํ ๊ทธ ์ฐ๊ฒฐ์ฑ์ด ๋์ด์ง๋ ๊ฒ.
๊ทธ๋ฆฌ๊ณ ๋ฌด์ํ๋ ๋น์ฐ๊ฒฐ์ฑ ํน์ง์ผ๋ก ์ธํด ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์๋ณํ ์ ์๋ ํน์ง์ ๋งํ๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํ๋ฒ์ ํต์ ํ ์ฐ๊ฒฐ์ด ๋์ด์ง๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ๋์ผํ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ค์ ํต์ ์ ํ๊ฒ ๋๋๋ผ๋ ์๋ฒ๋ ํด๋น ํด๋ผ์ด์ธํธ๊ฐ ์ด์ ์ ํต์ ์ ํ๋ ํด๋ผ์ด์ธํธ์ธ์ง ์ ํ ์ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ด๋ฌํ http์ ํน์ฑ ๋๋ฌธ์ ์น์ฌ์ดํธ์์ ๋ก๊ทธ์ธ ํ ์ํ๋ฅผ ์ ์งํ๋ ค๋ฉด ์ธ์ ์ด๋ ํ ํฐ์ ์ด์ฉํด ๋ก๊ทธ์ธํ '์ํ'๋ฅผ ๊ธฐ์ตํด์ผ ํ๋ค. ์ฆ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ณํ ์ ์๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
#. session ๊ณผ jwt
session(์ดํ ์ธ์ )์ ์๋ฒ๋จ์์ ์์ฉ์ ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ธ์ ID๋ฅผ ๋ถ์ฌํด ์ ํจ์๊ฐ ๋ง๋ฃ ์๊น์ง ๋๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ์ธ์ฆ ์ํ๋ฅผ ์ ์งํ ์ ์๋ค. ํด๋ผ์ด์ธํธ๋จ์์ ์ ์ฅํ ์ ์๋ ๋ฐฉ๋ฒ์ธ ์ฟ ํค์ ๋นํด ์ ๋ณด๋ฅผ ์๋ฒ์์ ๊ด๋ฆฌํจ์ผ๋ก ๋ณด์ ์ธก๋ฉด์์ ๋ ์ข๋ค. ํ์ง๋ง ์๋ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๋ ๋งํผ ๋์ ์ ์ํ๋ ํด๋ผ์ด์ธํธ ์๊ฐ ๋ง์ ๊ฒฝ์ฐ ์๋ฒ ๊ณผ๋ถํ์์์ธ์ด ๋๊ธฐ๋ ํ๋ค.
๋๋ค๋ฅธ ๋ฐฉ์์ผ๋ก jwt(json web token) ๋ฐฉ์์ด ์๋ค. jwt๋ ์๋ฒ๊ฐ ์ํธํ๋ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ฃผ๊ณ , ํด๋ผ์ด์ธํธ์์ ์ด๋ฅผ ์ ์ฅํด๋์๋ค๊ฐ ์๋ฒ์ ํ์ธ ์์ฒญ ์ ์๋ฒ๊ฐ ๋ณตํธํํ์ฌ ํ์ธํ๋ ๋ฐฉ์์ด๋ผ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ์ ์ ์ฅํ์ง๋ง ๋ณด์์ ์ ์งํ ์ ์๋ค๋ ์ ์ด ์ฟ ํค์๋ ๋ ๋ค๋ฅด๋ค.
๊ทธ๋ฐ๋ฐ ๋ด๊ฐ jwt์ ๊ณต๋ถํ๋ฉด์ ์๋ฌธ์ด ๋ค์๋ ์ ์ ๊ฒฐ๊ตญ refresh ํ ํฐ์ ์๋ฒ์์๋ DB์ ์ ์ฅํด๋์ด์ผ ํ๋๋ฐ, ๊ทธ๋ผ session ๋ฐฉ์์ด ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฐจ์งํ ์ ์๋ค๋ ๋จ์ ๊ณผ ๋๊ฐ์ง ์๋? ํ๋ ์ ์ด์๋ค.
๊ทธ๋์ ์กฐ๊ธ ๋ ์ฐพ์๋ณด๋ ์๋ฒ์์ session๊ณผ DB์ ์ ์ฅํ๋๋ฐ ์ฐจ์ด์ ์ด ์กด์ฌํ๋๊ฑฐ ๊ฐ๋ค. ์ฒซ๋ฒ์งธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅ/๊ด๋ฆฌํ๋ '๋์คํฌ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค'๊ฐ ์๊ณ , ๋๋ฒ์งธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ/๊ด๋ฆฌํ๋ '์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค'๊ฐ ์๋ค.
๋์คํฌ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ง์์ฑ ๋ฐ ์์ ์ฑ์ด ๋ณด์ฅ๋๊ณ ์ฝ๊ฒ ํ์ฅ ๊ฐ๋ฅํด ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ฉ์ดํ๋ค๊ณ ํ๋ค. ํ์ง๋ง ๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ์๊ฐ, ๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์๊ฐ ๋ฑ์ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํ๋ค. ๋ด๊ฐ ์ฌ์ฉํ MySQL์ด๋ Oracle์ด ์ฌ๊ธฐ์ ํด๋นํ๋ค.
์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ ์ ๊ทผ ์๋๊ฐ ๋น ๋ฅด์ง๋ง ๋์คํฌ์ ๋นํด ์๋์ ์ผ๋ก ๊ฐ๊ฒฉ์ด ๋น์ธ๋ฉฐ, ์ฃผ ์ ์ฅ์(RAM)์ธ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ๋ฐ์ฑ์ด๋ ํน์ง์ด ์์ด ์๋ฒ ์ฅ์ ๋ฐ์ ์ ๋ฐ์ดํฐ ์์ค ์ํํ ์กด์ฌํ๋ค. ํ์ง๋ง ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ ๋ณด์ ๊ฒฝ์ฐ ์์ํ ์ ์ฅ๋์ด์ผ ํ๋ ์ ๋ณด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ session ID๋ฅผ ์ ์ฅํ ๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฌ์ฉ๋๋ค๊ณ ํ๋ค.
๋ฐ๋ผ์ ๋ด๊ฐ jwt๋ฅผ ๊ตฌํํ๋ฉด์ ํ ํฐ์ MySQL์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ๊ณผ session์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋ค๋ฅธ๊ฑฐ ๊ฐ๋ค. ์ฌ์ค 100% ์ดํด๋์ง ์์์ ์ด๋ถ๋ถ์ ์ถ๊ฐ์ ์ผ๋ก ๋ ๊ณต๋ถ๋ฅผ ํด์ผ ํ ๊ฑฐ ๊ฐ๋ค ๐ค
#. jwt ๋ก๊ทธ์ธ ๊ตฌํ
๋ด๊ฐ ๊ตฌํํ ๋ก๊ทธ์ธ ๊ณผ์ ์ ์ด๋ ๋ค. ๋จผ์ ํด๋ผ์ด์ธํธ์์ ์ ๋ ฅ๋ฐ์ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์๋ฒ์ ์ ๋ฌํ๋ฉด ์๋ฒ๊ฐ ์ฌ์ฉ์ DB๋ฅผ ์กฐํํ์ฌ ์ ๋ณด๊ฐ ์๋์ง ํ์ธ ํ ์์ผ๋ฉด access token๊ณผ refresh token์ ๋ง๋ค์ด ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๋ค. ์ด๋ access token์ ๋ง๋ฃ์๊ฐ์ ์งง๊ฒ ์ค์ ํ์ฌ ๋ณด๋ด๊ณ , refresh token์ DB์ ์ ์ฅํด๋๋ค.
ํด๋ผ์ด์ธํธ๋ ๋๊ฐ์ง ํ ํฐ์ ์๋ฒ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ผ๋ฉด access token์ http header์ ์ ์ฅํ๊ณ , refresh token์ ์ฟ ํค์ ์ ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ก๊ทธ์ธ ์ธ์ฆ์ด ํ์ํ mypage ํ์ด์ง์ ์ ๊ทผ ์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ access token์ ํ์ธํ ํ ์๋ตํด์ฃผ๋๋ก ํ๋ค.
๋ง์ฝ access token์ ๋ง๋ฃ์๊ฐ์ด ์ง๋ฌ์ผ๋ฉด ํด๋ผ์ด์ธํธ์ refresh token์ ์์ฒญํ๊ณ ํด๋ผ์ด์ธํธ๋ ์ฟ ํค์ ์ ์ฅ๋ refresh token ๊ฐ์ ๋ค์ ์ ๋ฌํ๋ค. ๊ทธ๋ผ ์๋ฒ๋ DB์์ refresh token์ ์ฐพ์์ ์๋ก ๋์ผํ์ง ํ์ธ ํ ์๋ก์ด access token๊ณผ refresh token์ ๋ง๋ค์ด ์ค๋ค.
'๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
heroku ์๋๋ฐฐํฌ ์ค๋ฅ (0) | 2022.10.14 |
---|---|
react + express ํ๋ก์ ํธ ๋ฐฐํฌ ํ๊ธฐ (heroku ์ด์ฉ) (0) | 2022.10.11 |
redux-saga๋ฅผ ์ด์ฉํ ๋น๋๊ธฐ ๊ตฌํ (0) | 2022.10.06 |
React + Express ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ (0) | 2022.10.06 |
์๋ฐ์คํฌ๋ฆฝํธ ๋๊ธฐ์ ๋น๋๊ธฐ (0) | 2022.09.29 |