서버가 알아야 하는 정보 & 보안이 필요한 정보
쿠키는 클라이언트 저장소지만, 모든 HTTP 요청(Request)마다 헤더에 실려 서버로 전송됩니다. 따라서 불필요한 데이터를 많이 넣으면 트래픽 낭비가 심합니다. 대신 HttpOnly 설정을 통해 자바스크립트 접근을 막을 수 있어 보안상 유리합니다.
지워지면 안 되는 사용자 설정 & 반영구적 데이터
브라우저를 껐다 켜도 데이터가 유지됩니다. 서버로 전송되지 않으므로 네트워크 비용이 들지 않고, 용량도 넉넉(약 5MB)합니다. 하지만 XSS(스크립트 삽입) 공격에 취약하므로 민감 정보는 절대 금물입니다.
저장해야 할 것
- 사용자 UI 설정: 다크 모드/라이트 모드 여부, 폰트 크기, 사이드바 펼침 여부. (사용자가 다음에 왔을 때도 그대로여야 하는 것들)
- 자동 로그인 여부 플래그: (실제 토큰이 아니라, '아이디 저장' 체크박스 상태 같은 것)
- 최근 검색어: 서버에 저장할 필요 없는 개인화된 캐시 데이터.
- 장바구니 데이터 (비로그인): 브라우저를 닫아도 상품이 남아있어야 구매 전환율이 높습니다.
저장하면 안 되는 것
- Access Token / 비밀번호: 자바스크립트로 쉽게 탈취 가능
휘발되어도 상관없는 임시 데이터 & 탭별 독립 데이터
로컬 스토리지와 비슷하지만, 탭을 닫으면 즉시 삭제됩니다. 또한 같은 사이트라도 탭마다 별개의 저장 공간을 가집니다.
저장해야 할 것
저장하면 안 되는 것
- 다음에 방문했을 때도 기억해야 하는 모든 정보.
| 구분 | Cookie | Local Storage | Session Storage |
| 수명 | 만료 기한 설정 가능 | 영구적(지우기 전까지) | 탭/브라우저 닫으면 삭제 |
| 서버 전송 | 자동 전송 | 전송 안 함 | 전송 안 함 |
| 용량 | 작음(4KB) | 큼(5MB~) | 큼(5MB~) |
| 접근 범위 | 모든 탭/창 공유 | 모든 탭/창 공유 | 해당 탭 안에서만 |
| 주 용도 | 보안(인증), 서버 통신 | 개인화 설정, 영구 캐시 | 임시 상태, 폼 데이터 |