반응형
웹 개발을 하다보면 사용자의 정보를 브라우저에 잠깐 저장해야 할 일이 많습니다. 예로 들어서, 로그인 상태 유지나 장바구니 정보 저장 같은 기능이 있죠.
이때 서버에 요청하지 않고 브라우저에 데이터를 잠깐 저장해두는 기술이 바로 오늘의 주제, 웹 스토리지(Web Storage)인데요,
오늘은 웹 스토리지가 무엇인지, 그리고 그 종류에 대해서도 자세히 알아보겠습니다.
💡 웹 스토리지가 뭐예요?
웹 스토리지는 HTML5에서 새롭게 도입된 기능으로, 쿠키보다 훨씬 강력한 데이터 저장 방식입니다.
JavaScript를 통해 브라우저(클라이언트)에 데이터를 저장하는 공간이에요.
서버로 전송되지 않아서, 빠르고 가볍게 사용할 수 있어요.
📍 웹 스토리지의 특징
- 브라우저 내에 저장됨 (클라이언트 저장소)
- 서버로 자동 전송되지 않음 (쿠키와 다름)
- 최대 용량 약 5MB 이상 (브라우저마다 차이 있음)
- 저장 형식은 문자열(key-value 형태)
📂 웹 스토리지 종류는?
종류 | 설명 |
localStorage | 브라우저를 꺼도 남아 있는 지속 저장소 |
sessionStorage | 탭을 닫으면 사라지는 일시 저장소 |
🔍 localStorage vs sessionStorage 차이점 정리
항목 | localStorage | sessionStorage |
데이터 유지 기간 | 브라우저를 꺼도 유지됨 | 탭(세션)을 닫으면 사라짐 |
저장 범위 | 도메인 전체에서 접근 가능 | 해당 탭에서만 접근 가능 |
저장 위치 | 클라이언트 브라우저 | 클라이언트 브라우저 |
용량 제한 | 약 5MB (브라우저마다 다름) | 약 5MB (브라우저마다 다름) |
사용 예시 | 자동 로그인, 다크모드, 유저 설정 등 | 장바구니, 입력 폼 임시 저장 등 |
브라우저 간 공유 | ❌ 안 됨 (브라우저/기기별로 다름) | ❌ 안 됨 |
API | localStorage.setItem(key, value) 등 | sessionStorage.setItem(key, value) 등 |
💡 차이 핵심 요약
- localStorage: 브라우저가 꺼져도 데이터가 살아있음
→ 장기 보관용, 예: 로그인 유지, 다크모드 설정 저장 - sessionStorage: 탭을 닫으면 날아감
→ 임시 저장용, 예: 로그인 중인 특정 탭만 유지, 폼 자동완성
🛠️ 사용 예시 코드
// 저장
localStorage.setItem("username", "daeun");
sessionStorage.setItem("token", "abc123");
// 불러오기
console.log(localStorage.getItem("username")); // "daeun"
console.log(sessionStorage.getItem("token")); // "abc123"
// 삭제
localStorage.removeItem("username");
sessionStorage.clear();
🍪 쿠키랑 뭐가 다를까?
🧚♂️ 쿠키란?
쿠키는 웹 브라우저가 서버와 주고받는 작은 데이터 조각입니다.
사용자의 정보를 브라우저에 저장하고, 이후 서버로 자동 전송되는 특징이 있어요.
✔️ 예를 들자면:
- 쇼핑몰에서 장바구니 상태를 저장해두기
- 로그인 상태 기억하기
- 광고 추적용 사용자 식별하기
이런 정보들을 쿠키에 저장해두면, 사용자가 다음에 방문했을 때도 상태를 유지할 수 있어요.
🍏 쿠키의 주요 특징
항목 | 설명 |
저장 위치 | 브라우저 내부, 그리고 서버로 자동 전송됨 |
용량 제한 | 약 4KB |
수명 설정 | expires, max-age로 유효 기간 설정 가능 |
사용 목적 | 인증 유지, 세션 관리, 트래킹 등 |
HTTP 요청 시 | 서버에 자동 포함되어 전송됨 |
💻 예시
// 쿠키 저장
document.cookie = "username=Daeun; max-age=3600";
// 쿠키 읽기
console.log(document.cookie); // username=Daeun
// 쿠키 삭제 (max-age를 0으로)
document.cookie = "username=; max-age=0";
❗쿠키는 문자열로만 저장 가능하고, 수동으로 파싱해서 써야 하므로 다루기 조금 번거롭습니다.
🧐 그래서 쿠키랑 뭐가 다른데요?
항목 | 쿠키 | 웹 스토리지 |
저장 위치 | 브라우저 + 서버 전송 | 브라우저 전용 |
서버 전송 여부 | 요청마다 서버로 자동 전송됨 | ❌ 브라우저에만 저장 |
용량 제한 | 약 4KB | 약 5MB 이상 |
만료 설정 | expires, max-age 설정 가능 | local: 영구 / session: 탭 종료 시 삭제 |
사용 목적 | 인증, 세션 유지 등 | 프론트 상태 저장, 환경 저장, 테마 등 |
접근 방식 | document.cookie 사용 (불편) | .setItem(), getItem() 등 간단함 |
❓언제 어떤 걸 써야 할까?
상황 | 쿠키(Cookie) | localStorage | sessionStorage |
✅ 로그인 상태 유지 | 적합 (서버에 전송되어 인증 유지에 사용) |
❌ 보안에 취약 / 직접 구현 필요 | ❌ 탭 닫으면 사라짐 |
✅ 사용자 설정(다크모드, 언어 등) | ❌ 서버에 불필요한 전송 발생 | 적합 (영구 저장) | ❌ 탭 닫으면 초기화됨 |
✅ 입력 폼 임시 저장 | ❌ 서버 전송 불필요 | 가능하나 브라우저 닫을 때까지 남음 | 적합 (탭 닫으면 사라짐) |
✅ 장바구니 상태 유지 | ❌ 용량 제한 큼, 관리 어려움 | 적합 (긴 기간 유지 필요 시) | 적합 (짧은 세션 동안 유지할 때) |
✅ 사용자 활동 추적/광고 식별 | 적합 (서버로 자동 전송됨) | ❌ 서버와 연동 불가 | ❌ 서버와 연동 불가 |
✅ 서버와 자동 동기화가 필요한 경우 | 적합 | ❌ 수동으로 전송해야 함 | ❌ 수동으로 전송해야 함 |
✅ 보안이 중요한 정보 저장 | ❌ 브라우저에 노출됨 (HTTPS, Secure 설정 필요) | ❌ 민감 정보 저장 금지 | ❌ 민감 정보 저장 금지 |
🧚♂️ 요약 정리
- 쿠키: 인증/세션 유지 등 서버와 자동 통신이 필요한 정보
- 로그인 인증 유지(세션 쿠키) - 서버에 토큰이나 세션ID를 저장해두고, 사용자가 재방문해도 로그인 상태 유지
- 광고 트래킹 / 유저 식별 (사용자 행동 추적, A/B 테스트 식별자 등 마케팅에 활용)
- 서버 간 요청 상태 유지 (보안상 이유로 클라이언트-서버 사이 상태값 저장)
- 최근 본 상품 (사용자 별로 최근 본 상품 정보를 서버와 연동하기 위해 사용)
- localStorage: 사용자 설정처럼 오래 보존해야 하는 클라이언트 정보
- 다크모드 / 테마설정 저장 (어떤 테마 썼는지 기억 후, 다음 접속 시에도 유지)
- 자동 로그인 여부 기억 (사용자가 '자동 로그인'을 선택했는지 저장)
- 즐겨찾기 / 찜 목록
- 설문 응답 여부 / 알림 닫기 여부 (특정 팝업 다시 보지 않기 등 선택 상태 유지)
- sessionStorage: 탭 단위로 일시적인 정보 저장에 적합
- 입력 폼 자동 저장 (사용자가 탭을 새로고침하거나 뒤로 가도 입력값이 유지됨)
- 장바구니 임시 저장 (로그인 안 한 상태) - 로그인 전 장바구니 정보를 임시 저장. 탭 닫으면 사라짐
- 페이지 간 데이터 전달 (ex. step1 -> step2)
- 결제 진행 상태 저장 (단일 세션 동안만 필요한 정보 저장)
🆗 추천 기준 요약
상황 | 추천 |
인증/보안 중심 | 쿠키 |
장기 설정 저장 | localStorage |
탭 단위 임시 상태 | sessionStorage |
✨ 마무리
저도 가끔 언제 어느 상황에서 쿠키, localStorage, sessionStorage를 사용해야할지 헷갈린 경우가 많았었는데요.
각 특징을 알고 비교해보니 의문점이 해결되었어요.
앞으로 개발할 때에는 상황에 맞게 각 특성을 생각해서 적절한 것을 선택하여 사용해야겠습니다.
반응형
'CS' 카테고리의 다른 글
브라우저 렌더링 성능 최적화! Reflow vs Repaint 완전 정리 (1) | 2025.06.27 |
---|---|
브라우저에 www.naver.com을 입력하면 무슨 일이 일어날까요? (1) | 2025.06.27 |
콜백은 왜 불편했을까? 자바스크립트 비동기의 발전 과정 한눈에 보기 (2) | 2025.06.25 |
동기? 비동기? 밥 먹고 카톡하면서 이해해보자 (0) | 2025.06.25 |
CORS 에러가 뭔데 자꾸 막는 건데? (프록시로 뚫자!) (1) | 2025.06.25 |