์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ํ์ธํ๋ ๋ฐฉ์์ ๋ํ์ ์ผ๋ก ์ฟ ํค, ์ธ์ , ํ ํฐ 3๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
๐ Cookie
์ฟ ํค๋ Key-Value ํ์์ ๋ฌธ์์ด ๋ฉ์ด๋ฆฌ๋ก, ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ ํ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ, ๊ทธ ์ฌ์ดํธ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์๋ฒ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ ์ ์ค์น๋๋ ์์ ๊ธฐ๋ก ์ ๋ณด ํ์ผ์ด๋ค. ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ฅํ๊ณ ์ ํ๋ ์ ๋ณด๋ฅผ ์๋ต ํค๋(Cookie)์ ์ ์ฅํ์ฌ ์ ๋ฌํ๋ค. ๊ฐ ์ฌ์ฉ์๋ง๋ค์ ๋ธ๋ผ์ฐ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅํ์ฌ ๊ณ ์ ์ ๋ณด ์๋ณ์ด ๊ฐ๋ฅํ๋ค.
๐ก ์ธ์ฆ ๋ฐฉ์
- ๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)๊ฐ ์๋ฒ์ ์์ฒญ(์ ์)์ ๋ณด๋ธ๋ค.
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํ ์๋ต์ ์์ฑํ ๋, ํด๋ผ์ด์ธํธ ์ธก์ ์ ์ฅํ๊ณ ์ถ์ ์ ๋ณด๋ฅผ ์๋ต ํค๋์ Set-Cookie์ ๋ด๋๋ค.
- ์ดํ ํด๋น ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ๋ณด๋ผ ๋๋ง๋ค, ๋งค๋ฒ ์ ์ฅ๋ ์ฟ ํค๋ฅผ ์์ฒญ ํค๋์ Cookie์ ๋ด์ ๋ณด๋ธ๋ค.
์๋ฒ๋ ์ฟ ํค์ ๋ด๊ธด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ํด๋น ์์ฒญ์ ํด๋ผ์ด์ธํธ๊ฐ ๋๊ตฐ์ง ์๋ณํ๊ฑฐ๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ถ์ฒ ๊ด๊ณ ๋ฅผ ๋์ฐ๊ฑฐ๋ ํ๋ค.
๐ก ๋จ์
- ๊ฐ์ฅ ํฐ ๋จ์ ์ ๋ณด์์ ์ทจ์ฝํ๋ค๋ ์ ์ด๋ค. ์์ฒญ ์ ์ฟ ํค์ ๊ฐ์ ๊ทธ๋๋ก ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ์ ์ถ ๋ฐ ์กฐ์ ๋นํ ์ํ์ด ์กด์ฌํ๋ค.
- ์ฟ ํค์๋ ์ฉ๋ ์ ํ์ด ์์ด ๋ง์ ์ ๋ณด๋ฅผ ๋ด์ ์ ์๋ค.
- ์น ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ฟ ํค์ ๋ํ ์ง์ ํํ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ณต์ ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- ์ฟ ํค์ ์ฌ์ด์ฆ๊ฐ ์ปค์ง์๋ก ๋คํธ์ํฌ์ ๋ถํ๊ฐ ์ฌํด์ง๋ค.
๐ Session
์ด๋ฌํ ์ฟ ํค์ ๋ณด์์ ์ธ ์ด์ ๋๋ฌธ์, ์ธ์ ์ ๋น๋ฐ๋ฒํธ ๋ฑ ํด๋ผ์ด์ธํธ์ ๋ฏผ๊ฐํ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ์๋ฒ ์ธก์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ค. ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ๋ ํ๊ณ , ์๋ฒ์ ๋ก์ปฌ ํ์ผ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ธฐ๋ ํ๋ค.
์ฟ ํค๋ผ๋ ์ ๋ณด ์ ์ฅ์ฒด ์์ฒด๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค๋ ์ฌ์ค์ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค. ์ธ์ ์ ์์ ํ ์๋ก์ด ์ฑ๋ฅ์ ๊ธฐ์ ์ด ์๋ ID/PWD์ ๊ฐ์ ๋ฏผ๊ฐ ์ ๋ณด๋ฅผ ๋ค๋ฃจ๋ ์ํฉ์์์ ๋ณด์์ ์ ์ฐพ๊ธฐ ์ํด ๊ณ ์๋์๋ค.
์ธ์ ๊ฐ์ฒด๋ Key์ ํด๋นํ๋ SESSION ID์ ์ด์ ๋์ํ๋ Value๋ก ๊ตฌ์ฑ๋์ด ์๋ค. Value์๋ ์ธ์ ์์ฑ ์๊ฐ, ๋ง์ง๋ง ์ ๊ทผ ์๊ฐ ๋ฐ User๊ฐ ์ ์ฅํ ์์ฑ ๋ฑ์ด Map ํํ๋ก ์ ์ฅ๋๋ค.
๐ก ์ธ์ฆ ๋ฐฉ์
- ์ ์ ๊ฐ ์น์ฌ์ดํธ์์ ๋ก๊ทธ์ธํ๋ฉด ์ธ์ ์ด ์๋ฒ ๋ฉ๋ชจ๋ฆฌ(ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค) ์์ ์ ์ฅ๋๋ค. ์ด๋, ์ธ์ ์ ์๋ณํ๊ธฐ ์ํ Session Id๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- ์๋ฒ์์ ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค์๋ค๊ฐ Session Id๋ฅผ ์ ์ฅํ๋ค.
- ์ฟ ํค์ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๋ ํด๋น ์ฌ์ดํธ์ ๋ํ ๋ชจ๋ Request์ Session Id๋ฅผ ์ฟ ํค์ ๋ด์ ์ ์กํ๋ค.
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ Session Id ์ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ๋ก ๊ด๋ฆฌํ๊ณ ์๋ Session Id๋ฅผ ๋น๊ตํ์ฌ ์ธ์ฆ์ ์ํํ๋ค.
๐ก ๋จ์
- ์ฟ ํค๋ฅผ ํฌํจํ ์์ฒญ์ด ์ธ๋ถ์ ๋ ธ์ถ๋๋๋ผ๋ ์ธ์ ID ์์ฒด๋ ์ ์๋ฏธํ ๊ฐ์ธ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ง ์๋๋ค. ๊ทธ๋ฌ๋ ํด์ปค๊ฐ ์ธ์ ID ์์ฒด๋ฅผ ํ์ทจํ์ฌ ํด๋ผ์ด์ธํธ์ธ์ฒ ์์ฅํ ์ ์๋ค๋ ํ๊ณ๊ฐ ์กด์ฌํ๋ค. (์ด๋ ์๋ฒ์์ IPํน์ ์ ํตํด ํด๊ฒฐ ํ ์ ์๊ธด ํ๋ค)
- ์๋ฒ์์ ์ธ์ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์์ฒญ์ด ๋ง์์ง๋ฉด ์๋ฒ์ ๋ถํ๊ฐ ์ฌํด์ง๋ค.
๐ Token
ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ ์์๋ ํด๋ผ์ด์ธํธ ์๋ฒ ์ ์ ์ ์๋ฒ์์ ํด๋น ํด๋ผ์ด์ธํธ์๊ฒ ์ธ์ฆ๋์๋ค๋ ์๋ฏธ๋ก 'ํ ํฐ'์ ๋ถ์ฌํ๋ค. ์ด ํ ํฐ์ ์ ์ผํ๋ฉฐ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ๋ ๋ ๋ค์ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋ ์์ฒญ ํค๋์ ํ ํฐ์ ์ฌ์ด์ ๋ณด๋ธ๋ค. ์๋ฒ์์๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ ํ ํฐ์ ์๋ฒ์์ ์ ๊ณตํ ํ ํฐ๊ณผ ์ผ์นํ์ง ์ฒดํฌํ์ฌ ์ธ์ฆ ๊ณผ์ ์ ์ฒ๋ฆฌํ๋ค.
๊ธฐ์กด์ ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ์ ์๋ฒ๊ฐ ํ์ผ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๊ณ ์ด๋ฅผ ์กฐํํ๋ ๊ณผ์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ง์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค. ํ์ง๋ง ํ ํฐ์ ์ธ์ ๊ณผ๋ ๋ฌ๋ฆฌ ์๋ฒ๊ฐ ์๋ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ ์คํ ๋ฆฌ์ง ๋ฑ์ ํตํด ์ธ์ ์ ๊ด๋ฆฌํ๋ ์๋ฒ์ ๋ถ๋ด์ ๋ ์ ์๋ค. ํ ํฐ ์์ฒด์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์์ ๋ฐ์ ์์กฐ๋์๋์ง ํ๋ณ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
โ [์๋ฒ ๊ธฐ๋ฐ vs ํ ํฐ ๊ธฐ๋ฐ]
์๋ฒ(์ธ์ ) ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ
์๋ฒ์ ์ธ์ ์ ์ฌ์ฉํด ์ฌ์ฉ์ ์ธ์ฆ์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์๋ฒ์ธก(์๋ฒ ๋จ or ๋ฐ์ดํฐ๋ฒ ์ด์ค)์์ ์ฌ์ฉ์์ ์ธ์ฆ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์ผ๋ฉด ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๊ณ์์์ ์ ์งํด๋๊ณ ์ฌ์ฉํ๋ค. (Stateful) ์ด๋ ์ฌ์ฉ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ฑ๋ฅ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ผ๋ฉฐ ํ์ฅ์ฑ์ด ์ด๋ ต๋ค๋ ๋จ์ ์ ์ง๋๋ค.
ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ
์ด๋ฌํ ๋จ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด "ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ "์ด ๋ํ๋ฌ๋ค. ์ธ์ฆ๋ฐ์ ์ฌ์ฉ์์๊ฒ ํ ํฐ์ ๋ฐ๊ธํ๊ณ , ๋ก๊ทธ์ธ์ด ํ์ํ ์์ ์ผ ๊ฒฝ์ฐ ํค๋์ ํ ํฐ์ ํจ๊ป ๋ณด๋ด ์ธ์ฆ๋ฐ์ ์ฌ์ฉ์์ธ์ง ํ์ธํ๋ค. ์ด๋ ์๋ฒ ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ ๊ณผ ๋ฌ๋ฆฌ ์ํ๋ฅผ ์ ์งํ์ง ์์ผ๋ฏ๋ก Stateless ํ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
๐ก ์ธ์ฆ ๋ฐฉ์
- ์ฌ์ฉ์๊ฐ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธ์ ํ๋ค.
- ์๋ฒ ์ธก์์ ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ)์๊ฒ ์ ์ผํ ํ ํฐ์ ๋ฐ๊ธํ๋ค.
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ ์ธก์์ ์ ๋ฌ๋ฐ์ ํ ํฐ์ ์ฟ ํค๋ ์คํ ๋ฆฌ์ง์ ์ ์ฅํด ๋๊ณ , ์๋ฒ์ ์์ฒญ์ ํ ๋๋ง๋ค ํด๋น ํ ํฐ์ ์HTTP ์์ฒญ ํค๋์ ํฌํจ์์ผ ์ ๋ฌํ๋ค.
- ์๋ฒ๋ ์ ๋ฌ๋ฐ์ ํ ํฐ์ ๊ฒ์ฆํ๊ณ ์์ฒญ์ ์๋ตํ๋ค.
ํ ํฐ์๋ ์์ฒญํ ์ฌ๋์ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๊ธฐ์ ์๋ฒ๋ DB๋ฅผ ์กฐํํ์ง ์๊ณ ๋๊ฐ ์์ฒญํ๋์ง ์ ์ ์๋ค.
๐ก ๋จ์
- ์ฟ ํค/์ธ์ ๊ณผ ๋ค๋ฅด๊ฒ ํ ํฐ ์์ฒด์ ๋ฐ์ดํฐ ๊ธธ์ด๊ฐ ๊ธธ์ด, ์ธ์ฆ ์์ฒญ์ด ๋ง์์ง์๋ก ๋คํธ์ํฌ ๋ถํ๊ฐ ์ฌํด์ง์ ์๋ค.
- Payload ์์ฒด๋ ์ํธํ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ ์ ์ค์ํ ์ ๋ณด๋ ๋ด์ ์ ์๋ค.
- ํ ํฐ์ ํ์ทจ๋นํ๋ฉด ๋์ฒํ๊ธฐ ์ด๋ ต๋ค. (๋ฐ๋ผ์ ์ฌ์ฉ ๊ธฐ๊ฐ ์ ํ์ ์ค์ ํ๋ ์์ผ๋ก ๊ทน๋ณตํ๋ค)
โ JWT(Jason Web Token) ์์๋ณด๊ธฐ
์ถ์ฒ :
https://brunch.co.kr/@jinyoungchoi95/1