๐Ÿ’กCookie, Session, Token์„ ํ•™์Šตํ•ด ๋ณด์ž

-ยท2022๋…„ 1์›” 14์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
4/12

Cookie, Session, Token

Backgrounds

์ธ์ฆ(Authentication)

  • ์œ ์ €๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ, ํšŒ์›๊ฐ€์ž…ํ•˜๊ณ  ๋กœ๊ทธ์ธ ํ•˜๋Š” ๊ฒƒ

์ธ๊ฐ€(Authorization)

  • ์œ ์ €์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ํ—ˆ๋ฝํ•˜๋Š” ๊ฒƒ

Cookie์™€ Session์ด ํ•„์š”ํ•œ ์ด์œ 

  • HTTP ํ”„๋กœํ† ์ฝœ์€ ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless), ๋ฌด์ƒํƒœ์„ฑ(Stateless)์„ ์ง€ํ–ฅํ•œ๋‹ค. ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ํ†ต์‹ ์ด ์ข…๋ฃŒ๋œ ํ›„ ์—ฐ๊ฒฐ์„ ๋Š๊ณ  ๋ฐ์ดํ„ฐ ์ƒํƒœ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ด๋Š” ๋งค ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ๋กœ๊ทธ์ธ์„ ๋‹ค์‹œ ํ•˜๊ฑฐ๋‚˜ ์ƒํ’ˆ์„ ์„ ํƒํ–ˆ๋Š”๋ฐ ๊ตฌ๋งค ํŽ˜์ด์ง€์—๋Š” ์„ ํƒํ•œ ์ƒํ’ˆ์˜ ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์›น ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•ด ์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ฟ ํ‚ค๋Š” ์„ธ์…˜์— ๋น„ํ•ด ๋ณด์•ˆ์ ์ธ ์ธก๋ฉด์—์„œ ์ข‹์ง€ ์•Š๋‹ค.
  • ์„œ๋ฒ„์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ๋ธŒ๋ผ์šฐ์ €(์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ)์— ์ €์žฅ๋˜๊ธฐ์— ์„œ๋ฒ„ ์ž์›์˜ ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋น ๋ฅด๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ์ฟ ํ‚ค์— ์„ค์ •ํ•œ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์ด ์ง€๋‚˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ฟ ํ‚ค๋Š” ๋ณด์•ˆ์ด ์ค‘์š”ํ•˜์ง€ ์•Š๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด์— ์‚ฌ์šฉ๋œ๋‹ค.
  • ํ™œ์šฉ ์˜ˆ: ์ฃผ๋กœ ํŒ์—…์ฐฝ "์˜ค๋Š˜ ๋‹ค์‹œ๋Š” ๋ณด์ง€ ์•Š๊ธฐ" ๋กœ๊ทธ์ธ์‹œ "id ๊ธฐ์–ตํ•˜๊ธฐ" ์ฒดํฌ, ๋น„๋กœ๊ทธ์ธ์‹œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋„ฃ๊ธฐ

Session

  • ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ฟ ํ‚ค์— ๋น„ํ•ด์„œ ์„œ๋ฒ„์— ์ €์žฅํ•˜๋Š” ์„ธ์…˜์€ ๋ณด์•ˆ์ด ์ข‹๋‹ค.
  • ์„œ๋ฒ„ ์ž์›์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ์ž์›์„ ๋งŽ์ด ์†Œ๋ชจํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„ธ์…˜์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ž๋™์œผ๋กœ ์‚ญ์ œ๋œ๋‹ค. (๋งŒ๋ฃŒ๊ธฐ๊ฐ„ ์„ค์ • ๊ฐ€๋Šฅ)
  • ์„ธ์…˜์€ ์ฃผ๋กœ ๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

Session vs Token

์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ

    1. ์œ ์ €๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค.
    1. ๋กœ๊ทธ์ธ์ด ์„ฑ๊ณตํ•˜๋ฉด ์„œ๋ฒ„๋Š” ๋ฉ”๋ชจ๋ฆฌ๋‚˜ DB์— ์„ธ์…˜์„ ์ €์žฅํ•˜๊ณ , ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ(์›น ๋ธŒ๋ผ์šฐ์ €)์— ์„ธ์…˜ ID๋ฅผ ์ „์†กํ•˜์—ฌ ์ฟ ํ‚ค(Cookie)์— ์ €์žฅํ•œ๋‹ค.
    1. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋กœ๊ทธ์ธ์ด ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋งค ์š”์ฒญ์‹œ Request์— Session ID๋ฅผ ์ฟ ํ‚ค์— ๋‹ด์•„ ์ „์†กํ•œ๋‹ค
    1. ์„œ๋ฒ„๋Š” Session ID๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ ํ›„ ์ผ์น˜ํ•˜๋ฉด ์š”์ฒญ์— ์‘๋‹ตํ•œ๋‹ค.

์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์žฅ์ 

  • ์„œ๋ฒ„ ์ชฝ์—์„œ ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ƒํƒœ์— ํ™•์ธ์ด ์‰ฝ๊ณ  ๋ถ„๋ช…ํ•˜๋‹ค.
  • ์„œ๋ฒ„ ์ชฝ์—์„œ ์„ธ์…˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ์˜ ๋ณ€์กฐ์— ์˜ํ–ฅ ๋ฐ›๊ธฐ ์–ด๋ ต๊ณ  ๋ฐ์ดํ„ฐ์˜ ์†์ƒ ์šฐ๋ ค๊ฐ€ ์—†์–ด ์ƒ๋Œ€์ ์œผ๋กœ ์•ˆ์ „ํ•˜๋‹ค.
  • ํ† ํฐ ๋ฐฉ์‹์— Signature ๋“ฑ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๊ฐ€ ์—†๊ธฐ์— Server-Clinet๊ฐ„ ์ฃผ๋กœ ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ ๋‹ค.

์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋‹จ์ 

  • ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค๋กœ์˜ ์Šค์ผ€์ผ์—…์„ ์œ„ํ•ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋Š” ์„ธ์…˜ ์ •๋ณด๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ์„ฑ๋Šฅ ๋ถ€ํ•˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. Redis๋‚˜ Memcached ๋“ฑ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•˜๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ์„ธ์…˜ ์ •๋ณด๋Š” ํœ˜๋ฐœ์„ฑ์ด๊ธฐ์— ์„œ๋ฒ„ ์žฌ๋ถ€ํŒ…์‹œ ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋งŽ์€ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ํ•˜๋“œ๋””์Šคํฌ๋‚˜ DB์— ์ €์žฅํ•˜๊ธฐ์—๋Š” ์ž‘์—…์ด ๋Š๋ฆฌ๊ณ  ๋ฌด๊ฒ๋‹ค
  • ์ฟ ํ‚ค๋Š” ๋‹จ์ผ ๋„๋ฉ”์ธ, ์„œ๋ธŒ ๋„๋ฉ”์ธ์—์„œ๋งŒ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
    ์„ธ์…˜ ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ธฐ์— ๋ถ€๋‹ด์ด ์žˆ๋‹ค.

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ (JWT - JSON Web Token)

    1. ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์€ ์ธ์ฆ๋ฐ›์€ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๊ณ , ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•  ๋•Œ ํ—ค๋”์— ํ† ํฐ์„ ํ•จ๊ป˜ ๋ณด๋‚ด ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
    1. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด ์„œ๋ฒ„์ธก์—์„œ ๊ณ„์ • ์ •๋ณด๋ฅผ ๊ฒ€์ฆํ•œ๋‹ค.
    1. ๊ฒ€์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด, ์„œ๋ฒ„์ธก์—์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ signed token์„ ๋ฐœ๊ธ‰ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋ฅผ ์ €์žฅํ•œ๋‹ค. (signed token์€ ์ •์ƒ์ ์œผ๋กœ ๋ฐœ๊ธ‰๋œ ํ† ํฐ์ž„์„ ์ฆ๋ช…ํ•˜๋Š” signature๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ)
    1. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ ์‹œ ์ €์žฅ๋œ Token์„ Header์— ํฌํ•จ์‹œ์ผœ ๋ณด๋‚ธ๋‹ค.
    1. ์„œ๋ฒ„๋Š” Token ์ •๋ณด๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ํ•ด๋‹น ์œ ์ €์— ๊ถŒํ•œ์„ ์ธ๊ฐ€ํ•œ๋‹ค.

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์žฅ์ 

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ† ํฐ ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋ฅผ ์Šค์ผ€์ผ์—…ํ•˜๋Š”๋ฐ ๋ถ€๋‹ด์ด ์ ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ์„ธ์…˜ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋‹ด์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ ๋„๋ฉ”์ธ์— ๋Œ€์‘ํ•˜๋Š”๋ฐ ๋ถ€๋‹ด์ด ์ ๋‹ค.

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋‹จ์ 

  • ํ† ํฐ ์ •๋ณด๊ฐ€ ํƒˆ์ทจ๋  ์ˆ˜๋„ ์žˆ์–ด๋„ ๋ฌดํšจํ™”ํ•  ์ˆ˜ ์—†๋‹ค. ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๋‹ค.
  • ํ† ํฐ์— Signature ๋“ฑ์˜ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ ์žˆ๊ธฐ์— ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์„ธ์…˜ ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ๋ณด๋‹ค ๋งŽ๋‹ค.
  • ํ† ํฐ ์ธ์ฆ์„ ์œ„ํ•ด Database์—์„œ ๋งค๋ฒˆ ์กฐํšŒํ•ด์•ผ ํ•˜๋ฏ€๋กœ DB ์„ฑ๋Šฅ ๋ถ€ํ•˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์›น ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ์„ธ์…˜์„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ• ๊นŒ?

1. ์Šคํ‹ฐํ‚ค ์„ธ์…˜ (Sticky Session)

  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์ฟ ํ‚ค๊ฐ€ ์—†๋Š” ์š”์ฒญ์ด๋ผ๋ฉด ์ฟ ํ‚ค ๊ฐ’์„ ๋“ฑ๋กํ•˜๊ณ  ์›น์„œ๋ฒ„๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • ์ฟ ํ‚ค๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์š”์ฒญ์ด ์ฟ ํ‚ค์— ์ง€์ •๋œ ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ๋‹ค.

๋‹จ์ 

  • ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์ด ์ž˜ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ณ ์ •๋œ ์„ธ์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ์— ํŠน์ • ์„œ๋ฒ„๋งŒ ๊ณผ๋ถ€ํ•˜๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ํŠน์ • ์„œ๋ฒ„ Fail์‹œ ํ•ด๋‹น ์„œ๋ฒ„์— ๋ถ™์–ด ์žˆ๋Š” ์„ธ์…˜๋“ค์ด ์†Œ์‹ค๋  ์ˆ˜ ์žˆ๋‹ค.

2. ์„ธ์…˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง (Session Clustering)

  • ํด๋Ÿฌ์Šคํ„ฐ๋ง์€ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์ปดํ“จํ„ฐ๋“ค์ด ์—ฐ๊ฒฐ๋˜์–ด ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ฆ‰, ๊ฐ ์„œ๋ฒ„์˜ ์„ธ์…˜์— ๋ชจ๋“  ์„ธ์…˜ ์ €์žฅ์†Œ์˜ ์„ธ์…˜ ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•œ๋‹ค.

๋‹จ์ 

  • ๋งค๋ฒˆ ์„ธ์…˜ ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•˜๋Š”๋ฐ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

3. ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€ ๋ถ„๋ฆฌ (๋ณ„๋„์˜ ์„ธ์…˜ ์ €์žฅ์†Œ ์‚ฌ์šฉ - Redis, MongoDB, DynamoDB..)

  • ๋ณ„๋„์˜ ์„ธ์…˜ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์„ธ์…˜ ์ €์žฅ์†Œ๊ฐ€ ํ•˜๋‚˜์ด๊ธฐ์— ์„ธ์…˜์„ ์„œ๋ฒ„๊ฐ„ ๋ณต์ œ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ์„œ๋ฒ„๊ฐ€ ์•„๋ฌด๋ฆฌ ๋Š˜์–ด๋‚œ๋‹ค ํ•ด๋„ ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋งŒ ๊ฐ๊ฐ์˜ ์„œ๋ฒ„์— ์ž…๋ ฅํ•ด์ฃผ๋ฉด ์„ธ์…˜์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋Š” ํ˜„์ƒ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • ํ•˜๋‚˜์˜ ์„œ๋ฒ„๊ฐ€ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋ณ„๋„์˜ ์„ธ์…˜ ์ €์žฅ์†Œ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค๋ฅผ ๊ณ„์† ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. (๊ฐ€์šฉ์„ฑ ํ™•๋ณด)
profile
-์˜ Velog

0๊ฐœ์˜ ๋Œ“๊ธ€