
웹 개발을 하다 보면 클라이언트에 데이터를 저장해야 할 때가 정말 많습니다.
이럴 때 자주 사용하는 기술이 바로 로컬 스토리지(Local Storage), 세션 스토리지(Session Storage), 그리고 쿠키(Cookie)입니다.
하지만 이 3가지 개념을 정확하게 구분하고 목적에 맞게 사용하는 사람은 의외로 많지 않습니다.
이 글에서는 단순한 개념 정리를 넘어서, 실제 프로젝트에서 언제 무엇을 써야 할지까지 깊이 있게 다뤄보겠습니다.
브라우저에서 데이터를 저장하는 이유는 아주 다양합니다.
이런 데이터를 클라이언트에 저장하려면, 세션스토리지, 로컬스토리지, 쿠키 중 하나를 사용해야 합니다.
Web Storage API는 브라우저에서 데이터를 key-value 형태로 저장할 수 있는 기능을 제공합니다.
이 API는 두 가지 저장소를 제공합니다:
localStorage.setItem("nickname", "소은");
localStorage.getItem("nickname"); // "소은"
localStorage.removeItem("nickname");
주의할 점
sessionStorage.setItem("isModalOpen", "true");
sessionStorage.getItem("isModalOpen"); // "true"
sessionStorage.clear();
어디에 쓰일까?
쿠키는 사실 웹 스토리지보다 훨씬 오래된 기술입니다.
HTTP 통신 초창기부터 사용자의 상태 유지를 위해 만들어졌고, 지금도 여전히 많이 사용됩니다.
document.cookie = "authToken=abc123; max-age=3600; path=/;";
console.log(document.cookie);
보안 설정 예시
HttpOnly: 자바스크립트에서 접근 불가 (XSS 방지)Secure: HTTPS 연결에서만 전송SameSite=Strict: 타 도메인 요청에서 전송 금지 (CSRF 방지)| 항목 | 로컬 스토리지 | 세션 스토리지 | 쿠키 |
|---|---|---|---|
| XSS 공격 위험 | 높음 | 높음 | 낮음 (HttpOnly 설정 시) |
| CSRF 위험 | 없음 | 없음 | 있음 (SameSite 설정 필수) |
| 서버 자동 전송 여부 | 없음 | 없음 | 있음 |
| 민감 정보 저장 | 비추천 | 비추천 | 가능 (조건 설정 시) |
서버에서 로그인 정보를 저장할 때, 쿠키에
access token또는session id를 저장하는 경우가 많습니다.
예시) 다크모드 설정, 최근 본 페이지, 쇼핑몰 장바구니 등
예시) 팝업창 상태 저장, 현재 진행 중인 설문 응답 등
| 항목 | 로컬 스토리지 | 세션 스토리지 | 쿠키 |
|---|---|---|---|
| 저장 위치 | 클라이언트 | 클라이언트 | 클라이언트 + 서버 |
| 용량 제한 | 약 5~10MB | 약 5~10MB | 4KB 이하 |
| 만료 시점 | 직접 삭제 전까지 | 탭 종료 시 | 설정에 따라 달라짐 |
| 서버 전송 | X | X | O |
| 브라우저 탭 간 공유 | O | X | O |
| 접근 방식 | JavaScript | JavaScript | HTTP + JavaScript |
| 주 사용 용도 | 설정값, 캐싱 등 | UI 임시 상태 | 인증, 추적, 로그인 유지 |
그리고 무엇보다 중요한 건,
절대 민감한 정보를 로컬/세션 스토리지에 저장하지 않는 것!이 중요합니다!
쿠키, 로컬스토리지, 세션스토리지는 모두 쓰임새가 다릅니다.
단순히 데이터를 저장한다고 해서 무조건 로컬스토리지를 쓰는 것이 아니라,
데이터의 특성과 보안 요구 수준에 따라 적절한 저장 방식을 선택하는 습관이 필요합니다.
이 글이 여러분의 웹 프로젝트에 도움이 되길 바랍니다!