웹 애플리케이션에서 데이터를 저장하는 방식에는 쿠키(Cookie), 세션 스토리지(Session Storage), 로컬 스토리지(Local Storage)가 있다.
각각의 특징과 사용 목적이 다르므로 적절한 상황에 맞춰 선택하는 것이 중요하다.
쿠키는 클라이언트와 서버 간 데이터를 주고받기 위한 저장소로, 주로 사용자 인증 정보, 세션 정보, 설정값을 저장하는 데 사용된다.
| 항목 | 설명 |
|---|---|
| 데이터 저장 위치 | 클라이언트(브라우저) |
| 데이터 용량 | 최대 4KB |
| 데이터 만료 | 수동 설정 가능 (expires 속성 사용) |
| 보안 | X (보안이 약함, HTTPOnly 및 Secure 옵션 필요) |
| 전송 방식 | 자동으로 서버와 주고받음 |
| 탭/창 공유 여부 | 같은 도메인 내에서 공유 가능 |
document.cookie = "username=Eunbi; expires=Fri, 31 Dec 2025 23:59:59 GMT; path=/";
expires: 쿠키 만료일 설정path: 쿠키의 적용 범위 지정 (/는 모든 페이지에서 사용 가능)세션 스토리지는 브라우저의 세션(탭이나 창) 동안 데이터를 유지하며, 탭이 닫히면 데이터가 사라진다.
| 항목 | 설명 |
|---|---|
| 데이터 저장 위치 | 클라이언트(브라우저) |
| 데이터 용량 | 약 5MB |
| 데이터 만료 | 브라우저 탭/창을 닫을 때 삭제됨 |
| 보안 | 비교적 안전 (자동 삭제) |
| 전송 방식 | 서버와 자동 전송되지 않음 |
| 탭/창 공유 여부 | 다른 탭/창에서는 접근 불가 |
// 데이터 저장
sessionStorage.setItem("username", "Eunbi");
// 데이터 가져오기
const username = sessionStorage.getItem("username");
// 데이터 삭제
sessionStorage.removeItem("username");
// 모든 데이터 삭제
sessionStorage.clear();
로컬 스토리지는 브라우저를 닫아도 데이터가 유지되는 저장소로, 도메인 내에서 영구적으로 데이터 저장이 가능하다.
| 항목 | 설명 |
|---|---|
| 데이터 저장 위치 | 클라이언트(브라우저) |
| 데이터 용량 | 약 5MB~10MB (브라우저마다 다름) |
| 데이터 만료 | 없음 (직접 삭제하기 전까지 유지됨) |
| 보안 | 비교적 안전 (XSS 공격 가능) |
| 전송 방식 | 서버와 자동 전송되지 않음 |
| 탭/창 공유 여부 | 같은 도메인 내에서 모든 탭/창에서 공유 가능 |
// 데이터 저장
localStorage.setItem("theme", "dark");
// 데이터 가져오기
const theme = localStorage.getItem("theme");
// 데이터 삭제
localStorage.removeItem("theme");
// 모든 데이터 삭제
localStorage.clear();
| 항목 | 쿠키 (Cookie) | 세션 스토리지 (Session Storage) | 로컬 스토리지 (Local Storage) |
|---|---|---|---|
| 데이터 저장 위치 | 클라이언트(브라우저) | 클라이언트(브라우저) | 클라이언트(브라우저) |
| 용량 | 4KB | 5MB | 5MB~10MB |
| 데이터 만료 | 설정 가능 (expires, max-age) | 탭/창을 닫으면 삭제 | 직접 삭제하지 않으면 영구 저장 |
| 서버 자동 전송 | O (HTTP 요청마다 자동 전송) | X | X |
| 보안 | 낮음 (XSS 공격 위험) | 비교적 안전 | 낮음 (XSS 공격 위험) |
| 사용 가능한 브라우저 범위 | 같은 도메인 내에서 공유 | 같은 탭에서만 사용 가능 | 같은 도메인 내에서 공유 가능 |
| 주요 사용 사례 | 로그인 유지, 사용자 설정, 세션 관리 | 일시적 데이터 저장 (폼 입력값 등) | 사용자 설정, 캐시, 인증 토큰 |
✅ 보안이 중요한 데이터 (로그인 토큰, 세션 관리)
→ 쿠키 사용 (HTTPOnly + Secure 설정 필수!)
✅ 일시적인 데이터 저장 (폼 입력값, 페이지 상태 유지)
→ 세션 스토리지 사용
✅ 장기간 유지할 데이터 (사용자 설정, 캐싱)
→ 로컬 스토리지 사용