Hamutaro - Hamtaro 4

Frontend/Web

[Web] ๋ธŒ๋ผ์šฐ์ € ์ €์žฅ์†Œ LocalStorage์™€ SessionStorage

carsumin 2026. 2. 15. 10:55

 

์›น ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ํด๋ผ์ด์–ธํŠธ ์ธก์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ์ˆœ๊ฐ„์ด ์žˆ๋‹ค.

๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€, ์‚ฌ์šฉ์ž ์„ค์ • ์ €์žฅ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฐ์ดํ„ฐ ๋“ฑ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ๋ธŒ๋ผ์šฐ์ € ์ €์žฅ์†Œ๋ฅผ ํ™œ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
๊ทธ ์ค‘์—์„œ๋„ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ๋ฐ”๋กœ LocalStorage์™€ SessionStorage๋‹ค.

๋‘˜ ๋‹ค Web Storage API์˜ ์ผ๋ถ€๋กœ ํฌํ‚ค๋ณด๋‹ค ํ›จ์”ฌ ํฐ ์šฉ๋Ÿ‰์„ ์ œ๊ณตํ•˜๊ณ  ์„œ๋ฒ„๋กœ ์ž๋™ ์ „์†ก๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ณตํ†ต์ ์ด ์žˆ๋‹ค.

 

 

LocalStorage - ํƒญ์„ ๋‹ซ์•„๋„ ์‚ด์•„์žˆ์Œ
  • LocalStorage์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์™„์ „ํžˆ ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์‹œ ์—ด์–ด๋„ ์œ ์ง€๋จ
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ฝ”๋“œ๋กœ clear() / removeItem()์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š” ํ•œ ์˜์›ํžˆ ๋‚จ์Œ
  • ๊ฐ™์€ ์ถœ์ฒ˜ (origin : ํ”„๋กœํ† ์ฝœ + ๋„๋ฉ”์ธ + ํฌํŠธ) ๋ผ๋ฉด ์—ฌ๋Ÿฌํƒญ์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•จ
// ์ €์žฅ
localStorage.setItem('theme', 'dark');

// ์ฝ๊ธฐ
const theme = localStorage.getItem('theme'); // 'dark'

// ์‚ญ์ œ
localStorage.removeItem('theme');

// ์ „์ฒด ์‚ญ์ œ
localStorage.clear();
  • ์ ํ•ฉํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€
    • ๋‹คํฌ ๋ชจ๋“œ / ์–ธ์–ด ์„ค์ • ๋“ฑ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ ์„ค์ •
    • ์ž๋™ ๋กœ๊ทธ์ธ์„ ์œ„ํ•œ ํ† ํฐ ์ €์žฅ (๋ณด์•ˆ ์ฃผ์˜)
    • ์•ฑ์˜ ์ƒํƒœ ์บ์‹ฑ (API ์‘๋‹ต ์บ์‹œ ๋“ฑ)

 

SessionStorage - ํƒญ์„ ๋‹ซ์œผ๋ฉด ์‚ฌ๋ผ์ง
  • ๋ธŒ๋ผ์šฐ์ € ํƒญ(์„ธ์…˜) ๋‹จ์œ„๋กœ ๊ฒฉ๋ฆฌ๋จ
  • ๊ฐ™์€ ์‚ฌ์ดํŠธ๋ผ๋„ ํƒญ์ด ๋‹ค๋ฅด๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ์ €์žฅ ๊ณต๊ฐ„์„ ์‚ฌ์šฉ
  • ํƒญ์„ ๋‹ซ๋Š” ์ˆœ๊ฐ„ ๋ฐ์ดํ„ฐ ์‚ญ์ œ๋จ
  • ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€
// ์ €์žฅ
sessionStorage.setItem('step', '2');

// ์ฝ๊ธฐ
const step = sessionStorage.getItem('step'); // '2'

// ์‚ญ์ œ
sessionStorage.removeItem('step');
  • ์ ํ•ฉํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€
    • ๋ฉ€ํ‹ฐ ์Šคํ… ํšŒ์›๊ฐ€์ž… / ๊ฒฐ์ œ ํผ์˜ ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ
    • ํƒญ ๋ณ„๋กœ ๋…๋ฆฝ์ ์ธ ๊ฒ€์ƒ‰ ํ•„ํ„ฐ ์ƒํƒœ
    • ๋กœ๊ทธ์ธ์—†์ด ์œ ์ง€ํ•  ์ž„์‹œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ

 

๊ณตํ†ต ์ฃผ์˜์‚ฌํ•ญ
  • ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅํ•˜์ง€ ๋ง ๊ฒƒ
  • ๋‘˜ ๋‹ค XSS ๊ณต๊ฒฉ์— ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Œ, ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ๊ฒฐ์ œ ์ •๋ณด ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ ˆ๋Œ€ ์ €์žฅ X
  • ์ €์žฅ ๊ฐ€๋Šฅํ•œ ํƒ€์ž…์€ ๋ฌธ์ž์—ด๋ฟ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ์ง๋ ฌํ™”
// ๊ฐ์ฒด ์ €์žฅ ์‹œ JSON ์ง๋ ฌํ™” ํ•„์ˆ˜
localStorage.setItem('user', JSON.stringify({ name: 'Kim', age: 30 }));
const user = JSON.parse(localStorage.getItem('user'));

 

 

๊ฒฐ๋ก 
  • ์œ ์ง€๋ผ์•ผ ํ•œ๋‹ค -> LocalStorage
  • ํƒญ ์•ˆ์—์„œ๋งŒ ์ž ๊น ํ•„์š” -> SessionStorage
๊ตฌ๋ถ„ LocalStorage SessionStorage
๋ฐ์ดํ„ฐ ์œ ์ง€ ๊ธฐ๊ฐ„ ๋ช…์‹œ์ ์œผ๋กœ ์‚ญ์ œํ•˜๊ธฐ ์ „๊นŒ์ง€ ์˜๊ตฌ ์œ ์ง€ ๋ธŒ๋ผ์šฐ์ € ํƒญ(์„ธ์…˜)์„ ๋‹ซ์œผ๋ฉด ์‚ญ์ œ
๊ณต์œ  ๋ฒ”์œ„ ๋™์ผ ์ถœ์ฒ˜(origin)์˜ ๋ชจ๋“  ํƒญ·์ฐฝ ๊ณต์œ  ํƒญ(์ฐฝ)๋งˆ๋‹ค ๋…๋ฆฝ์ , ๊ณต์œ  ์•ˆ ๋จ
์šฉ๋Ÿ‰ ์•ฝ 5~10MB (๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์ƒ์ด) ์•ฝ 5MB
์„œ๋ฒ„ ์ „์†ก ์ž๋™ ์ „์†ก ์•ˆ ๋จ ์ž๋™ ์ „์†ก ์•ˆ ๋จ
์ ‘๊ทผ ๊ฐ€๋Šฅ ๋ฒ”์œ„ ๊ฐ™์€ origin์ด๋ฉด ์–ด๋””์„œ๋“  ์ ‘๊ทผ ๊ฐ€๋Šฅ ํ•ด๋‹น ํƒญ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

'Frontend > Web' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Web] Nginx  (2) 2025.01.19
[Web] HTTP ์ƒํƒœ ์ฝ”๋“œ  (0) 2024.12.01
[Web] HTTP ๋ฉ”์„œ๋“œ  (0) 2024.12.01
[Web] RESTful API ์„ค๊ณ„ ์›์น™  (0) 2024.10.10
[Web] ์„ธ์…˜(Session)๊ณผ ์ฟ ํ‚ค(Cookie)  (0) 2024.07.30