๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Web Storage

Web Storage API#

Web Storage API๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ key/value ์Œ์„ ์ฟ ํ‚ค๋ณด๋‹ค ํ›จ์”ฌ ์ง๊ด€์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค.

Web Storage์—๋Š” sessionStorage , localStorage ๋‘ ๊ฐ€์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ๋‹ค.

  • sessionStorage : ํ˜„์žฌ ๋–  ์žˆ๋Š” ํƒญ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€. ์ƒˆ๋กœ๊ณ ์นจ, ๋ณต์› ์‹œ์—๋„๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜์ง€๋งŒ ํƒญ์„ ๋‹ซ์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

  • localStorage : ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ๊ณ  ์ƒˆ๋กœ ์—ด์–ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผํ†ตํ•ด์„œ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๋ฅผ ์ง€์›Œ์•ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

์ฟ ํ‚ค์™€ ๋‹ค๋ฅธ ์ #

  • ์ฟ ํ‚ค๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์‹œ ์„œ๋ฒ„๋กœ ์ „์†ก๋˜์ง€๋งŒ, Web Storage ๊ฐ์ฒด๋Š” ์„œ๋ฒ„๋กœ ์ „์†ก๋˜์ง€์•Š๋Š”๋‹ค.

  • ์ฟ ํ‚ค๋ณด๋‹ค ๋” ๋งŽ์€ ์ž๋ฃŒ๋ฅผ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ฟ ํ‚ค : 4KB, Web Storage : ์ตœ์†Œ 2MB)

๋ธŒ๋ผ์šฐ์ €๋ณ„, ๋””๋ฐ”์ด์Šค๋ณ„๋กœ Storage์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ#

  • setItem(key, value) : key/value ์Œ์„ ๋ณด๊ด€

  • getItem(key) : key์— ํ•ด๋‹นํ•˜๋Š” value๋ฅผ ๋ฐ›์•„์˜ด

  • removeItem(key) : key์™€ ํ•ด๋‹น ๊ฐ’์„ ์‚ญ์ œ

  • clear() : ๋ชจ๋“  ๊ฒƒ์„ ์‚ญ์ œ

  • key(index) : index์— ํ•ด๋‹นํ•˜๋Š” key๋ฅผ ๋ฐ›์•„์˜ด

  • length : ์ €์žฅ๋œ ํ•ญ๋ชฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ์–ป์Œ

localStorage ๋ฐ๋ชจ#

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์—์„œ ์‹คํ–‰ํ•œ๋‹ค.

localStorage.setItem('test', 'Hello localStorage');

๊ทธ๋ฆฌ๊ณ  ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ๊ณ  ์—ฐ๋‹ค์Œ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. (๋‹ค๋ฅธ ์ฐฝ์—์„œ ์‹คํ–‰ํ•ด๋„ ๋œ๋‹ค .)

alert(localStorage.getItem('test')); // Hello localStorage

sessionStorage ๋ฐ๋ชจ#

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์—์„œ ์‹คํ–‰ํ•œ๋‹ค.

sessionStorage.setItem('test', 'Hello sessionStorage');

๊ทธ๋ฆฌ๊ณ  ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•œ ๋‹ค์Œ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

alert(sessionStorage.getItem('test'); // Hello sessionStorage

ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํƒญ์—์„œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๊ป๋‹ค๊ฐ€ ๋‹ค์‹œ ์ผœ์„œ ์‹คํ–‰ํ•ด๋ณด๋ฉด null ์ด์ถœ๋ ฅ๋œ๋‹ค.

alert(sessionStorage.getItem('test'); // null

์ผ๋ฐ˜ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ธฐ#

Storage์˜ ํ‚ค๋ฅผ ์–ป๊ฑฐ๋‚˜ ์„ค์ •ํ•  ๋•Œ ์ผ๋ฐ˜ ๊ฐ์ฒด์™€ ์œ ์‚ฌํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ getItem , setItem ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

// ํ‚ค ์„ค์ •ํ•˜๊ธฐlocalStorage.test = 2;
// ํ‚ค ์–ป๊ธฐalert(localStorage.test); // 2
// ํ‚ค ์‚ญ์ œํ•˜๊ธฐdelete localStorage.test;
  1. ์‚ฌ์šฉ์ž๊ฐ€ length , toString , localStorage ์˜ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ๋ฅผ ํ‚ค๋กœ ์„ค์ •ํ• ์ˆ˜ ์žˆ๋‹ค.

    let key = 'length';localStorage[key] = 5; // TypeError: Cannot assign to read only property 'length'...
  2. ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด storage ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, Storage๋ฅผ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์ ‘๊ทผํ•  ๋•์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

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

Storage ๊ฐ์ฒด๋Š” iterable ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋Œ€์‹  ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋‹ค๋ค„ ์ „์ฒด key/value ๋ฅผ ์–ป์„์ˆ˜ ์žˆ๋‹ค.

for (let i = 0; i < localStorage.length; i++) {    let key = localStorage.key(i);    alert(`${key}: ${localStorage.getItem(key)}`);}

์ผ๋ฐ˜ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ฒ˜๋Ÿผ for in ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‚ด์žฅ ํ•„๋“œ๊นŒ์ง€ ์ถœ๋ ฅ๋œ๋‹ค.

// ์ข‹์ง€ ์•Š์€ ๋ฐฉ๋ฒ•for (let key in localStorage) {    alert(key); // getItem, setItem ๊ฐ™์€ ๋‚ด์žฅ ํ•„๋“œ๊นŒ์ง€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.}

hasOwnProperty ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœํ† ํƒ€์ž…์—์„œ ์ƒ์†๋ฐ›์€ ํ•„๋“œ๋ฅผ ๊ณจ๋ผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

for (let key in localStorage) {    if (!localStorage.hasOwnProperty(key)) {        continue; // setItem, getItem ๋“ฑ์˜ ํ‚ค๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.    }    alert(`${key}: ${localStorage.getItem(key)}`);}

for of ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

let keys = Object.keys(localStorage);for (let key of keys) {    alert(`${key}: ${localStorage.getItem(key)}`);}

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

localStorage ์˜ key์™€ value๋Š” ๋ฐ˜๋“œ์‹œ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•œ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ#

localStorage์™€ sessionStorage

Web Storage API