๐Ÿ‘ฉ‍๐Ÿ’ป/HTML5

๋ธŒ๋ผ์šฐ์ €์— ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๊ธฐ : WebStorage(localStorage์™€ SessionStorage) & Cookie #2

ํ•œ๋‚˜ 2021. 2. 24. 11:39

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๋ฅผ ํ†ตํ•ด ๊ฐ€๋Šฅํ•˜๋‹ค.(์ง€์›๋˜๋Š” ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ € ํ™•์ธ ํ•„์š”)

 

 

 

์ฐธ๊ณ 

JavaScript.Info