Skip to content

๐Ÿ”‘ ๋กœ๊ทธ์ธ ๋ฐฉ์‹ย #38

@mandoo1229

Description

@mandoo1229

Cookie / Session / Token ์ธ์ฆ ๋ฐฉ์‹ ์ข…๋ฅ˜

  • ๋ณดํ†ต ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์€ ์ฟ ํ‚ค, ์„ธ์…˜, ํ† ํฐ 3๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

๐Ÿช Cookie ์ธ์ฆ

์ฟ ํ‚ค๋Š” Key-Value ํ˜•์‹์˜ ๋ฌธ์ž์—ด ๋ฉ์–ด๋ฆฌ์ด๋‹ค.
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋– ํ•œ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•  ๊ฒฝ์šฐ, ๊ทธ ์‚ฌ์ดํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ €์— ์„ค์น˜๋˜๋Š” ์ž‘์€ ๊ธฐ๋ก์ •๋ณด ํŒŒ์ผ์ด๋‹ค. ๊ฐ ์‚ฌ์šฉ์ž๋งˆ๋‹ค์˜ ๋ธŒ๋ผ์šฐ์ €์— ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋‹ˆ ์ •๋ณด ์‹๋ณ„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿช Cookie ์ธ์ฆ ๋ฐฉ์‹

  • ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ)๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ(์ ‘์†)์„ ๋ณด๋‚ธ๋‹ค.
  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ž‘์„ฑํ•  ๋•Œ, ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ €์žฅํ•˜๊ณ  ์‹ถ์€ ์ •๋ณด๋ฅผ ์‘๋‹ต ํ—ค๋”์˜ Set-Cookie์— ๋‹ด๋Š”๋‹ค.
  • ์ดํ›„ ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค, ๋งค๋ฒˆ ์ €์žฅ๋œ ์ฟ ํ‚ค๋ฅผ ์š”์ฒญ ํ—ค๋”์˜ Cookie์— ๋‹ด์•„ ๋ณด๋‚ธ๋‹ค.
  • ์„œ๋ฒ„๋Š” ์ฟ ํ‚ค์— ๋‹ด๊ธด ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•ด๋‹น ์š”์ฒญ์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ˆ„๊ตฐ์ง€ ์‹๋ณ„ํ•˜๊ฑฐ๋‚˜ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ถ”์ฒœ ๊ด‘๊ณ ๋ฅผ ๋„์šฐ๊ฑฐ๋‚˜ ํ•œ๋‹ค.

๐Ÿช Cookie ๋ฐฉ์‹์˜ ๋‹จ์ 

  • ๊ฐ•์žฅ ํฐ ๋‹จ์ ์€์€ ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๋‹ค. ์š”์ฒญ์‹œ ์ฟ ํ‚ค์˜ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ถœ ๋ฐ ์กฐ์ž‘ ๋‹นํ•  ์œ„ํ—˜์ด ์กด์žฌํ•œ๋‹ค.
  • ์ฟ ํ‚ค์—๋Š” ์šฉ๋Ÿ‰์ œํ•œ์ด ์žˆ์–ด ๋งŽ์€ ์ •๋ณด๋ฅผ ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.
  • ์›น ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์ฟ ํ‚ค์— ๋Œ€ํ•œ ์ง€์› ํ˜•ํƒœ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ„ ๊ณต์œ ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ฟ ํ‚ค์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋„คํŠธ์›Œํฌ์— ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•ด์ง„๋‹ค.

๐Ÿ”‘ Session์ธ์ฆ

์ด๋Ÿฌํ•œ ๋ณด์•ˆ์ ์ธ ์ด์Šˆ ๋•Œ๋ฌธ์—, ์„ธ์…˜์€ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ ํด๋ผ์ด์–ธํŠธ์˜ ๋ฏผ๊ฐํ•œ ์ธ์ฆ์ •๋ณด๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„ ์ธก์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ธฐ๋„ ํ•˜๊ณ , ์„œ๋ฒ„์˜ ๋กœ์ปฌ ํŒŒ์ผ์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด์ง€ ์•Š๊ณ  ์„œ๋ฒ„์—์„œ ๋ชจ๋‘ ๊ด€๋ฆฌํ•œ๋‹ค.

๐Ÿ”‘ Session ์ธ์ฆ ๋ฐฉ์‹

  • ์œ ์ €๊ฐ€ ์›น์‚ฌ์ดํŠธ์—์„œ ๋กœ๊ทธ์ธํ•˜๋ฉด ์„ธ์…˜์ด ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ(ํ˜น์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค) ์ƒ์— ์ €์žฅ๋œ๋‹ค. ์ด ๋•Œ, ์„ธ์…˜์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ Session id๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ์„œ๋ฒ„์—์„œ ๋ธŒ๋ผ์šฐ์ €์— ์ฟ ํ‚ค๊ฐ€์—๋‹ค๊ฐ€ Session id๋ฅผ ์ €์žฅํ•˜๋‚Ÿ.
  • ์ฟ ํ‚ค์— ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์ด ใ…†๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ๋ชจ๋“  Request์— Session id๋ฅผ ์ฟ ํ‚ค์— ๋‹ด์•„ ์ „์†กํ•œ๋‹ค.
  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ Session id์™€ ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์— ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š” Session id๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๐Ÿ”‘ Session ๊ฐ์ฒด๋Š” ์–ด๋–ค ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์„๊นŒ?

  • ์„ธ์…˜ ๊ฐ์ฒด๋Š” Key์— ํ•ด๋‹นํ•˜๋Š” Session ID์™€ ์ด์— ๋Œ€์‘ํ•˜๋Š” Value๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. value์—๋Š” ์„ธ์…˜ ์ƒ์„ฑ ์‹œ๊ฐ„, ๋งˆ์ง€๋ง‰ ์ ‘๊ทผ ์‹œ๊ฐ„ ๋ฐ User๊ฐ€ ์ €์žฅํ•œ ์†์„ฑ ๋“ฑ์ด Map ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค.

๐Ÿ”‘ Session ๋ฐฉ์‹์˜ ๋‹จ์ 

  • ์ฟ ํ‚ค๋ฅผ ํฌํ•จํ•œ ์š”์ฒญ์ด ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜๋”๋ผ๋„ ์„ธ์…˜ ID ์ž์ฒด๋Š” ์œ ์˜๋ฏธํ•œ ๊ฐœ์ธ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์ง€ ์•Š๋Š”๋‹ค.
  • ๊ทธ๋ž€ ํ•ด์ปค๊ฐ€ Session ID ์ž์ฒด๋ฅผ ํƒˆ์ทจํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์ธ์ฒ™ ์œ„์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  • ์„œ๋ฒ„์—์„œ Session ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์š”์ฒญ์ด ๋งŽ์•„์ง€๋ฉด ์„œ๋ฒ„์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค.

๐Ÿ”’ Token ์ธ์ฆ

ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ์‹œ์Šคํ…œ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ ‘์†์„ ํ•˜๋ฉด ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ธ์ฆ๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ๋กœ 'ํ† ํฐ'์„ ๋ถ€์—ฌํ•œ๋‹ค. ์ด ํ† ํฐ์€ ์œ ์ผํ•˜๋ฉฐ ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ๋Š” ๋˜ ๋‹ค์‹œ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ผ ๋Œ€ ์š”์ฒญ ํ—ค๋”์— ํ† ํฐ์„ ์‹ฌ์–ด์„œ ๋ณด๋‚ธ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์„œ๋ฒ„์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ํ† ํฐ์„ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•œ ํ† ํฐ๊ณผ์˜ ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜์—ฌ ์ธ์ฆ๊ณผ์ •์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.
๊ธฐ์กด์˜ Session ์ธ์ฆ์€ ์„œ๋ฒ„๊ฐ€ ํŒŒ์ผ์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์„ธ์…˜์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ณ  ์ด๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ํ•˜์ง€๋งŒ ํ† ํฐ์€ ์„ธ์…˜๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ์Šคํ† ๋ฆฌ์ง€ ๋“ฑ์„ ํ†ตํ•ด ์„ธ์…˜์„ ๊ด€๋ฆฌํ–ˆ๋˜ ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์„ ๋œ ์ˆ˜ ์žˆ๋‹ค. ํ† ํฐ ์ž์ฒด์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ›์•„ ์œ„์กฐ๋˜์—ˆ๋Š”์ง€ ํŒ๋ณ„๋งŒ ํ•˜๋ฉด ๋””๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
ํ† ํฐ์€ ์•ฑ๊ณผ ์„œ๋ฒ„๊ฐ€ ํ†ต์‹  ๋ฐ ์ธ์ฆํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. ์™œ๋‚˜ํ•˜๋ฉด ์›น์—๋Š” ์ฟ ํ‚ค์™€ ์„ธ์…˜์€ ์žˆ์ง€๋งŒ ์•ฑ์—๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ”’ ์„œ๋ฒ„๊ธฐ๋ฐ˜ vs ํ† ํฐ ๊ธฐ๋ฐ˜

์„œ๋ฒ„๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ (Session)

  • ์„œ๋ฒ„์˜ ์„ธ์…˜์„ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์„œ๋ฒ„์ธก์—์„œ ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ, ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๊ฒŒ์†ํ•ด์„œ ์œ ์ง€ํ•ด๋†“๊ณ  ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž์˜ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์˜ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์œผ๋‹ˆ ํ™•์žฅ์„ฑ์ด ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์„ ์ง€๋‹Œ๋‹ค.

ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ (Token)

  • ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ์‹œ์Šคํ…œ์ด ๋‚˜ํƒ€๋‚ฌ๋‹ค.
  • ์ธ์ฆ๋ฐ›์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๊ณ , ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•œ ์ž‘์—…์ผ ๊ฒฝ์šฐ ํ—ค๋”์— ํ† ํฐ์„ ํ•จ๊ป˜ ๋ณด๋‚ด ์ธ์ฆ๋ฐ›์€ ์‚ฌ์šฉ์ž์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
  • ์ด๋Š” ์„œ๋ฒ„๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ๊ณผ ๋‹ฌ๋ฆฌ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ Statelessํ•œ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๐Ÿ”’ Token ์ธ์ฆ ๋ฐฉ์‹

  • ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค.
  • ์„œ๋ฒ„์ธก์—์„œ ์‚ฌ์šฉ์ž(ํด๋ผ์ด์–ธํŠธ)์—๊ฒŒ ์œ ์ผํ•œ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์ธก์—์„œ ์ „๋‹ฌ๋ฐ›์€ ํ† ํฐ์„ Cookie or localStroage์— ์ €์žฅํ•ด ๋‘๊ณ , ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ํ† ํฐ์„ HTTP ์š”์ฒญ ํ—ค๋”์— ํฌํ•จ์‹œ์ผœ ์ „๋‹ฌํ•œ๋‹ค.
  • ์„œ๋ฒ„๋Š” ์ „๋‹ฌ๋ฐ›์€ ํ† ํฐ์„ ๊ฒ€์ฆํ•˜๊ณ  ์š”์ฒญ์— ์‘๋‹ตํ•œ๋‹ค. ํ† ํฐ์—๋Š” ์š”์ฒญํ•œ ์‚ฌ๋žŒ์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๊ธฐ์— ์„œ๋ฒ„๋Š” DB๋ฅผ ์กฐํšŒํ•˜์ง€ ์•Š๊ณ  ๋ˆ„๊ฐ€ ์š”์ฒญํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”’ Token ๋ฐฉ์‹์˜ ๋‹จ์ 

  • Cookie/Session๊ณผ ๋‹ค๋ฅด๊ฒŒ ํ† ํฐ ์ž์ฒด์˜ ๋ฐ์ดํ„ฐ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด, ์ธ์ฆ ์š”์ฒญ์ด ๋งŽ์•„์งˆ ์ˆ˜๋ก ๋„คํŠธ์›Œํฌ ๊ณผ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • Payload ์ž์ฒด๋Š” ์•”ํ˜ธํ™”๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €์˜ ์ค‘์š”ํ•œ ์ •๋ณด๋Š” ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.
  • ํ† ํฐ์„ ํƒˆ์ทจ๋‹นํ•˜๋ฉด ๋Œ€์ฒดํ•˜๊ธฐ ์–ด๋ ต๋‹ค. (๋”ฐ๋ผ์„œ ์‚ฌ์šฉ ๊ธฐ๊ฐ„ ์ œํ•œ์„ ์„ค์ •ํ•˜๋Š” ์‹์œผ๋กœ ๊ทน๋ณตํ•œ๋‹ค. )

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions