localStorage는 웹 브라우저가 제공하는 Web Storage API 중 하나로, 도메인(같은 프로토콜, 도메인, 포트 기준) 내에서 영구적으로(브라우저 탭/창 닫아도 삭제 안 됨) 데이터를 저장할 수 있는 메커니즘입니다.
브라우저 내장 저장소
도메인 별 분리
https://example.com
과 https://sub.example.com
은 서로 다른 localStorage를 가짐.영구성
문자열 기반 저장
localStorage.setItem("user", JSON.stringify({ name: "Alice" }));
localStorage.setItem("username", "Alice");
const user = localStorage.getItem("username"); // "Alice"
localStorage.removeItem("username");
localStorage.clear();
const keyName = localStorage.key(0);
<!DOCTYPE html>
<html>
<head>
<title>localStorage 예제</title>
</head>
<body>
<input type="text" id="inputName" placeholder="이름 입력" />
<button id="saveBtn">저장</button>
<button id="loadBtn">불러오기</button>
<p id="result"></p>
<script>
const saveBtn = document.getElementById("saveBtn");
const loadBtn = document.getElementById("loadBtn");
const inputName = document.getElementById("inputName");
const result = document.getElementById("result");
// 저장 버튼 클릭 시 localStorage에 값 저장
saveBtn.addEventListener("click", () => {
const name = inputName.value;
localStorage.setItem("savedName", name);
alert("이름이 저장되었습니다.");
});
// 불러오기 버튼 클릭 시 localStorage에서 값 가져와 표시
loadBtn.addEventListener("click", () => {
const saved = localStorage.getItem("savedName");
if (saved) {
result.textContent = `저장된 이름: ${saved}`;
} else {
result.textContent = "저장된 이름이 없습니다.";
}
});
</script>
</body>
</html>
영구성
대용량 저장
네트워크 트래픽 절감
쉬운 사용
보안 이슈
동기적 API
문자열만 저장 가능
영구 저장
민감 정보 저장 금지
XSS 방지
데이터 암호화
특징 | localStorage | sessionStorage | 쿠키(Cookie) |
---|---|---|---|
영구성 | 브라우저 닫아도 데이터 유지 | 브라우저 탭/창 닫으면 삭제 | 만료 시간 또는 세션 종료 시 삭제 |
저장 위치 | 클라이언트(브라우저) | 클라이언트(브라우저) | 클라이언트(브라우저), 서버와 함께 사용 가능 |
용량 | 약 5MB(브라우저별 상이) | 약 5MB(브라우저별 상이) | 4KB 정도 |
서버 전송 | XHR/Fetch 등으로 수동 전송 | XHR/Fetch 등으로 수동 전송 | 요청 시 자동으로 헤더에 포함 |
보안 | XSS 공격 시 노출 가능 | XSS 공격 시 노출 가능 | HttpOnly 쿠키 사용 시 JS 접근 불가능 |
localStorage
는 웹 애플리케이션에서 영구적인 클라이언트 측 데이터 저장을 위해 사용되는 간단하고 강력한 API입니다. 쿠키보다 큰 데이터를 저장할 수 있고, 서버에 자동 전송되지 않아 트래픽을 줄일 수 있는 장점이 있습니다. 다만 보안 이슈(XSS)에 주의해야 하며, 민감한 정보를 저장하는 것은 권장되지 않습니다.