Language/JavaScript (WEB)

[JS] ๐Ÿ“š LocalStorage / SessionStorage (vs ์ฟ ํ‚ค์™€ ๋น„๊ต)

์ธํŒŒ_ 2021. 9. 27. 13:58

localStorage / sessionStorage

LocalStorage / SessionStorage API ์†Œ๊ฐœ

html5์—์„œ๋Š” ์ข€ ๋” ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•œ ์ €์žฅ์†Œ ์ œ๊ณต์„ ์œ„ํ•ด ์ƒˆ๋กœ์šด localStorage์™€ sessionStorage API๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๋‘˜ ๋‹ค ์ €์žฅ ๊ณต๊ฐ„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ๋‘˜์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์ด๋ผ๋ฉด ์ €์žฅ์†Œ๋กœ์„œ์˜ ๊ธฐ๋Šฅ์€ ๋Œ€๋ถ€๋ถ„ ๋™์ผํ•˜๋ฉฐ ๋‹จ์ง€ sessionStorage์˜ ๊ฒฝ์šฐ ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋„ ํ•จ๊ป˜ ์‚ฌ๋ผ์ง„ ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฅธ ์ ์ด๋‹ค.

[ localStorage ]
 - ๋กœ์ปฌ์— ๋„๋ฉ”์ธ ๋ณ„๋กœ ์ง€์†๋˜๋Š” storage
 - localStorage๋Š” ์‹œ๊ฐ„์ œํ•œ์ด ์—†๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊บผ์ ธ๋„ ์ฃฝ์ง€ ์•Š๋Š”๋‹ค.
 - ๊ฐ’์„ ์ง€์šฐ๋ ค๋ฉด ์ง์ ‘ ์ง€์›Œ์ค˜์•ผํ•œ๋‹ค. (๋‚˜๋Š” ์ง€์šฐ๊ธฐ ์ง์ „๊นŒ์ง€ ์ฃฝ์ง€์•Š์•„)

[ sessionStorage ]
 - ์„ธ์…˜์ด(ํ”„๋กœ์„ธ์Šค, ํƒญ, ๋ธŒ๋ผ์šฐ์ €) ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ง€์†๋˜๋Š” storage
 - ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€๋Š” localStorage์™€ ์“ฐ๋Š” ๋Š๋‚Œ์ด ๋น„์Šทํ•œ๋ฐ ์ปค๋‹ค๋ž€ ์ฐจ์ด์ ์ด ์žˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ์†Œ๋ฉธ ํƒ€์ด๋ฐ์ด๋‹ค.
 - localStorage๋Š” ์†Œ๋ฉธํƒ€์ด๋ฐ์ด ์—†๋‹ค. ์ฆ‰ ์ง์ ‘ ์ง€์›Œ์ค˜์•ผํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ sessionStorage๋Š” ์„ธ์…˜์˜ ์ข…๋ฃŒ์‹œ ์ฃฝ์Œ์„ ๋งž์ดํ•œ๋‹ค. (๋‚œ ์„ธ์…˜์ด ๋Š๊ธฐ๋ฉด ์ฃฝ๋Š”๋‹ค)

localStorage, sessionStorage

โ€‹๊ทธ๋Ÿฐ๋ฐ ์ด session์ด๋ผ๋Š” ์šฉ์–ด๋Š” ์•„์ฃผ ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์ธ ์˜๋ฏธ์˜ ์„ธ์…˜๊ณผ๋Š” ์ข€ ๋‹ค๋ฅด๋‹ค.

๋ณดํ†ต ์„ธ์…˜์˜ ์ข…๋ฃŒ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์˜ ์ข…๋ฃŒ๋ฅผ ๋œปํ•œ๋‹ค.

์ƒˆ์ฐฝ์„(ํ”„๋กœ์„ธ์Šค)๋„์šฐ๊ฑด ์ƒˆํƒญ์„ ๋„์šฐ๊ฑด ์ด๋Š” ์„ธ์…˜์ข…๋ฃŒ๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ sessionStorage์—์„œ ์˜๋ฏธํ•˜๋Š” ์„ธ์…˜์€ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์ธ ํƒญ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

ํƒญ๋งˆ๋‹ค sessionStorage๋Š” ๋”ฐ๋กœ ๋ฐฐ์ •๋˜๋ฉฐ ์„œ๋กœ์˜ ์˜์—ญ์„ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ’์„ ์นจ๋ฒ”ํ•  ์ˆ˜ ๋„ ์—†๋‹ค.

โ€‹

๊ทธ๋ž˜์„œ sessionStorage๋Š” ๋” ๊ฐ๋ณ„ํ•˜๋‹ค.

cookie๊ฐ€ ๊ฐ€์กŒ๋˜ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์ธ ๋„๋ฉ”์ธ ๊ฐ™์œผ๋ฉด ํ•ญ์ƒ ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ธ๋‹ค๋Š” ์กฐ๊ฑด์ด sessionStorage๋ฅผ ํ†ตํ•ด ํ•ด์†Œํ•˜๋ คํ•œ ํ”์ ์ด ๋ณด์ธ๋‹ค.


ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ webStorage ๋ณด๊ธฐ

๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์ƒ๋‹จ ๋ฉ”๋‰ด์— Application ์ฐฝ์— ๋“ค์–ด๊ฐ€๋ฉด ์ฟ ํ‚ค ์ •๋ณด์™€ ํ•จ๊ป˜ ์Šคํ† ๋ฆฌ์ง€ ์ •๋ณด๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

sessionStorage


์ฟ ํ‚ค(Cookie) vs ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ๋น„๊ต

๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์›น์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์€ ์ฟ ํ‚ค ๊ทธ๋ฆฌ๊ณ  ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€ ๋‹ค.

์ด๋•Œ ์ฟ ํ‚ค(Cookie)์™€ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€(Local Storage)์€ ๋‘˜ ๋‹ค ๋‹ค๋ฅธ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์—‡์ด ์˜ณ๋‹ค๊ณ  ํ•˜๊ธฐ๋Š” ์• ๋งคํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์“ฐ์ž„์ƒˆ์— ๋”ฐ๋ผ ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

 

์šฐ์„  ์ฟ ํ‚ค๋Š” ์„œ๋ฒ„์ธก๊ณผ ํด๋ผ์ด์–ธํŠธ์ธก ์–‘์ชฝ์—์„œ ์ฟ ํ‚ค ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” api๊ฐ€ ์กด์žฌํ•œ๋‹ค.

์ด์™€ ๋‹ฌ๋ฆฌ localStorage๋Š” ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ๋งŒ ์ปจํŠธ๋กค๋œ๋‹ค.

 

์ด๋Ÿฐ ์ด์œ ๋กœ ์ €์žฅ๋œ ์ฟ ํ‚ค ๋ฐ์ดํ„ฐ์˜ ์“ฐ์ž„์ด ์–‘์ชฝ ๋ชจ๋‘์ด๋ƒ๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•˜๋ฉฐ ๋งŒ์•ฝ ์„œ๋ฒ„์ชฝ ์‚ฌ์šฉ์ด ํ•„์ˆ˜์ ์ด๊ณ  ์žฆ๋‹ค๋ฉด ๋กœ์ปฌ ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹Œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์™€์˜ ์ธํ„ฐ๋ ‰์…˜์ด ์ข€ ๋” ํšจ๊ณผ์ ์ธ ์ฟ ํ‚ค๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ์›น์‚ฌ์ดํŠธ์— ๋“ค์–ด๊ฐ€๋ฉด ํ•ญ์ƒ ๋ณด๋Š” ๊ด‘๊ณ  7์ผ ๋™์•ˆ ๋ณด์ง€ ์•Š๊ธฐ ์—ญ์‹œ ์ฟ ํ‚ค ๊ธฐ๋Šฅ์ด๋‹ค.

์™œ๋ƒํ•˜๋ฉด ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์—๋Š” ๊ธฐ๊ฐ„ ๊ธฐ๋Šฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๊ทธ๋ ‡์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค๋Š” ์ ์œผ๋กœ์„œ๋Š” ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€๋Š” ๋งค์šฐ ๋งค๋ ฅ์ ์ธ ๊ธฐ๋Šฅ์ด๋‹ค.

 

[JS] ๐Ÿ“š ์ฟ ํ‚ค(Cookie) ๐Ÿช ๋‹ค๋ฃจ๊ธฐ

์„ ํ–‰ ํ•™์Šต [WEB] ๐ŸŒ ์ฟ ํ‚ค / ์„ธ์…˜ ์ •๋ฆฌ ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless)๊ณผ ๋น„์ƒํƒœ์„ฑ(Stateless) HTTP ํ”„๋กœํ† ์ฝœ์—๋Š” ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless)๊ณผ ๋น„์ƒํƒœ์„ฑ(Stateless)์ด๋ผ๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„์˜ ์ž์›์„ ์ ˆ์•ฝํ•˜..

inpa.tistory.com


๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์˜ ์šฐ์œ„์„ฑ

์ฟ ํ‚ค์™€ ๋‹ฌ๋ฆฌ ๋กœ์ปฌ(์›น)์Šคํ† ๋ฆฌ์ง€๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๋„ฃ๋Š”๊ฒƒ ์—ญ์‹œ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋ฌธ์ž์—ด์— ํฌ๊ธฐ์ œํ•œ์ด ์žˆ๋Š” 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'); // ๋ฉ”์†Œ๋“œ ๋ฐฉ์‹

sessionStorage

โ€‹

๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

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 ...)

 

Broadcast Channel API - Web APIs | MDN

The Broadcast Channel API allows basic communication between browsing contexts (that is, windows, tabs, frames, or iframes) and workers on the same origin.

developer.mozilla.org