
๐พ localStorate
localStorage๋ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๊ณตํ๋ Web Storage API์ ํ ์ข ๋ฅ๋ก,
ํค-๊ฐ ํํ์ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ ์ธก์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ ์ ์๊ฒ ํด์ค๋ค.
๐งฉ ๊ฐ๋ ์ ๋ฆฌ
๐ข ์ ์
localStorage๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ ์ฅํ๊ณ , ์ ์งํ ์ ์๊ฒ ํด์ฃผ๋ ์ ์ฅ์์ด๋ค.
๐ ๋น์
๋ธ๋ผ์ฐ์ ์์ ์๋ ์ด์ ์๋ ์ฌ๋ฌผํจ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ธ์ ๋ ๊บผ๋ด ์ธ ์ ์์ง๋ง, ๋ณด์์ด ํ์ ํ๊ณ ๋๊ตฌ๋ ์ด ์ ์๋ค๋ ํ๊ณ๊ฐ ์๋ค.
๐๐ปโ๏ธ ๋์ ๋ฐฉ์
1๏ธโฃ ์ ์ฅ ๊ฐ๋ฅํ ์์น์ ์กฐ๊ฑด
- localStorage๋ ๋๋ฉ์ธ ๋ณ๋ก ๋ถ๋ฆฌ๋ ๊ณต๊ฐ์ ์ ๊ณตํ๋ค.
์๋ฅผ ๋ค์ด https://example.com์ localStorage๋ https://another.com ์์๋ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค. - ๋ธ๋ผ์ฐ์ ๋ง๋ค, ์ฌ์ฉ์ ๊ณ์ ๋ง๋ค ๋ณ๋๋ก ์กด์ฌํ๋ค.
2๏ธโฃ ๋ฐ์ดํฐ ์ ์ฅ๊ณผ ์ฝ๊ธฐ
// ์ ์ฅ
localStoarge.setItem("accessToken", "adfsdfoKDFJ...");
// ์กฐํ
const token = localStorage.getItem("accessToken");
// ์ญ์
localStorage.removeItem("accessToken");
// ์ ์ฒด ์ด๊ธฐํ
localStorage.clear();
์ด๋, ๋ฌธ์์ด (String) ํํ๋ก๋ง ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ค๋ฉด ์๋์ ๊ฐ์ด JSON ๋ณํ์ด ํ์ํ๋ค.
localStorage.setItem("user", JSON.stringify({ name: "soyeon" }));
const user = JSON.parse(localStorage.getItem("user"));
3๏ธโฃ ๋ฐ์ดํฐ ์ง์์ฑ (Persistence)
ํ ๋ฒ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจ ํ๊ฑฐ๋, ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ป๋ค ํค๊ฑฐ๋, ๋ค์ ๋ฐฉ๋ฌธํด๋ ์ ์ง๋๋ค.
์ด๋ฌํ ํน์ฑ ๋๋ถ์ localStorage๋ ๋ก๊ทธ์ธ ์ํ ์ ์ง, ์ฌ์ฉ์ ํ ๋ง (ex. ๋คํฌ ๋ชจ๋), ๋ง์ง๋ง ์์น ๊ธฐ์ต ๋ฑ ์ฌ์ฉ์ ๊ฒฝํ (UX)์ ๊ฐ์ ํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
4๏ธโฃ ์ญ์ ์กฐ๊ฑด๊ณผ ์์ธ ์ํฉ
localStorage๋ ์ ๋์ ์ผ๋ก ์์ ํ ๊ฒ์ ์๋๊ณ , ์๋์ ๊ฐ์ ์กฐ๊ฑด์์ ๋ฐ์ดํฐ๋ ์ธ์ ๋ ์ง ์ฌ๋ผ์ง ์ ์๋ค.
- ์ฌ์ฉ์๊ฐ ๊ฐ๋ฐ์ ๋๊ตฌ (F12)์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๊ฒฝ์ฐ
- ๋ธ๋ผ์ฐ์ ์ ์ค์ ์์ "์บ์ ๋ฐ ์ฌ์ดํธ ๋ฐ์ดํฐ ์ญ์ "๋ฅผ ์ํํ ๊ฒฝ์ฐ
- ์ํฌ๋ฆฟ ๋ชจ๋(Incognito)์์ ์ ์ํ ๊ฒฝ์ฐ
→ ์ํฌ๋ฆฟ ๋ชจ๋ ์ข ๋ฃ์ ํจ๊ป ์ ์ฅ๋ ๋ชจ๋ localStorage ๋ฐ์ดํฐ๋ ํจ๊ป ์ฌ๋ผ์ง๋ค. - ์น ์คํ ๋ฆฌ์ง ์ฉ๋ ์ด๊ณผ
→ ๋ธ๋ผ์ฐ์ ๋ง๋ค ๋๋ฉ์ธ๋น ๋๋ต 5MB ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๊ณผ ์ ์์ธ๊ฐ ๋ฐ์ํ๋ค.
๐ ๋ณด์์ ์ธก๋ฉด
localStorage์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ์์์ ๋ดค๋ฏ์ด JavaScript๋ก ์ฝ๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์
๋ง์ฝ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์ฝ์ ๋๋ฉด ๊ณต๊ฒฉ์๊ฐ ํ ํฐ์ ํ์ทจํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค.
์๋ฅผ ๋ค์ด ๊ณต๊ฒฉ์๊ฐ ๋๊ธ์ด๋ ๊ฒ์์ฐฝ ๋ฑ์ <script> ํ๊ทธ๋ฅผ ์ฝ์ ํด๋๋ฉด,
ํด๋น ํ์ด์ง๋ฅผ ์ด์๋ง์ JavaScript๊ฐ ์คํ๋๊ณ localStorage์ ์ ๊ทผํด์
๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ํ์ทจํ ํ ์ธ๋ถ ์๋ฒ๋ก ์ ์กํ ์๋ ์๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ๋ฏผ๊ฐํ ์ ๋ณด (Access Token, Refresh Token, ๋น๋ฐ๋ฒํธ ๋ฑ)๋ localStorage์ ์ ์ฅํ์ง ์๋ ๊ฒ์ด ์์น์ด๋ค.
๋ง์ฝ ๋ถ๊ฐํผํ๊ฒ ๊ผญ ์ ์ฅํด์ผ ํ๋ค๊ณ ํ๋๋ผ๋,
Access Token ์ ๋๋ง ์ต์ํ์ผ๋ก ์ ์ฅํ๊ณ , Refresh Token์ ์ ๋ ์ ์ฅํ๋ฉด ์ ๋๋ค.
๐ฆ localStorage VS ์ฟ ํค
| ํญ๋ชฉ | localStorage | Cookies |
| ์ ์ฅ ์ฉ๋ | ์ฝ 5MB | ์ฝ 4KB |
| ์๋ ์ ์ก | โ (์ง์ ํค๋์ ๋ฃ์ด์ผ ํจ) | โ (๋งค ์์ฒญ๋ง๋ค ์๋ฒ์ ์๋ ์ ์ก๋จ) |
| ์ ๊ทผ ๋ฐฉ์ | JavaScript์์ ์ ๊ทผ ๊ฐ๋ฅ | JavaScript ๋๋ ์๋ฒ(HttpOnly) |
| ๋ณด์์ฑ | โ๏ธ XSS์ ๋งค์ฐ ์ทจ์ฝ | HttpOnly, Secure ์ค์ ์ ์๋์ ์ผ๋ก ์์ |
| ์ฌ์ฉ ์ฉ๋ | ์ฌ์ฉ์ ์ค์ , Access Token | ์ธ์ , ์ธ์ฆ ์ฟ ํค, Refresh Token |
๐ ๊ฒฐ๋ก
- localStorage๋ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ ์ ์ฅํ ์ ์๋ ๋งค์ฐ ํธ๋ฆฌํ ์ ์ฅ์์ด๋ค.
- ํ์ง๋ง, ์ธ์ ๋ ์ฌ์ฉ์ ์กฐ์์ด๋ ๋ธ๋ผ์ฐ์ ์ค์ ์ผ๋ก ์ญ์ ๋ ์ ์๋ค๋ ์ ์ ๊ณ ๋ คํด์ผ ํ๋ค.
- ํนํ, ๋ณด์์ ์ทจ์ฝํ ์ ์ฅ์์ด๋ฏ๋ก, ๋ฏผ๊ฐํ ์ ๋ณด๋ ์ ์ฅํ์ง ์๋ ๊ฒ์ด ์์น์ด๋ค.
- ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ (๋คํฌ๋ชจ๋, ์ต๊ทผ ๋ณธ ํญ๋ชฉ ๋ฑ)์๋ ๋งค์ฐ ํจ๊ณผ์ ์ด์ง๋ง, ์ธ์ฆ ๊ด๋ จ ์ ๋ณด ์ ์ฅ์๋ ์ ์คํจ์ด ์๊ตฌ๋๋ค.
'๐ป๊ณต๋ถ ๊ธฐ๋ก > ๐ Frontend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Frontend] Cookies (0) | 2025.06.28 |
|---|---|
| [Frontend] sessionStorage (1) | 2025.06.28 |
| [Frontend] Zustand (0) | 2025.06.21 |
| [Frontend] ๋ฐฐ์ด ๊ตฌ์กฐ ๋ถํด ํ ๋น (Array Destructuring) (0) | 2025.06.16 |
| [Frontend] ํ์ ์คํฌ๋ฆฝํธ์์ const ๋? (0) | 2025.06.16 |