[JS]Web Storage vs 쿠키(Cookie) vs 세션(Session) vs 캐시(Cache)

레거시프로젝트의 소스코드를 분석하다가 Web Storage를 만났다.
localStorage와 sessionStorage를 둘 다 사용하고 있었기에 둘 차이가 궁금해졌다.

구글링할수도록 쿠키, 세션, 캐시까지 다양한 개념이 나오길래 이참에 다 정리해봤다.

Web Storage

  • 클라이언트에 저장
  • Key-Value 형태
  • 쿠키와 달리 서버에 전송안함
  • CSRF로부터 안전 why? Origin단위로 접근이 제한되기때문에.
  • 쿠키(4GB)보다 큰 저장용량(5GB)지원
  • 문자형(String) 데이터 타입만 지원
  • 종류
    • localStorage: 사용자가 데이터를 지우지 않는 이상, 브라우저나 OS를 종료해도 계속 브라우저에 남아있음 (영구성) 단, 동일한 브라우저를 사용할 때만 해당
    • sessionStorage: 브라우저 탭에도 종속되기 때문에, 윈도우나 브라우저 탭을 닫을 경우 제거




Origin 오리진이란?

오리진 = 프로토콜 + 도메인 + 포트




비교

localStorage sessionStorage Cookie Session
저장위치 클라이언트 클라이언트 클라이언트 서버
저장형식 String String String Obejct
전송 서버전송x
-> 서버 부담없음
서버전송x
-> 서버 부담없음
매번 서버에 자동 전송
-> 크기가 크면 서버에 부담
서버에서 클라이언트를 구분하기 위해 세션 ID를 부여
-> 사용자가 많아질수록 서버 메모리를 많이 차지
유효기간 설정 불가능 불가능 가능 가능(기본 30분)
데이터영구성 브라우저 종료해도 유지
명시적 삭제 필요
윈도우나 브라우저 탭을 닫을 경우 삭제됨 쿠키 저장시 설정(설정 없을 시에는 브라우저 종료시 만료) 브라우저 종료 시 만료기간에 상관없이 삭제됨
생성단위 Origin별로 생성
다른 오리진의 로컬 스토리지에는 접근 불가
서로 다른 브라우저 탭이라도 동일한 오리진이라면 동일한 로컬 스토리지를 사용함
Origin별마다 탭/윈도우 단위로 생성->탭/윈도우를 닫을 시 데이터가 삭제됨 브라우저에 여러개 생성가능 브라우저당 하나의 세션SessionID이 생성
주 사용처 지속적으로 필요한 정보를 저장할때
e.g.자동 로그인 등
잠시 동안 필요한 정보를 저장할 때
e.g.입력 폼 저장, 일회성 로그인 등
로그인유지, 자동완성, 일주일간 다시 보지 않기, 최근 검색한 상품들을 광고에서 추천, 쇼핑몰 장바구니 기능 로그인유지




캐시(Cache)는 또 뭘까?

쿠키와 세션을 이야기하다보면 자연스럽게 캐시가 나온다.
어떤 차이가 있을까?

  • 캐시: 웹 페이지 요소(e.g.img,css,js등 리소스파일)를 저장하기 위한 임시 저장소 for 빠른 웹페이지 랜더링
  • 쿠키,세션: 정보 저장소 for 사용자인증




참고