WebStorage์ API
- ๋ ๊ฐ์ฒด ๋ชจ๋ ๋์ผํ ๋ฉ์๋์ ํ๋กํผํฐ๋ฅผ ๊ฐ๋๋ค.
setItem(key, value) // ํค-์์ ๋ณด๊ด
getItem(key) // ํค์ ํด๋นํ๋ ๊ฐ์ ๋ฐ์์จ๋ค.
removeItem(key) // ํค์ ํด๋น ๊ฐ์ ์ญ์ ํ๋ค.
clear() // ๋ชจ๋ ๊ฒ์ ์ญ์ ํ๋ค.
key(index) // ์ธ๋ฑ์ค์ ํด๋นํ๋ ํค๋ฅผ ๋ฐ์์จ๋ค.
length // ์ ์ฅ๋ ํญ๋ชฉ์ ๊ฐ์๋ฅผ ๋ฐ์์จ๋ค.
- ๋ ์คํ ๋ฆฌ์ง ๊ฐ์ฒด๋ setItem/getItem/removeItem ๋ฉ์๋๋ฅผ ์ง์ํ๋ ๊ฒ์ผ๋ก ๋ณด์ Map๊ณผ ์ ์ฌํ์ง๋ง, ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด ํค์ ์ ๊ทผํ๋ ๋ฐฉ์์ ๋ค๋ฅด๋ค๊ณ ๋ณผ ์ ์๋ค.
- ์น ์คํ ๋ฆฌ์ง ๊ฐ์ฒด๋ origin(domain/port/protocol)์ ๋ฌถ์ฌ ์๋ค. (ํ๋กํ ์ฝ๊ณผ ์๋ธ ๋๋ฉ์ธ์ด ๋ค๋ฅด๋ฉด ๋ฐ์ดํฐ์ ์ ๊ทผ ๋ถ๊ฐ)
- ๋ฐ๋ผ์, origin์ด ๊ฐ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ ๋ชจ๋ ํญ๊ณผ ์ฐฝ์์ ๊ณต์ ๋๋ฉฐ, ๋ธ๋ผ์ฐ์ ๋ OS๊ฐ ์ฌ์์๋๋๋ผ๋ ๋ฐ์ดํฐ๊ฐ ํ๊ดด๋์ง ์๋๋ค. ์ฆ, origin๋ง ๊ฐ๋ค๋ฉด, url ๊ฒฝ๋ก๊ฐ ๋ฌ๋ผ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค.
localStorage์ test, testItem์ด๋ผ๋ ํค๊ฐ์ ๊ฐ๊ฐ ์ซ์ํ, ๋ฌธ์ํ์ ์ ์ฅํ๊ณ (ํ์ง๋ง ์ฌ์ค์ ํค-๊ฐ์ ๋ฌธ์์ด๋ก ์๋ ๋ณํ์ด ๋๋ค. WebStorage์ ํค๊ฐ์ ๋ฌด์กฐ๊ฑด ๋ฌธ์์ด์ด์ด์ผ ํ๋ฏ๋ก), ํญ์ ๋ซ์ ํ, ์๋ก ์ฐ ํญ์์ ๊ฐ๊ฐ์ ํค๋ฅผ ํธ์ถํ๋ฉด ์ ๋๋ก ์ ์ฅ๋ ๊ฐ์ ๋ฐํํ๋ ๊ฒ์ ์ ์ ์๋ค.
- ๋ํ, localStorage๋ ์ผ๋ฐ ๊ฐ์ฒด์ ์ ์ฌํ๊ฒ ๋ค๋ฃฐ ์ ์๋ค.
localStorage.test = 2 // ํค์ ๊ฐ ์ค์
delete localStorage.test // ํค ์ญ์
- ์น ์คํ ๋ฆฌ์ง ๊ฐ์ฒด๋ iterable ๊ฐ์ฒด๊ฐ ์๋๋ฏ๋ก ํค๋ฅผ ์ํํ ๋ ๋ฐฐ์ด์ฒ๋ผ ๋ค๋ฃจ๋ ํธ๋ฆญ์ ์ด๋ค.
for (let i = 0; i < localStorage.length; i++) {
let key = localStorage.key(i);
console.log(`${key} : ${localStorage.getItem(key)}`)
}
// ๋๋
for (for key in localStorage) {
console.log(key)
}
// ํ์ง๋ง ์ ๋ฐฉ๋ฒ์ ์ฐ๋ฉด getItem, setItem ๊ฐ์ ๋ด์ฅ ํ๋๊น์ง ์ถ๋ ฅ์ด ๋๋ค.
ํด๋น ์ฐฝ์์ ํ์ธํ ์ ์๋ localStorage์ ํค๋ฅผ ์ํํด์ ๋ด๋๋๋ค. ํฐ์คํ ๋ฆฌ ๋ฉ์ธ ํ๋ฉด์์ ์๋์ ๊ฐ์ด ์์ฑํ ์ฝ๋๋ฅผ ์คํํ๋ณด๋ฉด, ์ ์ฅ๋ tistoryFingerprint ํ๋๋ฅผ ์ถ๋ ฅํ ์ดํ, ๋ด์ฅ ๋ฉ์๋๋ฅผ ์ญ ์ถ๋ ฅํด์ค๋ค.
hasOwnProperty๋ Object.keys๋ก ๋ณด์ํด ์ฌ์ฉํ ์ ์๋ค.
- ์์์ localStorage์ ํค-๊ฐ์ ๋ฌธ์์ด๋ง ๋๋ค๊ณ ํ์ง๋ง, ์ฌ์ค ๊ฐ์ฒด๋ฅผ ๋ด์ ๊ฒฝ์ฐ๊ฐ ๋ง์์, ๋ง์ฐฌ๊ฐ์ง๋ก JSON ์ด์ฉํด์ ์ ์ฅํ๊ณ ๊บผ๋ด์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- sessionStorage๋ localStorage์ ๋นํด ์ข ๋ ์ ํ์ ์ธ ํธ์ด๋ค. ์๋ฅผ ๋ค์ด ํ์ฌ ๋ ์๋ ํญ์์๋ง(๋ธ๋ผ์ฐ์ ๋ ํญ ๋ธ๋ผ์ฐ์ ๋ ํ์ฌ์ ์ปจํ ์คํธ ๋ด์์) ๋ฐ์ดํฐ๊ฐ ์ ์ง๋๋ค๋ ์ ๋๋ฌธ์ด๋ค. ์ฆ, ๊ฐ์ ํ์ด์ง์ฌ๋ ํญ์ด ๋ค๋ฅด๋ฉด ๊ฐ๊ธฐ ๋ค๋ฅธ ํญ์ ์ ์ฅ์ด ๋๋ค. ๊ทธ๋ฐ๋ฐ ํ๋์ ํ์ด์ง ๋ด ์ฌ๋ฌ iframe์ด ์๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋ค. ์ด๋ด ๋๋ ๋ origin์ด ๊ฐ๋ค๊ณ ์ทจ๊ธ๋ผ ์๋ก sessionStorage๊ฐ ๊ณต์ ๋๋ค.
- sessionStorage๋ ๋ ํ์ด์ง ์๋ก๊ณ ์นจ ์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง์ง ์์ง๋ง, ํญ์ด ๋ซํ๊ณ ์๋ก ์ด๋ฆฌ๋ฉด ์ฌ๋ผ์ง๋ค. ์ฆ, ํญ์ ์ข ์์ ์ด๋ค.
storage ์ด๋ฒคํธ
์๋ฅผ ๋ค์ด ์ด๋ค ์ฐฝ์ ๊ธ์ ์ฐ๋ค๊ฐ ์ค์๋ก ์ฌ์ฉ์๊ฐ ์ฐฝ์ ๋ซ์์ง๋ง, ๋ค์ ํด๋น ํ์ด์ง๋ฅผ ๋ณต๊ตฌํ์ ๋, ์ฌ์ ํ ์ฐ๋ ๋ฌธ์๊ฐ ๋จ์์๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๊ณ ํ์ ๋ storage ์ด๋ฒคํธ์ ํ๋กํผํฐ๊ฐ ์ ์ฉํ๊ฒ ์ฐ์ผ ์ ์๋ค.
storage ์ด๋ฒคํธ๋ ์น ์คํ ๋ฆฌ์ง ๊ฐ์ฒด์ ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋ ๋ ์คํ๋๋ค.
key // ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ์ ํค (.clear()๋ฅผ ํธ์ถํ๋ค๋ฉด null์ผ ๊ฒ์ด๋ค)
oldValue // ์ด์ ๊ฐ (ํค๊ฐ ์๋กญ๊ฒ ์ถ๊ฐ๋ ๊ฒฝ์ฐ๋ผ๋ฉด null์ผ ๊ฒ์ด๋ค)
newValue // ์๋ก์ด ๊ฐ (ํค๊ฐ ์ญ์ ๋ ๊ฒฝ์ฐ๋ผ๋ฉด null์ผ ๊ฒ์ด๋ค)
url // ๋ฐ์ดํฐ ๊ฐฑ์ ์ด ์ผ์ด๋ ๋ฌธ์์ url
storageArea // ๊ฐฑ์ ์ด ์ผ์ด๋ ์น ์คํ ๋ฆฌ์ง ๊ฐ์ฒด ex) localStorage or sessionStorage
- ์ด๋ storage ์ด๋ฒคํธ๋ ํด๋น ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ ์คํ ๋ฆฌ์ง๋ฅผ ์ ์ธํ๊ณ ์คํ ๋ฆฌ์ง์์ ์ ๊ทผ ๊ฐ๋ฅํ Window ๊ฐ์ฒด ์ ๋ถ์์ ์ผ์ด๋๋ค.
- ๋ํ, event.url์ ํตํด ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋ ๋ฌธ์์ URL์ ์ ์ ์๋ค.
- Storage ์ด๋ฒคํธ๋ sessionStorage๋ localStorage๊ฐ ๋ณ๊ฒฝ๋ ๋ ๊ตฌ๋ถ ์๊ณ ๋ชจ๋ ๋ฐ์ํ๋ฏ๋ก event.storageArea๋ ์คํ ๋ฆฌ์ง ์ข ๋ฅ์ ๋ฌด๊ดํ๊ฒ ์ค์ ์์ ์ด ์ผ์ด๋ ๊ฒ์ ์ฐธ์กฐํ๋ค.
- ์ ํน์ง์ ์ด์ฉํด ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ origin์ด ๊ฐ์ ์ฐฝ๋ผ๋ฆฌ ํต์ ํ ์ ์์ผ๋ฉฐ, broadcast channel API๋ฅผ ํตํด ๊ฐ๋ฅํ๋ค.(์ง์๋๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ํ์ธ ํ์)
์ฐธ๊ณ
'๐ฉโ๐ป > HTML5' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DOCTYPE, HTML, XHTML, ๊ทธ๋ฆฌ๊ณ HTML5 (0) | 2021.04.24 |
---|---|
๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํฐ ์ ์ฅํ๊ธฐ : WebStorage(localStorage์ SessionStorage) & Cookie #1 (0) | 2021.02.24 |