Cookie vs Web Storage

moon.kickยท2025๋…„ 4์›” 16์ผ

์ข‹์•„! ๐Ÿ” ์›น ๊ฐœ๋ฐœ์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” Web Storage์™€ Cookie๋Š”
๋ชจ๋‘ ๋ธŒ๋ผ์šฐ์ €์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ์ˆ ์ด์ง€๋งŒ,
์šฉ๋„์™€ ๋™์ž‘ ๋ฐฉ์‹์ด ์™„์ „ํžˆ ๋‹ฌ๋ผ!


ํ•ญ๋ชฉ๐Ÿช ์ฟ ํ‚ค (Cookie)๐Ÿ’พ ์›น ์Šคํ† ๋ฆฌ์ง€ (Web Storage)
๐Ÿ“ฆ ์ €์žฅ ์œ„์น˜๋ธŒ๋ผ์šฐ์ € (์ž‘์€ ํฌ๊ธฐ)๋ธŒ๋ผ์šฐ์ € (๋” ๋งŽ์€ ์šฉ๋Ÿ‰)
๐Ÿ” ์„œ๋ฒ„ ์ „์†กโœ… ๋งค HTTP ์š”์ฒญ๋งˆ๋‹ค ์ž๋™ ์ „์†กโŒ ์ „์†ก ์•ˆ ๋จ (ํด๋ผ์ด์–ธํŠธ ์ „์šฉ)
๐Ÿ“ ์ €์žฅ ์šฉ๋Ÿ‰์•ฝ 4KB ์ œํ•œ5~10MB ์ด์ƒ
๐Ÿ•’ ๋งŒ๋ฃŒ์‹œ๊ฐ„ ์„ค์ •โœ… ๊ฐ€๋Šฅ (์„ค์ • ์•ˆ ํ•˜๋ฉด ์„ธ์…˜ ์ฟ ํ‚ค)localStorage: ๋ฌด๊ธฐํ•œ
sessionStorage: ํƒญ ์ข…๋ฃŒ ์‹œ ์‚ญ์ œ
๐Ÿ” ๋ณด์•ˆ์„ฑ์ƒ๋Œ€์ ์œผ๋กœ ๋‚ฎ์Œ (์ „์†ก๋จ)์ƒ๋Œ€์ ์œผ๋กœ ๋†’์Œ (์ „์†ก ์•ˆ ๋จ)
๐Ÿ“‹ ์‚ฌ์šฉ ์šฉ๋„๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€, ์ถ”์ , ๊ด‘๊ณ , ์„ธ์…˜ ์œ ์ง€ํ”„๋ก ํŠธ์—์„œ ์‚ฌ์šฉ์ž ์„ค์ •, ํผ ์ž๋™์™„์„ฑ ๋“ฑ

  • ๋ธŒ๋ผ์šฐ์ € โ†’ ์„œ๋ฒ„๋กœ ์ž๋™์œผ๋กœ ์ „์†ก
  • ๋กœ๊ทธ์ธ ์ธ์ฆ ์„ธ์…˜, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ €์žฅ ๋“ฑ์— ๋งŽ์ด ์‚ฌ์šฉ
  • ๋ณดํ†ต ์„œ๋ฒ„์—์„œ ์‘๋‹ต ์‹œ Set-Cookie๋กœ ์„ค์ •ํ•จ
Set-Cookie: userId=1234; Expires=Wed, 17 Apr 2025 12:00:00 GMT; Path=/;
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜๋„ ์žˆ์Œ (๋‹จ, HttpOnly ์˜ต์…˜์ด ์—†์„ ๋•Œ)
document.cookie = "theme=dark";
console.log(document.cookie);

๐Ÿ’พ Web Storage (localStorage / sessionStorage)

1. localStorage

  • ๋ธŒ๋ผ์šฐ์ €์— ์˜๊ตฌ ์ €์žฅ
  • ๋ธŒ๋ผ์šฐ์ €/ํƒญ์„ ๊บผ๋„ ๋ฐ์ดํ„ฐ ๋‚จ์•„์žˆ์Œ
  • ๋กœ๊ทธ์ธ ํ† ํฐ, ์‚ฌ์šฉ์ž ์„ค์ •๊ฐ’ ์ €์žฅ ๋“ฑ์— ์‚ฌ์šฉ
localStorage.setItem("nickname", "moongi");
localStorage.getItem("nickname"); // "moongi"

2. sessionStorage

  • ๋ธŒ๋ผ์šฐ์ € ํƒญ์„ ๋‹ซ์œผ๋ฉด ์‚ฌ๋ผ์ง
  • ํƒญ ๋‹จ์œ„๋กœ ์œ ์ง€๋จ (์ƒˆ ์ฐฝ์€ ์ƒˆ ์ €์žฅ์†Œ)
  • ์ผ์‹œ์ ์ธ ํผ ๋ฐ์ดํ„ฐ, ํŽ˜์ด์ง€ ์ด๋™ ๊ฐ„ ์ƒํƒœ ์œ ์ง€ ๋“ฑ์— ์‚ฌ์šฉ
sessionStorage.setItem("step", "2");
sessionStorage.getItem("step"); // "2"

๐Ÿ“Œ ์ฟ ํ‚ค vs localStorage vs sessionStorage ์š”์•ฝํ‘œ

ํ•ญ๋ชฉCookielocalStoragesessionStorage
๐Ÿ“ก ์„œ๋ฒ„ ์ž๋™ ์ „์†กโœ… YesโŒ NoโŒ No
๐Ÿ• ์œ ํšจ ๊ธฐ๊ฐ„์„ค์ • ๊ฐ€๋Šฅ์˜๊ตฌ ์ €์žฅํƒญ ์ข…๋ฃŒ ์‹œ ์‚ญ์ œ
๐Ÿ“ฆ ์ €์žฅ ์šฉ๋Ÿ‰~4KB~5MB~5MB
๐Ÿ” ๋ณด์•ˆ๋ฏผ๊ฐ์ •๋ณด ์ €์žฅ ๋น„์ถ”์ฒœ๋ณด์•ˆ ๊ด€๋ฆฌ ํ•„์š”๋ณด์•ˆ ๊ด€๋ฆฌ ํ•„์š”
โœจ ์‚ฌ์šฉ ์˜ˆ์‹œ๋กœ๊ทธ์ธ ์„ธ์…˜, ์ธ์ฆ ์ƒํƒœํ† ํฐ, ํ…Œ๋งˆ ์„ค์ •ํผ ๋‹จ๊ณ„ ์ €์žฅ, ๊ฒ€์ƒ‰ ํ•„ํ„ฐ ์œ ์ง€

โœ… ์–ธ์ œ ๋ญ˜ ์“ฐ๋ฉด ๋ ๊นŒ?

์ƒํ™ฉ์ถ”์ฒœ ์ €์žฅ์†Œ
๋กœ๊ทธ์ธ ์„ธ์…˜ ๊ด€๋ฆฌ (์„œ๋ฒ„ ์ธ์ฆ ๊ธฐ๋ฐ˜)โœ… Cookie (์„œ๋ฒ„ ์ธ์ฆ์šฉ)
JWT ํ† ํฐ ์ €์žฅ (ํ”„๋ก ํŠธ ์ธ์ฆ ๊ธฐ๋ฐ˜)โœ… localStorage (๋˜๋Š” HttpOnly ์ฟ ํ‚ค)
ํ…Œ๋งˆ ์„ค์ •, ์‚ฌ์šฉ์ž ์„ ํ˜ธ๊ฐ’โœ… localStorage
ํ•œ ํƒญ ๋‚ด์—์„œ๋งŒ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐโœ… sessionStorage

ํ•„์š”ํ•˜๋‹ค๋ฉด

  • React์—์„œ localStorage๋กœ ํ† ํฐ ์ €์žฅํ•˜๊ธฐ
  • ์ฟ ํ‚ค๋กœ ๋กœ๊ทธ์ธ ์„ธ์…˜ ์œ ์ง€ํ•˜๋Š” ๋ฒ•
  • JWT + localStorage vs JWT + Cookie ๋ณด์•ˆ ๋น„๊ต

์ด๋Ÿฐ ๊ฒƒ๋„ ๋‹ค ์•Œ๋ ค์ค„๊ฒŒ!
์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ์“ฐ๊ณ  ์‹ถ์€ ๊ฑฐ์•ผ? ๋กœ๊ทธ์ธ, ์ƒํƒœ ์œ ์ง€, ํ”„๋ก ํŠธ ์„ค์ •? ๐Ÿ˜Ž

profile
@mgkick

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