본문으로 건너뛰기
웹 프로젝트 기초집LESSON 15

localStorage: 테마와 UI 선택 상태를 브라우저에 저장하기

난이도초급
예상 시간45분
선수지식14강 문의 폼 검증

15강. localStorage: 테마와 UI 선택 상태를 브라우저에 저장하기

1. 이번 강의에서 해결할 문제

다크 테마를 선택해도 새로 고치면 초기 상태로 돌아갑니다. 민감하지 않은 UI 선택만 localStorage에 저장하고 실패해도 사이트가 동작하게 만듭니다.

2. 학습 목표

3. 핵심 개념

localStorage는 같은 출처에서 브라우저를 닫은 뒤에도 남는 문자열 저장소입니다. 사용자가 삭제할 수 있고 사생활 보호 모드나 정책에서 지속되지 않을 수 있으므로 필수 데이터 저장소가 아닙니다. 페이지 JavaScript가 읽을 수 있으므로 민감 정보, API Key, 비밀번호, 토큰과 개인정보를 넣지 않습니다.

4. 단계별 실습

HTML · 헤더에 추가

game-dev-portfolio/index.html
<button id="themeButton" type="button" aria-pressed="false">어두운 테마 사용</button>

CSS · 파일 경로: css/style.css

game-dev-portfolio/css/style.css
:root[data-theme="dark"] {
--color-bg: #101722;
--color-surface: #182235;
--color-text: #edf2f4;
--color-muted: #bdc8d4;
--color-border: #33445b;
}

JavaScript · 파일 경로: js/app.js

game-dev-portfolio/js/app.js
const themeButton = document.querySelector('#themeButton');

function applyTheme(theme) {
const dark = theme === 'dark';
document.documentElement.dataset.theme = dark ? 'dark' : 'light';
themeButton.setAttribute('aria-pressed', String(dark));
themeButton.textContent = dark ? '밝은 테마 사용' : '어두운 테마 사용';
}

let savedTheme = 'light';
try { savedTheme = localStorage.getItem('portfolio-theme') ?? 'light'; } catch {}
applyTheme(savedTheme);

themeButton.addEventListener('click', () => {
const next = document.documentElement.dataset.theme === 'dark' ? 'light' : 'dark';
applyTheme(next);
try { localStorage.setItem('portfolio-theme', next); } catch {}
});

개발자 도구 확인: Application → Local Storage에서 portfolio-theme 값이 바뀌는지 보고 새로 고침 뒤 복원되는지 확인합니다. 항목을 삭제하면 기본 밝은 테마여야 합니다.

5. 코드가 동작하는 이유

저장소에는 작은 문자열 상태만 넣고 실제 스타일은 루트의 data-theme에 따라 CSS 변수가 결정합니다. 저장소 접근 실패를 잡아도 메모리 상태와 버튼은 계속 작동합니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

localStorage: 테마와 UI 선택 상태를 브라우저에 저장하기 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“localStorage: 테마와 UI 선택 상태를 브라우저에 저장하기” 작업 전 검토에서 채택해야 할 안전 기준은 무엇인가요?
  2. 문제 2“localStorage: 테마와 UI 선택 상태를 브라우저에 저장하기”에서 ‘토큰·비밀번호 저장’ 문제가 생겼습니다. 가장 알맞은 진단 또는 대응은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

15강. localStorage: 테마와 UI 선택 상태를 브라우저에 저장하기 미완료 상태