Web Storage

Minsu Leeยท2023๋…„ 5์›” 9์ผ
4
post-thumbnail

โœจSEB FE 45๊ธฐ

์งˆ๋ฌธ๊ฒŒ์‹œํŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋œ ๋ถ€๋ถ„์ธ ์›น ์Šคํ† ๋ฆฌ์ง€, ๋กœ์ปฌ๊ณผ ์„ธ์…˜์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋‹ค๋ค„๋ณด์ž!

๐Ÿ’ก ์„ฑ๊ณต์€ ๋‹น์‹ ์ด ํ•˜๊ธธ ์›ํ•˜๋Š” ๊ฒƒ์„ ํ•  ๋•Œ ๋”ฐ๋ผ์˜จ๋‹ค. ์ด๊ฒƒ์ด ์œ ์ผํ•œ ์„ฑ๊ณต์˜ ๋น„๊ฒฐ์ด๋‹ค.
"Success follows doing what you want to do. There is no other way to be successful." -๋ง์ฝค ํฌ๋ธŒ์Šค


๐Ÿ“Œ Web Storage

HTML5 ์ด์ „์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋“  ์„œ๋ฒ„ ์š”์ฒญ์— ํฌํ•จ๋œ ์ฟ ํ‚ค์— ์ €์žฅํ•ด์•ผ ํ–ˆ๋‹ค.

HTML Web Storage?
Web Storage๋ž€ HTML5๋ถ€ํ„ฐ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ํ•ด๋‹น ๋„๋ฉ”์ธ๊ณผ ๊ด€๋ จ๋œ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋ผ ํด๋ผ์ด์–ธํŠธ ์›น๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. (์ฟ ํ‚ค(cookie)์™€ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ)

Web Storage API๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ง๊ด€์ ์ธ ๋ฐฉ์‹์œผ๋กœ ํ‚ค/๊ฐ’ ์Œ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค. Web Storage API

  • ์›น ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ๋กœ์ปฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์›น ์ €์žฅ์†Œ๋Š” ๋” ์•ˆ์ „ํ•˜๊ณ  ์›น ์‚ฌ์ดํŠธ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ์ปฌ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Web Storage์˜ ๊ฐœ๋…์€ ํ‚ค/๊ฐ’ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.

  • ์ฟ ํ‚ค์™€ ๋‹ฌ๋ฆฌ ์ €์žฅํ•œ๋„๋Š” ๋” ํฌ๊ณ (์ตœ์†Œ 5MB), ์ •๋ณด๊ฐ€ ์„œ๋ฒ„๋กœ ์ „์†ก๋˜์ง€ ์•Š๋Š”๋‹ค.

  • ์„œ๋ฒ„์— ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฌธ์ž์—ด ์™ธ์—๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ์›์‹œํ˜• ๋ฐ์ดํ„ฐ์™€ ๊ฐ์ฒด ์ €์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ๋„๋ฉ”์ธ ๋‹จ์œ„๋กœ ์ ‘๊ทผ์ด ์ œํ•œ๋˜๋Š” CORS ํŠน์„ฑ ๋•๋ถ„์— CSRF๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๋‹ค.

๐Ÿ” localStorage & sessionStorage

๐ŸŒฑHTML ์›น ์ €์žฅ์†Œ๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ๊ฐœ์ฒด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.๐ŸŒฑ

โ—ฝ window.localStorage- ๋งŒ๋ฃŒ ๋‚ ์งœ๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ

  • ์˜๊ตฌ ์ €์žฅ์†Œ, ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•˜๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ด์–ด๋„ ๊ณ„์† ์œ ์ง€๋œ๋‹ค.

โ—ฝ window.sessionStorage- ํ•œ ์„ธ์…˜์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ(๋ธŒ๋ผ์šฐ์ € ํƒญ์„ ๋‹ซ์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋จ)

  • ์ž„์‹œ์ €์žฅ์†Œ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—ด๋ ค์žˆ๋Š” ํ•œ ํŽ˜์ด์ง€๋ฅผ Reloadํ•ด๋„ ๊ณ„์† ์œ ์ง€๋œ๋‹ค. (๋‹ซ์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋จ)

๋‘ ์Šคํ† ๋ฆฌ์ง€ ๊ฐ์ฒด๋Š” ๋™์ผํ•œ ๋ฉ”์„œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

setItem(key, value) โ€“ ํ‚ค-๊ฐ’ ์Œ์„ ๋ณด๊ด€

//key๊ฐ€ "test"๊ณ , value๊ฐ€ "1"์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ  
localStorage.setItem('test', 1);
sessionStorage.setItem('test', 1);

getItem(key) โ€“ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฐ›์•„์˜ด

//key๊ฐ€ "test"์ธ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
localStorage.getItem('test');
sessionStorage.getItem('test');

removeItem(key) โ€“ ํ‚ค์™€ ํ•ด๋‹น ๊ฐ’์„ ์‚ญ์ œ

//key๊ฐ€ "test"์ธ ๋ฐ์ดํ„ฐ ์‚ญ์ œ
localStorage.removeItem('test');
sessionStorage.removeItem('test');

clear() โ€“ ๋ชจ๋“  ๊ฒƒ์„ ์‚ญ์ œ

//key๊ฐ€ "test"์ธ ๋ฐ์ดํ„ฐ ์‚ญ์ œ
localStorage.clear();
sessionStorage.clear();

key(index) โ€“ ์ธ๋ฑ์Šค(index)์— ํ•ด๋‹นํ•˜๋Š” ํ‚ค๋ฅผ ๋ฐ›์•„์˜ด

//index์— ํ•ด๋‹นํ•˜๋Š” ํ‚ค๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.
localStorage.key(index);
sessionStorage.key(index);

length โ€“ ์ €์žฅ๋œ ํ•ญ๋ชฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ์–ป์Œ

//์Šคํ† ๋ฆฌ์ง€์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ์–ป๋Š”๋‹ค.
localStorage.length;
sessionStorage.length;

ํ‚ค ์ˆœํšŒ ๋ฐฉ๋ฒ•!
(์Šคํ† ๋ฆฌ์ง€์˜ ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณทํ•˜๋ฉด์„œ ํ‚ค๋ฅผ ๋„ฃ์–ด ์ˆœํšŒํ•œ๋‹ค.)

for(let i=0; i<localStorage.length; i++) {
  let key = localStorage.key(i);
  alert(`${key}: ${localStorage.getItem(key)}`);
}

๐ŸŒฑlocalStorage & sessionStorage์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ๐ŸŒฑ

ํ‚ค์™€ ๊ฐ’์€ ๋ฐ˜๋“œ์‹œ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•œ๋‹ค.
์ œํ•œ ์šฉ๋Ÿ‰์€ 5MB ์ด์ƒ์ธ๋ฐ, ๋ธŒ๋ผ์šฐ์ €์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒ๊ธฐ๋˜์ง€ ์•Š๋Š”๋‹ค.
์˜ค๋ฆฌ์ง„(๋„๋ฉ”์ธยทํฌํŠธยทํ”„๋กœํ† ์ฝœ)์— ๋ฌถ์—ฌ์žˆ๋‹ค.

๋‘ ์Šคํ† ๋ฆฌ์ง€ ๊ฐ์ฒด๋Š” Map๊ณผ ์œ ์‚ฌํ•˜๋‹ค. setItem/getItem/removeItem์„ ์ง€์›ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด ํ‚ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ (key(index))์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

๐ŸŒฑ localStorage & sessionStorage ๋น„๊ต ๐ŸŒฑ

localStoragesessionStorage
์˜ค๋ฆฌ์ง„์ด ๊ฐ™์€ ํƒญ, ์ฐฝ ์ „์ฒด์—์„œ ๊ณต์œ ๋œ๋‹ค.์˜ค๋ฆฌ์ง„์ด ๊ฐ™์€ ๋ธŒ๋ผ์šฐ์ € ํƒญ, iframe์—์„œ ๊ณต์œ ๋œ๋‹ค.
ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์นจ ํ•ด๋„ ๋‚จ์•„์žˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๊ป๋‹ค ์ผœ๋„ ๋‚จ์•„์žˆ๋‹ค.ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์นจ ํ•ด๋„ ๋‚จ์•„์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํƒญ์ด๋‚˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ์‚ฌ๋ผ์ง„๋‹ค.

โœจ๋งˆ๋ฌด๋ฆฌ

storage์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋‹ค๊ฐ€ ์กฐ๊ธˆ ์ •๋ฆฌํ•ด ๋†“์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ, ๋”ฐ๋กœ ๊ธ€์„ ์“ฐ๊ฒŒ ๋˜์—ˆ๋‹ค. ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅํ•œ๋‹ค๋‹ˆ..! ใ…Žใ…Ž ์‹ ๊ธฐํ•˜๋‹น..๐Ÿ‘€
ํ™•์‹คํžˆ ๊ธ€์„ ์“ฐ๋ฉด์„œ ์ •๋ฆฌํ•˜๋‹ˆ๊นŒ ๊ฐœ๋…์ดํ•ด๋Š” ํ™•์‹คํ•˜๊ฒŒ ๋˜๋Š” ๊ธฐ๋ถ„! ๋‹ค์Œ์—๋Š” ์ฟ ํ‚ค์— ๋Œ€ํ•ด์„œ๋„ ํ•œ ๋ฒˆ ๊ณต๋ถ€์•ผ๊ฒ ๋‹ค!

profile
๋น™๊ธ€๋น™๊ธ€

0๊ฐœ์˜ ๋Œ“๊ธ€