๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Language/JavaScript

[JavaScript] LocalStorage์™€ SessionStorage

by DevIseo 2023. 1. 29.

Local Storage์™€ Session Storage

๐Ÿฐ ์›น ์Šคํ† ๋ฆฌ์ง€ ๊ฐ์ฒด(web storage object)์ธ localStorage์™€ sessionStorage๋Š” ๋ธŒ๋ผ์šฐ์ € ๋‚ด์— ํ‚ค-๊ฐ’ ์Œ์„ ์ €์žฅ

 

  • ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์นจํ•˜๊ณ (sessionStorage์˜ ๊ฒฝ์šฐ) ์‹ฌ์ง€์–ด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ด๋„(localStorage์˜ ๊ฒฝ์šฐ) ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ณ  ๋‚จ์•„ ์žˆ์Œ

์ฟ ํ‚ค ๋Œ€์‹  ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ด์œ ?

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

๋‘ ์Šคํ† ๋ฆฌ์ง€ ๊ฐ์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ

  • setItem(key, value) – ํ‚ค-๊ฐ’ ์Œ์„ ๋ณด๊ด€
  • getItem(key) – ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฐ›์•„์˜ด
  • removeItem(key) – ํ‚ค์™€ ํ•ด๋‹น ๊ฐ’์„ ์‚ญ์ œ
  • clear() – ๋ชจ๋“  ๊ฒƒ์„ ์‚ญ์ œ
  • key(index) – ์ธ๋ฑ์Šค(index)์— ํ•ด๋‹นํ•˜๋Š” ํ‚ค๋ฅผ ๋ฐ›์•„์˜ด
  • length – ์ €์žฅ๋œ ํ•ญ๋ชฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ์–ป์Œ

Local Storage

  • ์˜ค๋ฆฌ์ง„์ด ๊ฐ™์€ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋“  ํƒญ๊ณผ ์ฐฝ์—์„œ ๊ณต์œ 
  • ๋ธŒ๋ผ์šฐ์ €๋‚˜ OS๊ฐ€ ์žฌ์‹œ์ž‘ํ•˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒ๊ธฐ๋˜์ง€ ์•Š์Œ
localStorage.setItem('test', 1);
alert( localStorage.getItem('test') ); // 1
  • ์˜ค๋ฆฌ์ง„(domain/port/protocol)๋งŒ ๊ฐ™๋‹ค๋ฉด url ๊ฒฝ๋กœ๋Š” ๋‹ฌ๋ผ๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Œ
  • localStorage๋Š” ๋™์ผํ•œ ์˜ค๋ฆฌ์ง„์„ ๊ฐ€์ง„ ๋ชจ๋“  ์ฐฝ์—์„œ ๊ณต์œ ๋˜๊ธฐ ๋•Œ๋ฌธ
    • ํ•œ ์ฐฝ์— ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋‹ค๋ฅธ ์ฐฝ์—์„œ ๋ณ€๋™ ์‚ฌํ•ญ์„ ๋ณผ ์ˆ˜ ์žˆ์Œ

์ผ๋ฐ˜ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์‚ฌ์šฉ

  • localStorage์˜ ํ‚ค๋ฅผ ์–ป๊ฑฐ๋‚˜ ์„ค์ •ํ•  ๋•Œ, ์•„๋ž˜์ฒ˜๋Ÿผ ์ผ๋ฐ˜ ๊ฐ์ฒด์™€ ์œ ์‚ฌํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ
// ํ‚ค ์„ค์ •ํ•˜๊ธฐ
localStorage.test = 2;

// ํ‚ค ์–ป๊ธฐ
alert( localStorage.test ); // 2

// ํ‚ค ์‚ญ์ œํ•˜๊ธฐ
delete localStorage.test;
  • ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ๋•Œ๋ฌธ์— ์•„์ง ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์ด ์ง€์›๋˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์ถ”์ฒœํ•˜์ง€ ์•Š์Œ
    • ์‚ฌ์šฉ์ž๋Š” length๋‚˜ toString, localStorage์˜ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ๋ฅผ ํ‚ค๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ
    • let key = 'length'; localStorage[key] = 5; // TypeError: Cannot assign to read only property 'length'...
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด storage ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด ์ด๋ฒคํŠธ๋Š” localStorage๋ฅผ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์ ‘๊ทผํ•  ๋• ์ผ์–ด๋‚˜์ง€ ์•Š์Œ

ํ‚ค ์ˆœํšŒํ•˜๊ธฐ

  • ์Šคํ† ๋ฆฌ์ง€ ๊ฐ์ฒด๋Š” iterable ๊ฐ์ฒด๊ฐ€ ์•„๋‹˜
  • ๋Œ€์‹  ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋‹ค๋ฃจ๋ฉด ์ „์ฒด ํ‚ค-๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ

๋ฌธ์ž์—ด๋งŒ ์‚ฌ์šฉ

  • localStorage์˜ ํ‚ค์™€ ๊ฐ’์€ ๋ฐ˜๋“œ์‹œ ๋ฌธ์ž์—ด
  • ์ˆซ์ž๋‚˜ ๊ฐ์ฒด ๋“ฑ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋ฌธ์ž์—ด๋กœ ์ž๋™ ๋ณ€ํ™˜
  • JSON์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด๋ฅผ ์“ธ ์ˆ˜ ์žˆ๊ธดํ•จ
  • ๋””๋ฒ„๊น… ๋“ฑ์˜ ๋ชฉ์ ์œผ๋กœ ์Šคํ† ๋ฆฌ์ง€ ๊ฐ์ฒด ์ „์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ

Session Storage

sessionStorage ๊ฐ์ฒด๋Š” localStorage์— ๋น„ํ•ด ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง„ ์•Š์Œ

์ œ๊ณตํ•˜๋Š” ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋Š” ๊ฐ™์ง€๋งŒ, ํ›จ์”ฌ ์ œํ•œ์ ์ด๊ธฐ ๋•Œ๋ฌธ

  • sessionStorage๋Š” ํ˜„์žฌ ๋–  ์žˆ๋Š” ํƒญ ๋‚ด์—์„œ๋งŒ ์œ ์ง€
    • ๊ฐ™์€ ํŽ˜์ด์ง€๋ผ๋„ ๋‹ค๋ฅธ ํƒญ์— ์žˆ์œผ๋ฉด ๋‹ค๋ฅธ ๊ณณ์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ
    • ๊ทธ๋Ÿฐ๋ฐ ํ•˜๋‚˜์˜ ํƒญ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ iframe์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—” ๋™์ผํ•œ ์˜ค๋ฆฌ์ง„์—์„œ ์™”๋‹ค๊ณ  ์ทจ๊ธ‰๋˜๊ธฐ ๋•Œ๋ฌธ์— sessionStorage๊ฐ€ ๊ณต์œ 
  • ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์นจํ•  ๋•Œ sessionStorage์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ๋ผ์ง€์ง€ ์•Š์Œ
    • ํ•˜์ง€๋งŒ ํƒญ์„ ๋‹ซ๊ณ  ์ƒˆ๋กœ ์—ด ๋•Œ๋Š” ์‚ฌ๋ผ์ง

Storage Event

  • setItem, removeItem, clear๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋ฐœ์ƒ
  • ์—ฐ์‚ฐ(key/oldValue/newValue)๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ ์ „์ฒด์™€ ๋ฌธ์„œ url, ์Šคํ† ๋ฆฌ์ง€ ๊ฐ์ฒด storageArea ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  • ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์„ฑ๋œ ๊ณณ์„ ์ œ์™ธํ•˜๊ณ  ์Šคํ† ๋ฆฌ์ง€์— ์ ‘๊ทผํ•˜๋Š” ๋ชจ๋“  window ๊ฐ์ฒด์—์„œ ์ผ์–ด๋‚จ
    • (sessionStorage๋Š” ํƒญ ๋‚ด์—์„œ, localStorage์—์„œ๋Š” ์ „์—ญ์—์„œ).

Reference

localStorage์™€ sessionStorage

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

[JavaScript] ํŒ์—… ์ฐฝ ๊ตฌํ˜„ - window.open  (0) 2024.05.20
[JavaScript] javascript ์•Œ์•„๋‘˜ ๊ฒƒ  (0) 2023.01.31
[JavaScript] async / await 2  (0) 2023.01.26
[JavaScript] async / await 1  (1) 2023.01.25
[JavaScript] Event-onChange  (0) 2023.01.22

๋Œ“๊ธ€