-
[Server] ์ฟ ํค(Cookie) / ์ธ์ (Session) / ํ ํฐ(Token) ์ธ์ฆ ๋ฐฉ์์ด๋?๐ปProgramming/Server 2023. 10. 9. 22:29
๐ Cookie / Session / Token ์ธ์ฆ ๋ฐฉ์์ ์ข ๋ฅ
- ์ผ๋ฐ์ ์ผ๋ก ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ๊ถํ์ ํ์ธํ๋ ๋ฐฉ์์ ๋ํ์ ์ผ๋ก ์ฟ ํค, ์ธ์ , ํ ํฐ์ 3๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
๐ Cookie
- ์ฟ ํค๋ Key - Value ํ์์ ๋ฌธ์์ด ๋ฉ์ด๋ฆฌ์ด๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ ํ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ, ๊ทธ ์ฌ์ดํธ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์๋ฒ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ ์ ์ค์น๋๋ ์์ ๊ธฐ๋ก ์ ๋ณด ํ์ผ์ด๋ค. ๊ฐ ์ฌ์ฉ์๋ง๋ค์ ๋ธ๋ผ์ฐ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณ ์ ์ ๋ณด ์๋ณ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
๐Cookie ์ธ์ฆ ๋์ ๊ณผ์
1. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ธ๋ค.
2. ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํ ์๋ต์ ์์ฑํ ๋ ํด๋ผ์ด์ธํธ์ ์ ์ฅํ์ผ๋ฉด ํ๋ ์ ๋ณด๋ฅผ ๋ด์ ์ฟ ํค ์์ฑ
3. ์์ฑํ ์ฟ ํค๋ฅผ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํ ์๋ต์ ๋ด์ ๋ณด๋ธ๋ค.
4. ํด๋ผ์ด์ธํธ์ ์ฟ ํค๊ฐ ์ ์ฅ๋๊ณ , ๋ก์ปฌ PC์ ์ ์ฅํ๋ค๊ฐ ๋ค์ ์๋ฒ์๊ฒ ์์ฒญ์ ๋ณด๋ผ ๋ ํจ๊ป ํค๋์ ๋ด์์ ๋ณด๋ธ๋ค.
5. ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ํ๋ฉฐ ๋ด์ ๋ณด๋ธ ์ฟ ํค์ ๋ด๊ธด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ํด๋น ์์ฒญ์ ํด๋ผ์ด์ธํธ๊ฐ ๋๊ตฌ์ธ์ง ์๋ณํ๋ค.
๐Cookie ์ธ์ฆ ๋ฐฉ์์ ๋จ์
- ๋ณด์์ ์ทจ์ฝํ๋ค.
- ์์ฒญ ์ ์ฟ ํค์ ๊ฐ์ ๊ทธ๋๋ก ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ์ ์ถ์ด๋ ์กฐ์์ ์ํ์ด ์กด์ฌํ๋ค.
- ์ฟ ํค์๋ ์ฉ๋ ์ ํ(ํ๋์ ์ฟ ํค๋ 4kb๊น์ง ์ ์ฅ์ด ๊ฐ๋ฅ)์ด ์์ด ๋ง์ ์ ๋ณด๋ฅผ ๋ด์ ์ ์๋ค.
- ์น ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ฟ ํค์ ๋ํ ์ง์ ํํ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ณต์ ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- ์ฟ ํค์ ์ฌ์ด์ฆ๊ฐ ์ปค์ง์๋ก ๋คํธ์ํฌ์ ๋ถํ๊ฐ ์ฌํด์ง๋ค.
๐ Cookie vs Session
๐ Session
- ์ด๋ฌํ ์ฟ ํค์ ๋ณด์์ ์ธ ๋ฌธ์ ๋๋ฌธ์, ์ธ์ ์ ๋น๋ฐ๋ฒํธ์ ๊ฐ์ ํด๋ผ์ด์ธํธ์ ๋ฏผ๊ฐํ ์ธ์ฆ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๊ฐ ์๋ "์๋ฒ" ์ธก์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ค.
- ์ผ์ ์๊ฐ๋์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ค์ด์ค๋ ์ผ๋ จ์ ์๊ตฌ๋ฅผ ํ๋์ ์ํ๋ก ๋ณด๊ณ , ๊ทธ ์ํ๋ฅผ ์ผ์ ํ๊ฒ ์ ์ง์ํค๋ ๊ธฐ์ ์ด๋ค.
- ์ฌ๊ธฐ์ ์ผ์ ์๊ฐ์ ๋ฐฉ๋ฌธ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด์ ์๋ฒ์ ์ ์ํ ์์ ๋ถํฐ, ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํ์ฌ ์ฐ๊ฒฐ์ ๋๋ด๋ ์์ ์ ๋งํ๋ค. → ๋ฐฉ๋ฌธ์๊ฐ ์น ์๋ฒ์ ์ ์ํด ์๋ ์ํ๋ฅผ ํ๋์ "๋จ์"๋ก ๋ณด๊ณ , ๊ทธ๊ฒ์ ์ธ์ ์ด๋ผ๊ณ ํ๋ค.
- ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ๋ ํ๊ณ , ์๋ฒ์ ๋ก์ปฌ ํ์ผ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ธฐ๋ ํ๋ค.
- ์ค์ํ ๊ฒ์ ์ค์ํ ์ ๋ณด๋ ํด๋ผ์ด์ธํธ์ ๋ณด๋ด์ง ์๊ณ ์๋ฒ์์ ๋ชจ๋ ๊ด๋ฆฌํ๋ค๋ ์ ์ด๋ค.
๐Session ์ธ์ฆ ๋ฐฉ์ ๋์ ๊ณผ์
1. ์ ์ ๊ฐ ์น์ฌ์ดํธ์์ ๋ก๊ทธ์ธ ํ๋ฉด ์ธ์ ์ด ์๋ฒ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ฅ๋๋ค.
2. ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ง๋ค ๊ฐ๋ณ Session ID๋ฅผ ๋ถ์ฌํ๋ค.
3. Session ID๋ฅผ ๋ธ๋ผ์ฐ์ ์ฟ ํค์ ๋ด์ ์๋ต์ ์ ์กํ๋ค.
4. ํด๋ผ์ด์ธํธ๋ ์์ฒญํ ๋๋ง๋ค ์ฟ ํค์ Session ID๋ฅผ ๋ด์ ์ ์กํ๋ค.
5. ์๋ฒ๋ Session ID๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ DB์ ์๋์ง ํ์ธํ๊ณ , ์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ๋ํ ์ธ์ฆ์ ์ํํ๋ค.
๐Session ์ธ์ฆ ๋ฐฉ์์ ๋จ์
- ์ฟ ํค๋ฅผ ํฌํจํ ์์ฒญ์ด ์ธ๋ถ์ ๋ ธ์ถ๋๋๋ผ๋ Session ID ์์ฒด๊ฐ ์ ์๋ฏธํ ๊ฐ์ธ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ง ์๋๋ค. ๊ทธ๋ฌ๋ Session ID๋ฅผ ํ์ทจํ์ฌ ํด๋ผ์ด์ธํธ์ธ์ฒ ํ ์ ์๋ค.(์ด ๋ฌธ์ ๋ ์๋ฒ์์ IP๋ฅผ ํน์ ํ์ฌ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์ด๊ธด ํ๋ค.)
- ์๋ฒ์์ ์ธ์ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์์ฒญ์ด ๋ง์์ง๋ฉด ์๋ฒ์ ๋ถํ๊ฐ ์ฌํด์ง๋ค.
๐ Token
- ํ ํฐ์ด๋? - ์ธ์ฆ์ ์ํด ์ฌ์ฉ๋๋ ์ํธํ๋ ๋ฌธ์์ด
- ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ ์์ ํ๋ฉด ์๋ฒ์์ ํด๋น ํด๋ผ์ด์ธํธ์๊ฒ ์ธ์ฆ๋์๋ค๋ ์๋ฏธ๋ก "ํ ํฐ"์ ๋ถ์ฌํ๋ค. ์ด ํ ํฐ์ "์ ์ผ"ํ๋ฉฐ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ๋ ๋ ๋ค์ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋ ํค๋์ ํ ํฐ์ ์ฌ์ด ๋ณด๋ด๊ณ , ์๋ฒ์์๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ ํ ํฐ์ ์๋ฒ์์ ์ ๊ณตํ ํ ํฐ์ด ๋ง๋์ง ํ์ธํ๊ณ , ์ธ์ฆ ๊ณผ์ ์ ์ฒ๋ฆฌํ๋ค.
- ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ์ ์๋ฒ๊ฐ DB๋ ๋ฉ๋ชจ๋ฆฌ์ ์ธ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์์ด์ผ ํ๊ณ , ์ด๊ฑธ ์กฐํํ๋๋ฐ ๊ต์ฅ์ด ๋ง์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค. ํ์ง๋ง ํ ํฐ์ ์ธ์ ๊ณผ ๋ฌ๋ฆฌ ์๋ฒ๊ฐ ์๋๋ผ "ํด๋ผ์ด์ธํธ์ ์ ์ฅ"๋๋ฏ๋ก DB๋ ๋ฉ๋ชจ๋ฆฌ์ ์ธ์ ์ ๊ด๋ฆฌํ๋ ์๋ฒ์ ๋ถ๋ด์ ๋ ์ ์๋ค. ํ ํฐ ์์ฒด์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ ์์กฐ๋์๋์ง ํ๋ณ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ.
- ํ ํฐ์ด ์ธ์ฆ์ ์ํด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ด์ : ์น์๋ ์ฟ ํค์ ์ธ์ ์ด ์์ง๋ง, ์ฑ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๐Token ์ธ์ฆ ๋ฐฉ์ ๋์ ๊ณผ์
1. ์ ์ ๊ฐ ๋ก๊ทธ์ธ์ ํ๋ค.
2. ์๋ฒ์์ ์ ์ ๊ฐ ๋ง๋์ง ํ์ธํ๊ณ , ์ธ์ฆ์ด ์๋ฃ ๋์๋ค๋ฉด ํด๋ผ์ด์ธํธ์๊ฒ "์ ์ผํ ํ ํฐ"์ ๋ฐ๊ธํ๋ค.
3. ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ์ค ํ ํฐ์ ์ฟ ํค ํน์ ์คํ ๋ฆฌ์ง์ ์ ์ฅํด๋๊ณ , ์๋ฒ์ ์์ฒญ์ ํ ๋๋ง๋ค ํด๋น ํ ํฐ์ ์๋ฒ HTTP ์์ฒญ ํค๋์ ํฌํจ์์ผ ์ ๋ฌํ๋ค.
4. ์๋ฒ๋ ์ ๋ฌ๋ฐ์ ํ ํฐ์ ๊ฒ์ฆํ๊ณ ์์ฒญ์ ์๋ตํ๋ค. ํ ํฐ ์์ฒด์ ์์ฒญํ ์ฌ๋์ ์ ๋ณด๊ฐ ์ธ์ฝ๋ฉ๋์ด ๋ด๊ฒจ์์ด ์๋ฒ๋ DB๋ฅผ ์กฐํํ์ง ์๊ณ ๋๊ฐ ์์ฒญํ๋์ง ์ ์ ์๋ค.
๐Token ๋ฐฉ์์ ๋จ์
1. ์ฟ ํค์ ์ธ์ ๊ณผ ๋ค๋ฅด๊ฒ ํ ํฐ ์์ฒด์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ํฌ๊ธฐ ๋๋ฌธ์, ์ธ์ฆ ์์ฒญ์ด ๋ง์์ง์๋ก ๋คํธ์ํฌ์ ๋ถํ๊ฐ ์ฌํด์ง๋ค.
2. Payload ์์ฒด๋ ์ํธํ ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ ์ ์ค์ํ ์ ๋ณด๋ ๋ด์ ์ ์๋ค. (jwt ๋์ฝ๋ฉ ํ๋ ์ฌ์ดํธ ๋ค์ด๊ฐ๋ณด๋ฉด ๋ค ๋์จ๋ค. ์ ๋๋ก ์ค์ํ ์ ๋ณด๋ ๋ด์ผ๋ฉด ์๋๋ค. ex. ๋น๋ฐ๋ฒํธ, ์ฌ์ฉ์ ์ ๋ณด ...)
* JWT(Json Web Token)๋ ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ค์ ์ํธํ์ํจ JSON ํ ํฐ์ ์๋ฏธํ๋ค.
3. ํ ํฐ์ ํ์ทจ๋นํ๋ฉด ๋์ฒํ๊ธฐ ์ด๋ ต๋ค. (๋ฐ๋ผ์ ๋ง๋ฃ ๊ธฐ๊ฐ์ ์งง๊ฒ ์ ํํ๋ ์์ผ๋ก ๊ทน๋ณตํ๋ค.)
Token ์ธ์ฆ ๋ฐฉ์์์ ์ฌ์ฉ๋๋ ํ ํฐ์ธ JWT์ ๋ํด์ ์ ๋ฆฌํด๋์ ๊ธ์ด๋ค. JWT๋ ํ ํฐ ์ธ์ฆ ๋ฐฉ์์ ์ดํดํ๊ธฐ ์ํด ๊ผญ ํ์ํ ๊ฐ๋ ์ด๋ฏ๋ก ์์งํ๋ ๊ฒ์ด ์ข๋ค.
https://suucong.tistory.com/28
๐ Session vs Token
๐Session
- ์๋ฒ์ธก์์ ์ฌ์ฉ์์ ์ธ์ฆ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์, ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์ผ๋ฉด ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๊ณ์ํด์ ์ ์งํ๋ฉฐ ์ฌ์ฉํด์ผํ๋ค. → Stateful
- ์ด๋ ์ฌ์ฉ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ์ ์ฑ๋ฅ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๊ณ , ํ์ฅ์ฑ์ด ์ด๋ ต๋ค๋ ๋จ์ ์ด ์๋ค.
๐Token
- Session ๊ธฐ๋ฐ ์ธ์ฆ์ ๋จ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ฑ์ฅํ์๋ค. ์ธ์ฆ๋ฐ์ ์ฌ์ฉ์์๊ฒ ํ ํฐ์ ๋ฐ๊ธํ๊ณ , ๋ก๊ทธ์ธ์ด ํ์ํ ์์ ์ผ ๊ฒฝ์ฐ์ ํค๋์ ํ ํฐ์ ํจ๊ป ๋ณด๋ด์ ์ธ์ฆ๋ฐ์ ์ฌ์ฉ์์ธ์ง ํ์ธํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ํ ํฐ์ ๋ด์์ ๋ณด๋ผ ๋๋ง ํ ํฐ์ ํ์ธํ์ฌ๊ฒ์ฆํ๊ณ ๋ฐ๋ก ์๋ต์ ๋ณด๋ด์ฃผ๊ธฐ ๋๋ฌธ์ ์ํ๋ฅผ ์ ์งํ ํ์๊ฐ ์๋ค๋ ์ฅ์ ์ด ์๋ค. → Stateless
๐ References
'๐ปProgramming > Server' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ