๐Ÿ‘ฉ‍๐Ÿ’ป/HTML5

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

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

Vuex๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ state์— ์ €์žฅํ•˜๊ณ , ํŽ˜์ด์ง€๊ฐ€ ์ „ํ™˜๋˜์–ด๋„ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋‹ค๊ฐ€, vuex์˜ state๋ฅผ localStorage๋กœ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ vuex-persistedState๋ฅผ ์‚ฌ์šฉํ•ด๋ดค๋‹ค. ์ด์ „ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์‚ฌ์ด๋“œ๋ฐ”์— ์œ ์ € ์ •๋ณด๊ฐ€ ๋ฐ”๋กœ๋ฐ”๋กœ ๋ฐ˜์˜์ด ์•ˆ ๋˜๊ฑฐ๋‚˜, ๋ Œ๋”๋ง์ด ์›ํ•˜๋Š” ํƒ€์ด๋ฐ์— ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, Vue.js๊ฐ€ ์•„๋ฌด๋ž˜๋„ SPA๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋‹ค๋ณด๋‹ˆ, ์ด๋Ÿฐ ์ƒํ™ฉ์ด ์•ž์œผ๋กœ๋„ ์ž์ฃผ ๋ฐœ์ƒํ•  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์€ HTML5์— ํฌํ•จ๋œ ์ž๋ฃŒ ๊ตฌ์กฐ์ธ Web Storage์˜ localStorage, sessionStorage๊ฐ€ ์žˆ๋‹ค. ์ฟ ํ‚ค์™€ ๊ฐœ๋…์ด ๋น„์Šทํ•˜์ง€๋งŒ, ์ฟ ํ‚ค์—์„œ ์กฐ๊ธˆ ๋” ๊ฐœ์„ ์ ์„ ๊ฐ€์ง€๋Š” ๊ธฐ์ˆ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ HTML5์—์„œ ์ฟ ํ‚ค๊ฐ€ ๋ฐฐ์ฒ™๋˜๋Š” ๊ธฐ์ˆ ์€ ์•„๋‹ˆ๋‹ค. ๋‘˜๋‹ค ์ œ๋Œ€๋กœ ์งš๊ณ  ๋„˜์–ด๊ฐ„ ์ ์€ ์—†์–ด์„œ ํ•œ ๋ฒˆ ์ •๋ฆฌ๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค.

 

 

์›น ์Šคํ† ๋ฆฌ์ง€๋Š” ํด๋ผ์ด์–ธํŠธ ์ƒ์—์„œ ์›น ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ์ด๋‹ค. ์ฟ ํ‚ค๋Š” ์„œ๋ฒ„๋“  ํด๋ผ์ด์–ธํŠธ๋“  ์–‘์ธก ๋ชจ๋‘์—์„œ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ ๋งค๋ฒˆ ์›น ์š”์ฒญ์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„์™€ ํ†ต์‹ ์„ ํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. ๋ฐ˜๋ฉด ์›น ์Šคํ† ๋ฆฌ์ง€๋Š” ์„œ๋ฒ„์™€ ํ†ต์‹ ์€ ์—†์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ ์ƒ์—์„œ๋งŒ ์ƒ์„ฑ๋˜๊ณ , ์กด์žฌํ•œ๋‹ค. Web Storage๋Š” ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์˜๊ตฌ์„ฑ์— ๋”ฐ๋ผ LocalStorage์™€ SessionStorage๋กœ ๋‚˜๋‰œ๋‹ค.

 

์›น ์Šคํ† ๋ฆฌ์ง€ ๊ฐ์ฒด(Web Storage Object)์ธ localStorage์™€ sessionStorage

- ๋ธŒ๋ผ์šฐ์ € ๋‚ด key-value ์Œ์œผ๋กœ ์ €์žฅ๋œ๋‹ค. key๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐํšŒ๋œ๋‹ค.

- Value๋Š” ๋ฐ˜๋“œ์‹œ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•œ๋‹ค.

- ์ฟ ํ‚ค์™€ ๋”๋ถˆ์–ด ์›น ์Šคํ† ๋ฆฌ์ง€ ๊ฐ์ฒด ์—ญ์‹œ ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…(SOP)์„ ๋”ฐ๋ฅธ๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ ๋ณด์•ˆ์„ ์œ„ํ•ด ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด A ๋„๋ฉ”์ธ์—์„œ ์ €์žฅํ•œ ์›น ์Šคํ† ๋ฆฌ์ง€ ๋ฐ์ดํ„ฐ๋Š” B ๋„๋ฉ”์ธ์—์„œ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์‹์ด๋‹ค.

- LocalStorage์— ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ง€์šฐ์ง€ ์•Š๋Š” ํ•œ ์˜๊ตฌ์ ์œผ๋กœ ๋ณด๊ด€์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ณ  ๋‚จ์•„ ์žˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ vuex-persistedState๋Š” ์ด localStorage์— vuex์˜ state๋ฅผ ๋™๊ธฐํ™”ํ•ด์ค€๋‹ค.

- LocalStorage์— ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋˜ํ•œ ์ €์žฅ ์‹œ ๋„๋ฉ”์ธ๋งˆ๋‹ค ๋ณ„๋„์˜ ๋กœํ„ธ ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. Window์˜ ์ „์—ญ ๊ฐ์ฒด์ธ LocalStorage๋ผ๋Š” ์ปฌ๋ ‰์…˜์„ ํ†ตํ•ด ์ €์žฅ๊ณผ ์กฐํšŒ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.

- SessionStorage์— ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋Š” SessionStorage๋ผ๋Š” window์˜ ์ „์—ญ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ €์žฅ๊ณผ ์กฐํšŒ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ด๊ณณ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์ง€์†์ ์œผ๋กœ ๋ณด๊ด€๋˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€์†๋˜๋Š” ๋ฒ”์œ„๋Š” ํ˜„์žฌ ํŽ˜์ด์ง€๊ฐ€ ๋ธŒ๋ผ์šฐ์ง•๋˜๋Š” ๋ธŒ๋ผ์šฐ์ € ์ปจํ…์ŠคํŠธ ์•ˆ์—์„œ๋ฟ์ด๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋„ ํœ˜๋ฐœ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ƒˆ๋กœ ๊ณ ์นจํ•  ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ์ „ํžˆ ์กด์žฌํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

- SessionStorage๋Š” ๊ฐ™์€ ์‚ฌ์ดํŠธ์˜ ๋„๋ฉ”์ธ์ด๋ผ ํ• ์ง€๋ผ๋„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค๋ฅด๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ์˜์—ญ์œผ๋กœ ์ทจ๊ธ‰๋œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ๋”ฐ๋ผ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, Tab Browsing์ด๋‚˜ ์ƒˆ๋กœ์šด Browser๋ฅผ ์—ด์–ด ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๋‘ ํŽ˜์ด์ง€๋Š” ๋ณ„๊ฐœ์˜ ์ปจํ…์ŠคํŠธ๋กœ ๋ณ„๊ฐœ์˜ SessionStorage๋ฅผ ๊ฐ–๋Š”๋‹ค. ์„œ๋กœ ์นจ๋ฒ” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฐ™์€ ๋„๋ฉ”์ธ์ด๋ผ๋ฉด ์ „์—ญ์ ์œผ๋กœ ๊ณต์œ ๋˜๋Š” LocalStorage์™€ ๊ตฌ๋ถ„๋˜๋Š” ์ง€์ ์ด๋‹ค.

 

- ์ƒ๋‹น ๋ถ€๋ถ„์ด ์ฟ ํ‚ค์™€ ํก์‚ฌํ•ด๋ณด์ด์ง€๋งŒ, ์›น ์Šคํ† ๋ฆฌ์ง€ ๊ฐ์ฒด๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์‹œ ์„œ๋ฒ„๋กœ ์ „์†ก๋˜์ง€ ์•Š์•„, ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ๋น„์šฉ์„ ์ค„์—ฌ์ค„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์šฉ๋Ÿ‰์— ์ œํ•œ์ด ์žˆ๋Š” ์ฟ ํ‚ค์™€ ๋‹ค๋ฅด๊ฒŒ ๋งŽ์€ ์ž๋ฃŒ๋ฅผ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋ณ„๋กœ ์ผ์ • ์šฉ๋Ÿ‰ ์ด์ƒ์˜ ์›น ์Šคํ† ๋ฆฌ์ง€ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํผํฌ๋จผ์Šค๋ฅผ ์œ„ํ•ด vuex-persistedstate ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ธ ๋•Œ๋Š”, ๋ชจ๋“ˆ๋ณ„๋กœ ํ•„์š”ํ•œ state๋งŒ ๋”ฐ๋กœ ๋–ผ์–ด localStorage์— ์ €์žฅ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

- ํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ ์ƒ์—์„œ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์›น ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์–ธ์ œ๋‚˜ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์ž„์˜๋กœ ์ˆ˜์ •๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐฉ์–ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.