๐กCookie, Session, Token์ ํ์ตํด ๋ณด์
Cookie, Session, Token
Backgrounds
์ธ์ฆ(Authentication)
- ์ ์ ๊ฐ ๋๊ตฌ์ธ์ง ํ์ธํ๋ ์ ์ฐจ, ํ์๊ฐ์
ํ๊ณ ๋ก๊ทธ์ธ ํ๋ ๊ฒ
์ธ๊ฐ(Authorization)
- ์ ์ ์ ๋ํ ๊ถํ์ ํ๋ฝํ๋ ๊ฒ
Cookie์ Session์ด ํ์ํ ์ด์
- HTTP ํ๋กํ ์ฝ์ ๋น์ฐ๊ฒฐ์ฑ(Connectionless), ๋ฌด์ํ์ฑ(Stateless)์ ์งํฅํ๋ค. ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ํต์ ์ด ์ข
๋ฃ๋ ํ ์ฐ๊ฒฐ์ ๋๊ณ ๋ฐ์ดํฐ ์ํ ์ ๋ณด๋ฅผ ์ ์งํ์ง ์๋๋ค.
- ์ด๋ ๋งค ํ์ด์ง๋ฅผ ์ด๋ํ ๋๋ง๋ค ๋ก๊ทธ์ธ์ ๋ค์ ํ๊ฑฐ๋ ์ํ์ ์ ํํ๋๋ฐ ๊ตฌ๋งค ํ์ด์ง์๋ ์ ํํ ์ํ์ ์ ๋ณด๊ฐ ์๋ ๊ฒ์ ๋ปํ๋ค.
- ๋ฐ๋ผ์ ์น ์๋ฒ๊ฐ ์ฌ์ฉ์์ ์ํ ์ ๋ณด๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ํด ์ฟ ํค์ ์ธ์
์ ์ฌ์ฉํ๋ค.
Cookie
- ์ฟ ํค๋ ์ธ์
์ ๋นํด ๋ณด์์ ์ธ ์ธก๋ฉด์์ ์ข์ง ์๋ค.
- ์๋ฒ์ ์ ์ฅ๋์ง ์๊ณ ๋ธ๋ผ์ฐ์ (์ฌ์ฉ์์ ์ปดํจํฐ)์ ์ ์ฅ๋๊ธฐ์ ์๋ฒ ์์์ ๋ญ๋น๋ฅผ ๋ฐฉ์งํ ์ ์์ผ๋ฉฐ ๋น ๋ฅด๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ ์ข
๋ฃ๋์ด๋ ์ฟ ํค์ ์ค์ ํ ๋ง๋ฃ ์๊ฐ์ด ์ง๋์ง ์์ผ๋ฉด ์๋์ผ๋ก ์ญ์ ๋์ง ์๋๋ค.
- ์ฟ ํค๋ ๋ณด์์ด ์ค์ํ์ง ์๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ์ข
๋ฃ๋์ด๋ ์ ์งํ ์ ์๋ ์ ๋ณด์ ์ฌ์ฉ๋๋ค.
- ํ์ฉ ์: ์ฃผ๋ก ํ์
์ฐฝ "์ค๋ ๋ค์๋ ๋ณด์ง ์๊ธฐ" ๋ก๊ทธ์ธ์ "id ๊ธฐ์ตํ๊ธฐ" ์ฒดํฌ, ๋น๋ก๊ทธ์ธ์ ์ฅ๋ฐ๊ตฌ๋ ๋ฃ๊ธฐ
Session
- ํด๋ผ์ด์ธํธ์์ ๊ด๋ฆฌํ๋ ์ฟ ํค์ ๋นํด์ ์๋ฒ์ ์ ์ฅํ๋ ์ธ์
์ ๋ณด์์ด ์ข๋ค.
- ์๋ฒ ์์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ๋ง์ ๊ฒฝ์ฐ ์์์ ๋ง์ด ์๋ชจํ ์ ์๋ค.
- ์ธ์
์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ข
๋ฃ๋๋ฉด ์๋์ผ๋ก ์ญ์ ๋๋ค. (๋ง๋ฃ๊ธฐ๊ฐ ์ค์ ๊ฐ๋ฅ)
- ์ธ์
์ ์ฃผ๋ก ๋ณด์์ด ์ค์ํ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์ ์งํ๋๋ฐ ์ฌ์ฉํ๋ค.
Session vs Token
์ธ์
๊ธฐ๋ฐ ์ธ์ฆ
- ์ ์ ๊ฐ ๋ก๊ทธ์ธ์ ํ๋ค.
- ๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ๋ฉด ์๋ฒ๋ ๋ฉ๋ชจ๋ฆฌ๋ DB์ ์ธ์
์ ์ ์ฅํ๊ณ , ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ(์น ๋ธ๋ผ์ฐ์ )์ ์ธ์
ID๋ฅผ ์ ์กํ์ฌ ์ฟ ํค(Cookie)์ ์ ์ฅํ๋ค.
- ๋ธ๋ผ์ฐ์ ๋ ๋ก๊ทธ์ธ์ด ๋์๋์ง ํ์ธํ๊ธฐ ์ํด ๋งค ์์ฒญ์ Request์ Session ID๋ฅผ ์ฟ ํค์ ๋ด์ ์ ์กํ๋ค
- ์๋ฒ๋ Session ID๊ฐ ์ผ์นํ๋์ง ํ์ธํ ํ ์ผ์นํ๋ฉด ์์ฒญ์ ์๋ตํ๋ค.
์ธ์
๊ธฐ๋ฐ ์ธ์ฆ ์ฅ์
- ์๋ฒ ์ชฝ์์ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ์ ํ์ธ์ด ์ฝ๊ณ ๋ถ๋ช
ํ๋ค.
- ์๋ฒ ์ชฝ์์ ์ธ์
์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ๋ณ์กฐ์ ์ํฅ ๋ฐ๊ธฐ ์ด๋ ต๊ณ ๋ฐ์ดํฐ์ ์์ ์ฐ๋ ค๊ฐ ์์ด ์๋์ ์ผ๋ก ์์ ํ๋ค.
- ํ ํฐ ๋ฐฉ์์ Signature ๋ฑ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๊ฐ ์๊ธฐ์ Server-Clinet๊ฐ ์ฃผ๋ก ๋ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ ๋ค.
์ธ์
๊ธฐ๋ฐ ์ธ์ฆ ๋จ์
- ๋๊ท๋ชจ ์๋น์ค๋ก์ ์ค์ผ์ผ์
์ ์ํด์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ์ธ์
์ ๋ณด๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ์ฑ๋ฅ ๋ถํ๊ฐ ์์ ์ ์๋ค. Redis๋ Memcached ๋ฑ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์คํ
์ด ํ์ํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ์ธ์
์ ๋ณด๋ ํ๋ฐ์ฑ์ด๊ธฐ์ ์๋ฒ ์ฌ๋ถํ
์ ์ฌ๋ผ์ง ์ ์์ผ๋ฉฐ ๋ง์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋๋ฐ ํ๊ณ๊ฐ ์๋ค. ๊ทธ๋ ๋ค๊ณ ํ๋๋์คํฌ๋ DB์ ์ ์ฅํ๊ธฐ์๋ ์์
์ด ๋๋ฆฌ๊ณ ๋ฌด๊ฒ๋ค
- ์ฟ ํค๋ ๋จ์ผ ๋๋ฉ์ธ, ์๋ธ ๋๋ฉ์ธ์์๋ง ์๋ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๋๋ฉ์ธ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ด๋ฆฌ๋ฅผ ํด์ค์ผ ํ๋ค.
์ธ์
์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ์ ๋ถ๋ด์ด ์๋ค.
ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ (JWT - JSON Web Token)
- ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ ์ธ์ฆ๋ฐ์ ์ฌ์ฉ์๋ค์๊ฒ ํ ํฐ์ ๋ฐ๊ธํ๊ณ , ์๋ฒ์ ์์ฒญ์ ํ ๋ ํค๋์ ํ ํฐ์ ํจ๊ป ๋ณด๋ด ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ๋ฐฉ์์ด๋ค.
- ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ๋ฉด ์๋ฒ์ธก์์ ๊ณ์ ์ ๋ณด๋ฅผ ๊ฒ์ฆํ๋ค.
- ๊ฒ์ฆ์ด ์๋ฃ๋๋ฉด, ์๋ฒ์ธก์์ ํด๋ผ์ด์ธํธ์๊ฒ signed token์ ๋ฐ๊ธํ๊ณ ํด๋ผ์ด์ธํธ๋ ์ด๋ฅผ ์ ์ฅํ๋ค. (signed token์ ์ ์์ ์ผ๋ก ๋ฐ๊ธ๋ ํ ํฐ์์ ์ฆ๋ช
ํ๋ signature๊ฐ ์๋ค๋ ๊ฒ)
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์์ฒญ ์ ์ ์ฅ๋ Token์ Header์ ํฌํจ์์ผ ๋ณด๋ธ๋ค.
- ์๋ฒ๋ Token ์ ๋ณด๋ฅผ ๊ฒ์ฆํ๊ณ ํด๋น ์ ์ ์ ๊ถํ์ ์ธ๊ฐํ๋ค.
ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ์ฅ์
- ํด๋ผ์ด์ธํธ๊ฐ ํ ํฐ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ฅผ ์ค์ผ์ผ์
ํ๋๋ฐ ๋ถ๋ด์ด ์ ๋ค.
- ํด๋ผ์ด์ธํธ ์ธ์
๊ด๋ฆฌ์ ๋ํ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ ์ค์ผ ์ ์๋ค.
- ๋ค์ํ ๋๋ฉ์ธ์ ๋์ํ๋๋ฐ ๋ถ๋ด์ด ์ ๋ค.
ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ๋จ์
- ํ ํฐ ์ ๋ณด๊ฐ ํ์ทจ๋ ์๋ ์์ด๋ ๋ฌดํจํํ ์ ์๋ค. ๋ณด์์ ์ทจ์ฝํ๋ค.
- ํ ํฐ์ Signature ๋ฑ์ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๊ฐ ๋ด๊ฒจ ์๊ธฐ์ ์๋ฒ-ํด๋ผ์ด์ธํธ ๊ฐ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ธ์
๊ธฐ๋ฐ์ ์ธ์ฆ๋ณด๋ค ๋ง๋ค.
- ํ ํฐ ์ธ์ฆ์ ์ํด Database์์ ๋งค๋ฒ ์กฐํํด์ผ ํ๋ฏ๋ก DB ์ฑ๋ฅ ๋ถํ๊ฐ ์์ ์ ์๋ค.
๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ํํ๋ ์น ์๋ฒ์ ๊ฒฝ์ฐ ์ธ์
์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ๊น?
1. ์คํฐํค ์ธ์
(Sticky Session)
- ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ์ฟ ํค๊ฐ ์๋ ์์ฒญ์ด๋ผ๋ฉด ์ฟ ํค ๊ฐ์ ๋ฑ๋กํ๊ณ ์น์๋ฒ๋ฅผ ์ง์ ํ๋ค.
- ์ฟ ํค๊ฐ ์๋ค๋ฉด ํด๋น ์์ฒญ์ด ์ฟ ํค์ ์ง์ ๋ ์๋ฒ๋ก ๋ณด๋ธ๋ค.
๋จ์
- ๋ก๋๋ฐธ๋ฐ์ฑ์ด ์ ๋์ํ์ง ์์ ์ ์๋ค.
- ๊ณ ์ ๋ ์ธ์
์ ์ฌ์ฉํ๊ธฐ์ ํน์ ์๋ฒ๋ง ๊ณผ๋ถํ๊ฐ ์ฌ ์ ์๋ค.
- ํน์ ์๋ฒ Fail์ ํด๋น ์๋ฒ์ ๋ถ์ด ์๋ ์ธ์
๋ค์ด ์์ค๋ ์ ์๋ค.
2. ์ธ์
ํด๋ฌ์คํฐ๋ง (Session Clustering)
- ํด๋ฌ์คํฐ๋ง์ ์ฌ๋ฌ ๋์ ์ปดํจํฐ๋ค์ด ์ฐ๊ฒฐ๋์ด ํ๋์ ์์คํ
์ฒ๋ผ ๋์ํ๋๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
- ์ฆ, ๊ฐ ์๋ฒ์ ์ธ์
์ ๋ชจ๋ ์ธ์
์ ์ฅ์์ ์ธ์
๊ฐ์ฒด๋ฅผ ๋ณต์ ํ๋ค.
๋จ์
- ๋งค๋ฒ ์ธ์
๊ฐ์ฒด๋ฅผ ๋ณต์ ํ๋๋ฐ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
3. ์ธ์
์คํ ๋ฆฌ์ง ๋ถ๋ฆฌ (๋ณ๋์ ์ธ์
์ ์ฅ์ ์ฌ์ฉ - Redis, MongoDB, DynamoDB..)
- ๋ณ๋์ ์ธ์
์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ค. ์ธ์
์ ์ฅ์๊ฐ ํ๋์ด๊ธฐ์ ์ธ์
์ ์๋ฒ๊ฐ ๋ณต์ ๋ฅผ ํ ํ์๊ฐ ์๋ค.
- ์๋ฒ๊ฐ ์๋ฌด๋ฆฌ ๋์ด๋๋ค ํด๋ ์ธ์
์คํ ๋ฆฌ์ง์ ๋ํ ์ ๋ณด๋ง ๊ฐ๊ฐ์ ์๋ฒ์ ์
๋ ฅํด์ฃผ๋ฉด ์ธ์
์ ๊ณต์ ํ ์ ์๋ค. ๋ํ, ํธ๋ํฝ์ด ๋ชฐ๋ฆฌ๋ ํ์์ ๊ณ ๋ คํ์ง ์์๋ ๋๋ค.
- ํ๋์ ์๋ฒ๊ฐ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ๋ณ๋์ ์ธ์
์ ์ฅ์๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์๋น์ค๋ฅผ ๊ณ์ ์ ๊ณตํ ์ ์๋ค. (๊ฐ์ฉ์ฑ ํ๋ณด)