Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป๊ณต๋ถ€ ๊ธฐ๋ก/๐Ÿ“Œ Frontend

[Frontend] localStorage VS sessionStorage VS cookies

๋ฐ˜์‘ํ˜•

 

 

 

 

 

๐Ÿ’ป localStorage VS sessionStorage VS cookies ์ข…ํ•ฉ ๋น„๊ต

 

๐Ÿ“ฆ ์ €์žฅ์†Œ ๊ฐœ๋…

ํ•ญ๋ชฉ localStorage sessionStorage cookies
์ •์˜ ํด๋ผ์ด์–ธํŠธ์— ์˜๊ตฌ์ ์œผ๋กœ
๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” Web Storage
๋ธŒ๋ผ์šฐ์ € ํƒญ ์„ธ์…˜ ๋™์•ˆ๋งŒ
๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” Web Storage
ํด๋ผ์ด์–ธํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ 
์„œ๋ฒ„๋กœ ์ž๋™ ์ „์†ก๋˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ
์ €์žฅ ์œ„์น˜ ๋ธŒ๋ผ์šฐ์ € (๋„๋ฉ”์ธ๋ณ„) ๋ธŒ๋ผ์šฐ์ € ํƒญ (๋„๋ฉ”์ธ + ํƒญ ๋ณ„) ๋ธŒ๋ผ์šฐ์ € (๋„๋ฉ”์ธ + ๊ฒฝ๋กœ ๊ธฐ์ค€)
๋ฐ์ดํ„ฐ ํ˜•ํƒœ ๋ฌธ์ž์—ด(String)๋งŒ ์ €์žฅ ๊ฐ€๋Šฅ ๋ฌธ์ž์—ด(String)๋งŒ ์ €์žฅ ๊ฐ€๋Šฅ ๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜์˜ key=value ์Œ

 


๐Ÿงญ ๋™์ž‘ ๋ฐ ์ˆ˜๋ช…

ํ•ญ๋ชฉ localStorage sessoinStorage cookies
์ˆ˜๋ช… ๋ช…์‹œ์ ์œผ๋กœ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜
๋ธŒ๋ผ์šฐ์ € ์ดˆ๊ธฐํ™” ์ „๊นŒ์ง€ ์˜๊ตฌ ์ €์žฅ
ํƒญ์„ ๋‹ซ๊ฑฐ๋‚˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•  ๋•Œ ์ž๋™ ์‚ญ์ œ ๊ธฐ๋ณธ์€ ์„ธ์…˜ ๋™์•ˆ ์œ ์ง€,
๋งŒ๋ฃŒ ์‹œ๊ฐ„ ์„ค์ • ๊ฐ€๋Šฅ
(Max-Age, Expires)
ํƒญ ๊ฐ„ ๊ณต์œ  โœ… ๊ฐ€๋Šฅ โŒ ๋ถˆ๊ฐ€๋Šฅ (ํƒญ๋ณ„๋กœ ๋ถ„๋ฆฌ๋จ) โœ… ๊ฐ€๋Šฅ (๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜)
์ž๋™ ์ „์†ก ์—ฌ๋ถ€ โŒ ์„œ๋ฒ„ ์ „์†ก๋˜์ง€ ์•Š์Œ โŒ ์„œ๋ฒ„ ์ „์†ก๋˜์ง€ ์•Š์Œ โœ… ์š”์ฒญ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ์ „์†ก๋จ
(Cookie ํ—ค๋”)

 


๐Ÿ” ๋ณด์•ˆ ๋ฐ ์šฉ๋Ÿ‰

ํ•ญ๋ชฉ localStorage sessionStorage cookies
JavaScript ์ ‘๊ทผ โœ… ๊ฐ€๋Šฅ โœ… ๊ฐ€๋Šฅ โœ… ๊ธฐ๋ณธ ๊ฐ€๋Šฅ
โŒ HttpOnly ์„ค์ • ์‹œ ๋ถˆ๊ฐ€๋Šฅ
XSS ๊ณต๊ฒฉ โ— ๋งค์šฐ ์ทจ์•ฝ (JS ์ ‘๊ทผ ๊ฐ€๋Šฅ) โ— ๋งค์šฐ ์ทจ์•ฝ (JS ์ ‘๊ทผ ๊ฐ€๋Šฅ) โœ… HttpOnly๋กœ ๋ง‰์„ ์ˆ˜ ์žˆ์Œ
CSRF ๊ณต๊ฒฉ โœ… ์•ˆ์ „ (์ „์†ก ์•ˆ ๋จ) โœ… ์•ˆ์ „ (์ „์†ก ์•ˆ ๋จ) โ— SameSite ์„ค์ • ํ•„์š”
ํฌ๊ธฐ ์ œํ•œ ์•ฝ 5MB ์•ฝ 5MB ์•ฝ 4KB
๋ณด์•ˆ ๊ถŒ์žฅ ์„ค์ • ์‚ฌ์šฉ ์ตœ์†Œํ™” ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์งง์€ ์ƒํƒœ๊ฐ’๋งŒ ๋ณด๊ด€ HttpOnly
Secure
SameSite=Strict

 


๐ŸŽฏ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์˜ˆ์‹œ

ํ•ญ๋ชฉ localStorage sessionStorage cookies
๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€ โœ… Access Token ์ €์žฅ ์‹œ ์‚ฌ์šฉ๋จ
(์ฃผ์˜ ํ•„์š”)
โŒ ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ ์‹œ ์‚ฌ๋ผ์ง โœ… Refresh Token ์ €์žฅ
(๋ณด์•ˆ ๊ฐ•ํ™” ๊ฐ€๋Šฅ)
์‚ฌ์šฉ์ž ์„ค์ • ์ €์žฅ โœ… ํ…Œ๋งˆ, ์–ธ์–ด ์„ค์ • ๋“ฑ โœ… ๋น„ํšŒ์› ์ž…๋ ฅ๊ฐ’ ์ž„์‹œ ์ €์žฅ ๋“ฑ โŒ ๋น„ํšจ์œจ์ 
(์ž๋™ ์ „์†ก ๋ถ€๋‹ด ์žˆ์Œ)
์ธ์ฆ ๋ฐ ์„ธ์…˜ ๊ด€๋ฆฌ โŒ JS๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด ์œ„ํ—˜ โŒ ํœ˜๋ฐœ์„ฑ์ด ๊ฐ•ํ•จ โœ… ์„œ๋ฒ„ ์ค‘์‹ฌ ์ธ์ฆ์— ์ ํ•ฉ

 


๐Ÿ“š ๊ฒฐ๋ก 

๊ฐ ์ €์žฅ์†Œ๋Š” ์šฉ๋„์™€ ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์‚ฌ์šฉ ๋ฐฉ์‹์ด ์™„์ „ํžˆ ๋‹ฌ๋ผ์ง„๋‹ค.

๋”ฐ๋ผ์„œ ์•„๋ž˜์˜ ๊ธฐ์ค€์— ๋”ฐ๋ผ์„œ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

 

  • ๐Ÿ”’ ๋ณด์•ˆ ๋ฐ ์ธ์ฆ์ด ํ•„์š”ํ•œ ์ •๋ณด (ํŠนํžˆ Refresh Token)
    cookies (HttpOnly, Secure, SameSite ์„ค์ • ํ•„์ˆ˜)
  • โš™ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ ์„ค์ • / ์บ์‹œ / ๋น„๋กœ๊ทธ์ธ ์ƒํƒœ ๋ฐ์ดํ„ฐ ์œ ์ง€
    localStorage (๋ณด์•ˆ ์œ„ํ—˜์ด ๋‚ฎ์€ ๊ฒฝ์šฐ)
  • โœ๏ธ ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ ์ž„์‹œ ์ €์žฅ์ด ํ•„์š”ํ•œ ๊ฐ’ (ex. ํผ ๋ฐ์ดํ„ฐ, SPA ์ƒํƒœ ์œ ์ง€)
    sessionStorage
๋ฐ˜์‘ํ˜•