쿠키와 브라우저 저장소는 모두 브라우저에 저장된다.
쿠키는 브라우저 저장소가 등장하기 이전, 대표적인 브라우저 정보 저장소의 역할
쿠키는 만료기간이 있는 key/value저장소
httponly 플래그로 자바스크립트에서 쓸 수 없게 막아둔 쿠키는 나오지 않는다.
4KB용량 제한, 매 서버 요청마다 서버로 쿠키가 같이 전송
요청시 서버로 쿠키를 전송하는 이유는 서버에게 '누가 요청을 했는가'를 알려주기 위함
'누가 요청을 했는가'를 알아야 서버는 정확한 정보를 전달할 수 있다
그래서, 쿠키에 내 정보를 담아서 서버에 보내면 서버는 쿠키를 읽어서 내가 누군지 파악(요청보낸게 누구인지)
쿠키는 처음부터 서버와 클라이언트 간의 지속적인 데이터 교환을 위해 만들어졌기 때문에 서버로 게속 전송된다.
하지만, 4KB의 용량제한을 거의 다 채운 쿠키가 있다면, 요청할 때마다 기본 4KB의 데이터를 사용한다.
필요하지 않는 정보도 계속 요청하게 되는 것인데, 즉 데이터의 낭비가 일어나게 된다.
이러한 문제점을 Local, Session Stroage를 통해 해결 가능하다.
웹 브라우저 저장소는 쿠키의 단점을 극복할 수 있다
Web Storage vs Cookie
쿠키는 매번 서버로 전송된다
웹사이트에서 쿠키를 설정하면 이후 모든 웹요청은 쿠키정보를 포함해서 서버로 전송된다. 브라우저 저장소는 저정된 데이터가 클라이언트에 존재할 뿐 서버로 전송되지 않는다. 이는 네트워크 트래픽 비용을 줄여준다.
브라우저 저장소는 단순 문자열을 넘어 Script 객체정보를 저장할 수 있다
문자열 기반 데이터 외에 체계적으로 구조화된 객체를 저장할 수 있다. 이는 개발 편의성을 제공해주는 장점이다. (브라우저 지원여부가 중요)
브라우저 저장소는 용량의 제한이 없다
쿠키는 개수와 용량에 제한이 있다. 클라이언트에 최대 300개의 쿠키를 저장할 수 있다. 하나의 사이트(도메인)에는 최대 20개를 저장할 수 있고, 쿠키값은 최대 4KB로 제한된다.
브라우저 저장소는 제한이 없다. 쿠키도 하위키를 이용하면 이러한 제한을 일부 해소 가능하다. 그러나 대용량으로 쿠키를 저장할 일은 없다
브라우저 저장소는 영구 데이터 저장이 가능
쿠키는 만료일자를 지정하게 되어있어 언젠가 제거된다. 만약 만료일자를 지정하지 않으면 세션쿠키가 된다. 영구쿠키를 원하면 만료일자를 길게 설정하여 해결할 수 있다.
브라우저 저장소는 만료일이 없다. 즉, 한번 저장한 데이터는 영구적으로 존재
세션쿠키 / 지속(영구) 쿠키
세선쿠키: 활성 웹 브라우저 세션이 있는 기간동안 저장. 세션쿠키는 일반적으로 웹 브라우저를 닫을 때 삭제
지속(영구)쿠키: 각 쿠키에 지정된 기간동안 또는 장치에서 쿠키를 수동으로 삭제할 때까지 장치에 남아있는 쿠키
둘의 큰 차이점은 데이터의 영구성
둘 다 Window 객체 안에 들어있다.
Storage객체를 상속받기 때문에 공통적으로 존재.
도메인별 용량제한이 있다(프로토콜, 호스트, 포트가 같으면 같은 스토리지를 공유)
브라우저별, 기기별 용량제한이 다르지만 모바일 2.5MB, 데스크탑 5~10MB
저장되는 데이터가 key/value 형태이고, 쿠키가 4KB인 것을 생각하면 큰 용량.
50MB를 기본으로하는 indexedDB도 있다.
기존 사용하던 쿠키/세션처럼 브라우저 저장소도 Local Storage, Session Storage를 제공한다
Session Storage 역시 브라우저에 저장된다. 하지만 생명주기가 서로 다른게 차이점.
쿠키는 방문자의 정보를 방문자의 컴퓨터 메모리에 저장한다
세션은 방문자의 요청에 따른 정보를 웹서버가 세션아이디를 만들어 서비스가 돌아가고있는 서버에 저장한다
즉 쿠키는 방문자가, 세션은 제품서버가 가지고 있는 정보
쿠키와 달리 세션은 로그인 정보에 대한 보안이 더 좋다. 따라서 웹사이트에 방문해서 계속 접속을 유지할 때 이전의 접속 정보를 이용할 수 있는 방법으로 많이 사용한다.
정보가 서버에있어서 보안은 더 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다. (서버 과부하의 원인)
세션도 쿠키처럼 만료일을 설정할 수 있지만, 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
쿠키는 서버에 요청시 세션보다 속도가 빠르다.
세션은 정보가 서버에 있기 때문에 처리가 요구되어서 비교적 속도가 느린 편이다(쿠키에 비해)
보통 쿠키와 세션의 차이를 말할 때는 저장위치와 보안적인 부분뿐만 아니라 라이프 사이클까지 말할 수 있어야 한다.
쿠키는 브라우저를 종료해도 저장되어 있을 수 있다(사용자 컴퓨터 메모리에 저장되기 때문)
쿠키/세션 vs 캐시?
세션 id
- 클라이언트가 req를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 id를 부여한다. 이것이 세션id
localStorage.setItem(키, 값); // 저장
localStorage.getItem(키); // Read
localStorage.removeItem(키); // Remove
localStorage.clear(); // Remove All
Local, Session Storage 모두 XSS(Cross-site Scripting)에 취약
XSS 공격은 스토리지 개체에서 데이터를 가져오고 저장된 데이터에 악성 스크립트를 추가하는데 사용될 수 있다.
예를들어 타사 JS라이브러리를 사용하고, 저장소 개체를 추출하는 일부 스크립트가 삽입된 경우 저장소 데이터는 더 이상 안전하지 않다.
따라서 민감한 데이터는 저장하지 않는 것이 좋다
브라우저에 데이터를 저장하는 방법에는 Cookie와 브라우저 저장소(Web Storage)가 있다.
쿠키와 브라우저저장소 모두 도메인과 관련된 데이터를 클라이언트 웹브라우저에 저장한다.
둘다 도메인 단위로 접근이 제한된다.
A도메인에서 저정한 데이터는 B도메인에서 접근이 불가핟
쿠키는 매번 서버로 전송되고 문자열만 저장이 가능하다
용량에 제한이 있다
만료 일자가 존재한다
브라우저 저장소는 데이터를 클라이언트에만 저장한다
서버로 전송하지 않는다
문자열 외에도 구조화된 객체를 사용 가능해서 개발 편의성을 제공한다
하나의 사이트에 저장할 수 있는 용량이 제한되어있지 않다
한번 저장된 데이터는 영구적으로 저장된다
브라우저 저장소는 Local, Session Stroage가 있다
LocalStorage는 저장한 데이터를 지우지않는한 영구적으로 보관된다
도메인마다 별도로 LocalStorage가 생성된다
도메인만 같다면 전역적으로 공유가 가능하다
브라우저를 닫았다 열어도 지속
SessionStorage는 데이터의 지속성과 엑세스 범위에 특수한 제한이 존재한다
도메인마다 별도로 생상된다. 하지만 같은 사이트의 도메인이라도 브라우저가 다르면 서로 다른 영역
브라우저를 닫으면 사라진다.