[JS] ๐ LocalStorage / SessionStorage (vs ์ฟ ํค์ ๋น๊ต)
LocalStorage / SessionStorage API ์๊ฐ
html5์์๋ ์ข ๋ ์ฝ๊ณ ๊ฐ๋จํ ์ ์ฅ์ ์ ๊ณต์ ์ํด ์๋ก์ด localStorage์ sessionStorage API๋ฅผ ์ ๊ณตํ๋ค.
๋ ๋ค ์ ์ฅ ๊ณต๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ฐ ์ด ๋์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ด๋ผ๋ฉด ์ ์ฅ์๋ก์์ ๊ธฐ๋ฅ์ ๋๋ถ๋ถ ๋์ผํ๋ฉฐ ๋จ์ง sessionStorage์ ๊ฒฝ์ฐ ์ธ์ ์ด ์ข ๋ฃ๋๋ฉด ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ํจ๊ป ์ฌ๋ผ์ง ๋ค๋ ์ ์ด ๋ค๋ฅธ ์ ์ด๋ค.
[ localStorage ]
- ๋ก์ปฌ์ ๋๋ฉ์ธ ๋ณ๋ก ์ง์๋๋ storage
- localStorage๋ ์๊ฐ์ ํ์ด ์๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ๊บผ์ ธ๋ ์ฃฝ์ง ์๋๋ค.
- ๊ฐ์ ์ง์ฐ๋ ค๋ฉด ์ง์ ์ง์์ค์ผํ๋ค. (๋๋ ์ง์ฐ๊ธฐ ์ง์ ๊น์ง ์ฃฝ์ง์์)
[ sessionStorage ]
- ์ธ์ ์ด(ํ๋ก์ธ์ค, ํญ, ๋ธ๋ผ์ฐ์ ) ์ข ๋ฃ๋ ๋๊น์ง ์ง์๋๋ storage
- ์ธ์ ์คํ ๋ฆฌ์ง๋ localStorage์ ์ฐ๋ ๋๋์ด ๋น์ทํ๋ฐ ์ปค๋ค๋ ์ฐจ์ด์ ์ด ์๋ค. ๊ทธ๊ฒ์ ๋ฐ๋ก ์๋ฉธ ํ์ด๋ฐ์ด๋ค.
- localStorage๋ ์๋ฉธํ์ด๋ฐ์ด ์๋ค. ์ฆ ์ง์ ์ง์์ค์ผํ๋ค. ๊ทธ๋ฌ๋ sessionStorage๋ ์ธ์ ์ ์ข ๋ฃ์ ์ฃฝ์์ ๋ง์ดํ๋ค. (๋ ์ธ์ ์ด ๋๊ธฐ๋ฉด ์ฃฝ๋๋ค)
โ๊ทธ๋ฐ๋ฐ ์ด session์ด๋ผ๋ ์ฉ์ด๋ ์์ฃผ ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ธ ์๋ฏธ์ ์ธ์ ๊ณผ๋ ์ข ๋ค๋ฅด๋ค.
๋ณดํต ์ธ์ ์ ์ข ๋ฃ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ์ข ๋ฃ๋ฅผ ๋ปํ๋ค.
์์ฐฝ์(ํ๋ก์ธ์ค)๋์ฐ๊ฑด ์ํญ์ ๋์ฐ๊ฑด ์ด๋ ์ธ์ ์ข ๋ฃ๋ฅผ ์๋ฏธํ์ง ์๋๋ค.
๊ทธ๋ฌ๋ sessionStorage์์ ์๋ฏธํ๋ ์ธ์ ์ ๊ฐ์ฅ ์์ ๋จ์์ธ ํญ๋จ์๋ฅผ ์๋ฏธํ๋ค.
ํญ๋ง๋ค sessionStorage๋ ๋ฐ๋ก ๋ฐฐ์ ๋๋ฉฐ ์๋ก์ ์์ญ์ ๊ณต์ ํ์ง ์๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ ์นจ๋ฒํ ์ ๋ ์๋ค.
โ
๊ทธ๋์ sessionStorage๋ ๋ ๊ฐ๋ณํ๋ค.
cookie๊ฐ ๊ฐ์ก๋ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ์ธ ๋๋ฉ์ธ ๊ฐ์ผ๋ฉด ํญ์ ์ฟ ํค๋ฅผ ๋ณด๋ธ๋ค๋ ์กฐ๊ฑด์ด sessionStorage๋ฅผ ํตํด ํด์ํ๋ คํ ํ์ ์ด ๋ณด์ธ๋ค.
ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ์์ webStorage ๋ณด๊ธฐ
๊ฐ๋ฐ์ ๋๊ตฌ ์๋จ ๋ฉ๋ด์ Application ์ฐฝ์ ๋ค์ด๊ฐ๋ฉด ์ฟ ํค ์ ๋ณด์ ํจ๊ป ์คํ ๋ฆฌ์ง ์ ๋ณด๋ฅผ ํ์ธ ํ ์ ์๋ค.
์ฟ ํค(Cookie) vs ๋ก์ปฌ ์คํ ๋ฆฌ์ง ๋น๊ต
๋ก์ปฌ ์ ์ฅ์๋ฅผ ์น์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ ์ฟ ํค ๊ทธ๋ฆฌ๊ณ ๋ก์ปฌ์คํ ๋ฆฌ์ง ๋ค.
์ด๋ ์ฟ ํค(Cookie)์ ๋ก์ปฌ์คํ ๋ฆฌ์ง(Local Storage)์ ๋ ๋ค ๋ค๋ฅธ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฌด์์ด ์ณ๋ค๊ณ ํ๊ธฐ๋ ์ ๋งคํ ๋ถ๋ถ์ด ์๋ค. ๊ฐ๊ฐ์ ์ฐ์์์ ๋ฐ๋ผ ์ ํฉํ ๋ฐฉ๋ฒ์ ์ ํํด์ผ ํ๋ค.
์ฐ์ ์ฟ ํค๋ ์๋ฒ์ธก๊ณผ ํด๋ผ์ด์ธํธ์ธก ์์ชฝ์์ ์ฟ ํค ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ api๊ฐ ์กด์ฌํ๋ค.
์ด์ ๋ฌ๋ฆฌ localStorage๋ ๋ก์ปฌ ํ๊ฒฝ์์๋ง ์ปจํธ๋กค๋๋ค.
์ด๋ฐ ์ด์ ๋ก ์ ์ฅ๋ ์ฟ ํค ๋ฐ์ดํฐ์ ์ฐ์์ด ์์ชฝ ๋ชจ๋์ด๋๋ฅผ ๊ณ ๋ คํด์ผํ๋ฉฐ ๋ง์ฝ ์๋ฒ์ชฝ ์ฌ์ฉ์ด ํ์์ ์ด๊ณ ์ฆ๋ค๋ฉด ๋ก์ปฌ ์ ์ฅ์๊ฐ ์๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ์ธํฐ๋ ์ ์ด ์ข ๋ ํจ๊ณผ์ ์ธ ์ฟ ํค๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ์๋ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ์ด๋ค ์น์ฌ์ดํธ์ ๋ค์ด๊ฐ๋ฉด ํญ์ ๋ณด๋ ๊ด๊ณ 7์ผ ๋์ ๋ณด์ง ์๊ธฐ ์ญ์ ์ฟ ํค ๊ธฐ๋ฅ์ด๋ค.
์๋ํ๋ฉด ๋ก์ปฌ ์คํ ๋ฆฌ์ง์๋ ๊ธฐ๊ฐ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ์ง๋ง ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค๋ ์ ์ผ๋ก์๋ ๋ก์ปฌ์คํ ๋ฆฌ์ง๋ ๋งค์ฐ ๋งค๋ ฅ์ ์ธ ๊ธฐ๋ฅ์ด๋ค.
๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ฐ์์ฑ
์ฟ ํค์ ๋ฌ๋ฆฌ ๋ก์ปฌ(์น)์คํ ๋ฆฌ์ง๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด ์์ฒด๋ฅผ ๋ฃ๋๊ฒ ์ญ์ ๊ฐ๋ฅํ๋ฉฐ ๋ฌธ์์ด์ ํฌ๊ธฐ์ ํ์ด ์๋ cookie์ ๋นํด์ ๋น๊ต์ฐ์๋ฅผ ๊ฐ์ง๋ค.
๊ทธ๋ฆฌ๊ณ ์ธ์ ์ ์ด์ฉ์์, request์ response์์ ๋ชจ๋ ์ฟ ํค๋ฅผ ๋ค ๋๊ฒจ์ผ ํ๋๋ฐ ์๋ ๋น์ฉ์ด ํฐ httpํต์ ์ ๋ ํฐ ๋ถํ๋ฅผ ์ค๋ค.
๊ทธ๋ฌ๋ WebStorage๋ ๊ทธ๋ฅ ๊ฐ๋ฐ์๊ฐ ์ ๋ณํด์ ๋๊ธฐ๋ฉด ๋๋ฏ๋ก httpํต์ ์๋ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
โ
๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃ๋๋ฉด ์๋์ผ๋ก ์ฌ๋ผ์ง๋ ์ฟ ํค๋ฅผ ์ฌํํ๊ธฐ ์ํด์ sessionStorage๋ฅผ ๋์ ํ์๋ค.
sessionStorage์ ์กด์ฌ๋ก ์ธ์ ์ด ์ ์ง๋๋ ๋์๋ง ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๊ฒ ๋์๋ค.
โ
๋ํ ์ฟ ํค๋ domain๋ณ๋ก ๋ฐ์ดํฐ๊ฐ ๋ถ๋ฆฌ๋์ง๋ง ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ผ๋ฉด ๊ฐ์ ๊ณต์ ํ๋ค.
sessionStorage๋ ๋ค๋ฅธ ํญ์ด๋ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ๊ณต์ ๋์ง ์๋๋ค.
๋ง์ฝ ๊ณต์ ํ ๋ฐ์ดํฐ๋ localStorage์ ๋ฃ์ผ๋ฉด ๋๋ฏ๋ก ์ ํ์ ํญ์ด ์ปค์ก๋ค.
โ
์ฟ ํค๋ ์์ ์ ๋ณํ๋ฅผ ๊ฐ์งํ ๋ฐฉ๋ฒ์ด ์๋ค.
web storage๋ ์์ ์ ๋ณํ๋ฅผ ์ด๋ฒคํธ๋ก ๊ฐ์งํ ์ ์๋ค.
1. ์ ํ
cookie - ์ฉ๋์ ํ, ์๊ฐ์ ํ, ๊ฐฏ์์ ํ ์กด์ฌ
webstorage - ์ฉ๋์ ํ๋ง ์กด์ฌโ
2. ์๊ฐ์ ํ ์ค์
cookie - ์๊ฐ์ ํ ์ค์ ๊ฐ๋ฅ
webstorage - ์๊ฐ์ ํ ์ค์ ๋ถ๊ฐ๋ฅโ
3. ๋ฐ์ดํฐํ
cookie - ๋ฌธ์์ด๋ง ์ ์ฅ๊ฐ๋ฅ
webstorage - javascript ๊ฐ์ฒด ์ ์ฅ๊ฐ๋ฅโ
4. ๋ฐ์ดํฐ ์ ์ก
cookie - ๋ชจ๋ ์ฟ ํค๋ฅผ ์ ์กํด์ผํจ, cookie๋ฅผ ๊ฐ๊ณตํจ์ผ๋ก์จ ๋ฐ์ํ๋ side effect์กด์ฌ
webstorage - ๊ฐ๋ฐ์๊ฐ ์ ํํด์ ์ ์กํ ์ ์๊ณ ๊ฐ๊ณตํ ์๋ ์์โ
5. ์ธ์ ์ ์ ์
cookie - ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ฉด ๋ค๋ฅธ ํญ์ด๋ ๋ค๋ฅธ ์ฐฝ(ํ๋ก์ธ์ค)์ผ์ง๋ผ๋ ๊ฐ์ ์ธ์ ์ด๋ผ๊ณ ์ ์
webstorage - ๊ฐ์ ๋ธ๋ผ์ฐ์ ์ผ์ง๋ผ๋ sessionStorage์ ๊ฒฝ์ฐ ๋ค๋ฅธ ํญ์ด๋ฉด ๋ค๋ฅธ ์ธ์ ์ด๋ผ๊ณ ์ ์โ
6. ์ด๋ฒคํธ
cookie - ์ด๋ฒคํธ ์์
webstroage - ์ด๋ฒคํธ ์กด์ฌ
LocalStorage / SessionStorage ์ฌ์ฉ๋ฒ
LocalStorage ์ฌ์ฉ๋ฒ
์์๋ ์ธ๊ธํ์ง๋ง ์ ๋๊ฐ์ง ๊ฐ์ฒด์ ์ฐจ์ด์ ์ ์ธ์ ์ ๋ฐ๋ผ์ ๋ฐ์ดํฐ๊ฐ ์ ์ง๋๋๊ฐ ์๋๋๊ฐ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ๊ฑฐ์ ๋์ผํ๋ค ํ๊ฒ ๋ค.
์๋๋ localStorage๊ฐ์ฒด์ ์ฌ์ฉ๋ก ์์ฃผ ์ฌ์ฉ๋๋ ๋ฉ์๋, ํ๋กํผํฐ๋ฅผ ํจ๊ป ์์๋ณด์.
โ
๋ฐ์ดํฐ์ ์ ์ฅ
ํน์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์๋์ ๊ฐ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ฑฐ๋
๋ฆฌํฐ๋ดํ๊ฒ ์ฌ์ฉํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ๊ฐ๋ฅํ๋ค.
์๋ ์์ ๋ test๋ ์ด๋ฆ์ key๊ฐ์ ์ ํ๊ณ ์ด์ 123์ด๋ ๊ฐ์ ์ ์ฅํ๋ ์์ ์ด๋ค.
localStorage.test = '123'; // ๋ฆฌํฐ๋ด ๋ฐฉ์
localStorage.setItem('test', '123'); // ๋ฉ์๋ ๋ฐฉ์
โ
๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
localStorage.test; // ๋ฆฌํฐ๋ด ๋ฐฉ์
localStorage.getItem('test'); // ๋ฉ์๋ ๋ฐฉ์
localStorage.getItem(); // ์ธ์๋ฅผ ์์ฃผ๋ฉด, ์ ์ฒด ๊ฐ ๋ฐ์์ค๊ธฐ
localStorage.length // ํญ๋ชฉ ๊ฐฏ์ ๋ฐํ
localStorage.key(0); // ์ธ์(์ธ๋ฑ์ค)์ ํด๋นํ๋ key์ value๊ฐ์ ๋ฐ์์จ๋ค.
โ
๋ฐ์ดํฐ ์ญ์
localStorage.removeItem('test');
// localStorage ๊ฐ์ฒด์์ ์ํ๋ ๊ฐ์ ์ง์ฐ๋ ๋ฐฉ๋ฒ
localStorage.clear();
// ํ๋ฒ์ ์ ์ฅ๋ ๋ชจ๋ ๊ฐ์ ์ญ์ ํ๋ ๋ฐฉ๋ฒ
โ
ํค ์ํํ๊ธฐ
์์ฝ๊ฒ๋ ์คํ ๋ฆฌ์ง ๊ฐ์ฒด๋ iterable ๊ฐ์ฒด๊ฐ ์๋๋ค.
๋์ ๋ฐฐ์ด์ฒ๋ผ ๋ค๋ฃจ๋ฉด ์ ์ฒด ํค-๊ฐ์ ์ป์ ์ ์๋ค.
let keys = Object.keys(localStorage);
for(let key of keys) {
alert(`${key}: ${localStorage.getItem(key)}`);
}
โ
value๊ฐ์ ๊ฐ์ฒด๋ก ์ด์ฉํ๊ธฐ
localStorage์ ํค์ ๊ฐ์ ๋ฐ๋์ ๋ฌธ์์ด์ด์ด์ผ ํ๋ค.
์ซ์๋ ๊ฐ์ฒด ๋ฑ ๋ค๋ฅธ ์๋ฃํ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ฌธ์์ด๋ก ์๋ ๋ณํ๋๋ค.
localStorage.user = {name: "John"};
alert(localStorage.user); // [object Object]
JSON์ ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ์ ์๋ค.
localStorage.user = JSON.stringify({name: "John"});
let user = JSON.parse( localStorage.user );
alert( user.name ); // John
let arr = [1,2,3,4,5]
localStorage.setItem("data", JSON.stringify(arr));
let output = localStorage.getItem("data");
let arr = JSON.parse(output);
console.log(arr) // [1,2,3,4,5]
๋๋ฒ๊น ๋ฑ์ ๋ชฉ์ ์ผ๋ก ์คํ ๋ฆฌ์ง ๊ฐ์ฒด ์ ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
alert( JSON.stringify(localStorage, null, 2) );
sessionStorage ์ฌ์ฉ๋ฒ
์ธ์ ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ ๋ฐ ์ ์ง๋๊ธฐ ๋๋ฌธ์ ์ด ๊ฐ์ฒด์ ์ ์ฅ๋ ๊ฐ์ ์ผ์์ ์ธ ์๋ช ์ ๊ฐ์ง๊ฒ๋๋ค.
๋ง์ฝ ์ธ์ ์ด ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ... ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ๊ฑฐ๋ ์ผ์ ์๊ฐ ์๋ฌด๋ฐ ๋์๋ ํ์ง ์๋๋ค๋ฉด ๋น์ฐํ ์ ์ฅ๋ ๊ฐ์ ์ญ์ ๋ ๊ฒ์ด๋ค.
๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ์ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ํฌ๊ฒ ์ฐจ์ด๊ฐ ์๋ค.
sessionStorage.setItem("domain", "webisfree.com");
// domain์ด๋ ํค(key) ๊ฐ์ ์ฌ์ฉํ์ฌ ํด๋น ํ
์คํธ๋ฅผ ์ ์ฅํจ
sessionStorage.getItem("domain");
// ํค์ ์ ์ฅ๋ ๊ฐ์ ๋ฐํ. ์ฌ๊ธฐ์๋ webisfree.com ์ถ๋ ฅ๋จ
sessionStorage.removeItem("domain");
// domain ํค์ ๋ฐ์ดํฐ ๋ชจ๋ ์ญ์
sessionStorage.clear();
// ์ ์ฅ๋ ๋ชจ๋ ๊ฐ ์ญ์
Storage EVENT
localStorage๋ sessionStorage์ ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋ ๋, storage ์ด๋ฒคํธ๊ฐ ์คํ๋๋ค.
storage ์ด๋ฒคํธ๋ ๋ค์๊ณผ ๊ฐ์ ํ๋กํผํฐ๋ฅผ ์ง์ํ๋ค.
- key – ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ์ ํค(.clear()๋ฅผ ํธ์ถํ๋ค๋ฉด null)
- oldValue – ์ด์ ๊ฐ(ํค๊ฐ ์๋กญ๊ฒ ์ถ๊ฐ๋์๋ค๋ฉด null)
- newValue – ์๋ก์ด ๊ฐ(ํค๊ฐ ์ญ์ ๋์๋ค๋ฉด null)
- url – ๊ฐฑ์ ์ด ์ผ์ด๋ ๋ฌธ์์ url
- storageArea – ๊ฐฑ์ ์ด ์ผ์ด๋ localStorage๋ sessionStorage ๊ฐ์ฒด
โ์ฌ๊ธฐ์ ์ค์ํ ์ ์ storage ์ด๋ฒคํธ๊ฐ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ ์คํ ๋ฆฌ์ง๋ฅผ ์ ์ธํ๊ณ ์คํ ๋ฆฌ์ง์์ ์ ๊ทผ ๊ฐ๋ฅํ window ๊ฐ์ฒด ์ ๋ถ์์ ์ผ์ด๋๋ค๋ ์ฌ์ค์ด๋ค.
โ
๋ ๊ฐ์ ์ฐฝ์ ๊ฐ์ ์ฌ์ดํธ๋ฅผ ๋์๋จ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ฐฝ์ ๋ค๋ฅด์ง๋ง ์ฌ์ดํธ๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ์ localStorage๋ ์๋ก ๊ณต์ ๋๋ค.
๋ ์ฐฝ์์ ๋ชจ๋ storage ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ํ ์ฐฝ์์ ์๋ ์์๋ฅผ ์คํํด ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๋ฉด ๋ค๋ฅธ ์ฐฝ์ ํด๋น ์ฌํญ์ด ๋ฐ์๋๋ ๊ฒ์ ํ์ธํ ์ ์์ ๊ฒ์ด๋ค.
// ๋ฌธ์๋ ๋ค๋ฅด์ง๋ง, ๊ฐฑ์ ์ ๊ฐ์ ์คํ ๋ฆฌ์ง์ ๋ฐ์๋ฉ๋๋ค.
window.onstorage = event => { // window.addEventListener('storage', () => {์ ๊ฐ์ต๋๋ค.
if (event.key != 'now') return;
alert(event.key + ':' + event.newValue + " at " + event.url);
};
localStorage.setItem('now', Date.now()); // ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๋ฉด storage ์ด๋ฒคํธ๊ฐ ๋ฐ์
storage ์ด๋ฒคํธ์ ๋ ๋ค๋ฅธ ์ค์ํ ํน์ง์ event.url์ด ์์ด ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋ ๋ฌธ์์ URL์ ์ ์ ์๋ค๋ ์ ์ด๋ค.
โ
๋ํ event.storageArea์๋ ์คํ ๋ฆฌ์ง ๊ฐ์ฒด๊ฐ ํฌํจ๋์ด ์๋๋ฐ,
storage ์ด๋ฒคํธ๋ sessionStorage๋ localStorage๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ชจ๋ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ event.storageArea๋ ์คํ ๋ฆฌ์ง ์ข ๋ฅ์ ์๊ด์์ด ์ค์ ์์ ์ด ์ผ์ด๋ ๊ฒ์ ์ฐธ์กฐํ๋ค๋ ๊ฒ ์ญ์ ์ค์ํ ํน์ง์ด๋ค.
๋ณ๊ฒฝ์ด ์ผ์ด๋ฌ์ ๋ ์ฐ๋ฆฌ๋ event.storageArea์ ๋ฌด์ธ๊ฐ๋ฅผ ์ค์ ํด '์๋ต’์ด ๊ฐ๋ฅํ๋๋ก ํ ์ ์๋ค.
โ
๋ฉ์ธ์ง ๊ตํ
์ด๋ฐ ํน์ง์ ์ด์ฉํ๋ฉด ์ค๋ฆฌ์ง์ด ๊ฐ์ ์ฐฝ๋ผ๋ฆฌ ๋ฉ์์ง๋ฅผ ๊ตํํ๊ฒ ํ ์ ์๋ค.
๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ ์ค๋ฆฌ์ง์ด ๊ฐ์ ์ฐฝ๋ผ๋ฆฌ ํต์ ํ ์ ์๋๋ก ํด์ฃผ๋ ๋ธ๋ก๋์บ์คํธ ์ฑ๋ API(broadcast channel API)๋ฅผ ์ง์ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด API๋ ๊ธฐ๋ฅ์ ํ๋ถํ์ง๋ง, IE์์๋ ์ง์ํ์ง ์๋๋ค๋ ๋จ์ ์ด ์๋ค. (๊ทธ๋์ IE ...)