frontend/javascript

🟨 2-4. localStorage로 데이터 저장하고 불러오기 — 새로고침해도 남는 자바스크립트 데이터 관리

mirabo01 2025. 11. 7. 08:48

1. localStorage란 무엇인가

웹 브라우저에는 데이터를 저장할 수 있는 3대 저장소가 있다.

종류 지속성 크기 특징

localStorage ✅ 무기한 유지 약 5MB 새로고침/닫기 후에도 유지
sessionStorage ❌ 탭 닫으면 삭제 약 5MB 세션(탭) 단위 유지
cookie 서버 전송 가능 약 4KB 인증·추적용에 주로 사용

localStorage는 그중에서도 가장 간단하고,
사용자 브라우저에 직접 데이터를 남길 수 있는 기능이다.


2. 기본 문법 요약

// 저장하기
localStorage.setItem("key", "value");

// 불러오기
const value = localStorage.getItem("key");

// 삭제하기
localStorage.removeItem("key");

// 전체 비우기
localStorage.clear();

✅ 모든 데이터는 문자열(String) 로 저장된다.
객체나 배열을 저장할 때는 JSON으로 변환해야 한다.


3. 예시: 메모장 기능 만들기

이제 진짜 실습을 해보자.
입력한 메모를 저장하고, 새로고침 후에도 남는 기능을 구현한다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>localStorage 메모장</title>
  <style>
    body { font-family: sans-serif; margin: 40px; }
    textarea { width: 100%; height: 150px; border: 1px solid #ccc; border-radius: 6px; padding: 10px; }
    button { margin-top: 10px; padding: 8px 12px; border: none; border-radius: 6px; background: #4a90e2; color: #fff; cursor: pointer; }
    .status { margin-top: 10px; color: green; }
  </style>
</head>
<body>
  <h1>🗒️ 내 메모</h1>
  <textarea id="memo" placeholder="여기에 메모를 입력하세요..."></textarea>
  <button id="saveBtn">저장</button>
  <div class="status" id="status"></div>

  <script type="module" src="main.js"></script>
</body>
</html>

4. 자바스크립트 로직

// main.js
const memo = document.getElementById("memo");
const saveBtn = document.getElementById("saveBtn");
const status = document.getElementById("status");

// 페이지 로드 시 기존 메모 불러오기
window.addEventListener("load", () => {
  const saved = localStorage.getItem("myMemo");
  if (saved) memo.value = saved;
});

// 저장 버튼 클릭 시
saveBtn.addEventListener("click", () => {
  localStorage.setItem("myMemo", memo.value);
  status.textContent = "✅ 메모가 저장되었습니다!";
  setTimeout(() => (status.textContent = ""), 1500);
});

이렇게만 하면 페이지를 새로고침해도
localStorage에 저장된 내용이 그대로 유지된다.


5. 객체 형태로 저장하기

실무에서는 단순 문자열보다 객체 형태로 데이터를 관리하는 경우가 많다.

const user = { name: "기범", age: 27, job: "Frontend" };

// 객체 → 문자열
localStorage.setItem("user", JSON.stringify(user));

// 문자열 → 객체
const storedUser = JSON.parse(localStorage.getItem("user"));
console.log(storedUser.name); // "기범"

주의:
JSON.stringify / JSON.parse 를 꼭 써야 한다.
그렇지 않으면 [object Object]로 저장되어 쓸모가 없어진다.


6. 데이터 삭제 및 초기화

// 특정 데이터만 삭제
localStorage.removeItem("myMemo");

// 전체 초기화
localStorage.clear();

일반적으로 로그아웃, 초기화 버튼 클릭 시 이런 동작이 수행된다.


7. 실무 응용 예시

기능 localStorage 사용 방식

다크 모드 유지 theme: "dark" 저장 후 body class 변경
장바구니 유지 상품 배열을 JSON으로 저장
최근 본 상품 리스트를 push 후 5개까지만 유지
로그인 유지 JWT 토큰 저장 (단, 민감정보는 ❌)
체크박스 상태 기억 checked: true/false 저장

예시: 다크 모드 토글

<button id="toggleTheme">🌙 다크 모드</button>
const btn = document.getElementById("toggleTheme");
const body = document.body;

window.addEventListener("load", () => {
  const theme = localStorage.getItem("theme");
  if (theme === "dark") body.classList.add("dark");
});

btn.addEventListener("click", () => {
  body.classList.toggle("dark");
  const mode = body.classList.contains("dark") ? "dark" : "light";
  localStorage.setItem("theme", mode);
});

CSS

body.dark {
  background: #121212;
  color: white;
}

✅ 이제 새로고침해도 다크모드 상태가 유지된다.
이런 기능은 실제 쇼핑몰, 블로그, 앱에서도 자주 쓰인다.


8. sessionStorage와의 차이

sessionStorage는 탭 단위 저장소다.
즉, 같은 브라우저라도 새 창을 열면 데이터가 유지되지 않는다.

비교 항목 localStorage sessionStorage

유지 기간 무기한 탭 닫을 때까지
공유 범위 같은 도메인 내 모든 탭 현재 탭만
용도 로그인 유지, 다크모드, 장바구니 임시 검색 결과, 폼 상태

9. 보안과 주의사항

  • localStorage는 브라우저에 평문 저장된다.
    → 누구나 개발자 도구로 내용을 볼 수 있음
  • 비밀번호, 토큰, 개인정보는 절대 저장 금지
  • 민감한 데이터는 cookie + httpOnly 또는 서버 세션으로 관리해야 한다.

10. 요약 정리

주제 핵심 요약

저장소 개념 브라우저에 데이터를 저장하는 3가지 방식 중 하나
지속성 새로고침/닫기 후에도 유지
데이터 형식 문자열만 가능, 객체는 JSON으로 변환
실습 예시 메모장, 다크모드, 장바구니
주의사항 민감정보 저장 금지, 크기 제한(약 5MB)

11. 마무리

이제 당신은 브라우저 안에서도 작은 데이터베이스를 다룰 수 있게 되었다.
React, Vue 같은 프레임워크로 가도 이 개념은 그대로 적용된다.

결국 상태(State)를 어떻게 저장하고 복원하느냐가
프론트엔드의 본질이다.