HTML5에서는 웹 사이트의 데이터를 클라이언트에 저장할 수 있는 새로운 자료구조인 Web Storage 스펙이 포함되어있다.
key:value 쌍으로 데이터를 저장하고 key를 기반으로 데이터를 조회하는 패턴이다.
영구저장소(LocalStorage)와 임시저장소(SessionStorage)를 따로 두어 데이터의 지속성을 구분하여 응용 환경에 맞는 선택이 가능하다.
Web Storage는 기본 웹 환경의 Cookie와 매우 유사한 개념이다.
서버 전송이 없다.
저장된 데이터가 클라이언트에 존재할 뿐 서버로 전송은 이루어 지지 않는다.
-> 네트워크 트래픽 비용을 줄여준다.
단순 문자열을 넘어 객체정보를 저장할수 있다.
문자열 기반 데이터 이외에 체계적으로 구조화된 객체를 저장할 수 있는 점은 개발편의성을 제공해주는 주요한 장점이다. 단, 브라우저의 지원 여부를 확인해 봐야 하는 항목이다.
용량의 제한이 없다.
영구 데이터 저장이 가능하다.
-> 만료 기간의 설정이 없다. 즉, 한번 저장한 데이터는 영구적으로 존재한다.
Cookie와 마찬가지로 사이트의 도메인 단위로 접근이 제한된다.
저장한 데이터를 영구적으로 보관할 수 있다.
(브라우저를 종료하더라도 다음번에 접속했을 때 그 데이터를 사용할수 있다.)
도메인 마다 별도의 localStorage가 생성된다.
Windows 전역 객체의 LocalStorage라는 컬렉션을 통해 저장과 조회가 이루어 진다.
도메인만 같으면 전역으로 공유가 가능하다.
데이터가 지속적으로 보관되지 않는다.
현재 페이지가 브라우징 되고 있는 브라우저 컨텍스트 내에서만 데이터가 유지된다.
Windows 전역 객체의 sessionStorage 라는 컬렉션을 통해 저장과 조회가 이루어진다.
브라우저가 종료되면 데이터도 같이 지워진다. (브라우저가 종료되면 SssionStorage도 삭제)
브라우저마다 별도의 sessionStorage가 생성된다.
같은사이트 같은 도메인이라 할지라도 브라우저가 다르면 서로 다른 영역이된다. (브라우저 컨텍스트가 다르기 때문)
브라우저를 하나 더 실행해서 같은 페이지를 실행 했을때, 이 두페이지의 sessionStorage는 각각 별개의 영역으로 침범하지 못한다.
자동 임시저장 기능
Cookie란 웹사이트에 의해 유저의 컴퓨터에 놓여지는 작은 텍스트 파일들이다.
Cookie는 사이트에서 방문한 페이지를 저장하거나 유저의 로그인 정보를 저장하는 등 다양한 방법으로 사용된다. 그리고 문자열만 저장할 수 있다는 제한이 있다.
매번 서버로 전송된다. (서버 데이터를 공유)
웹사이트에서 쿠키를 설정하면 이후 모든 웹 요청은 쿠키 정보를 포함하여 서버로 전송된다.
제한적인 용량
쿠키는 개수와 용량에 제한이 있는데, 하나의 사이트에서 저장할수 있는 최대 쿠키수와 용량은 20개, 4KB로 제한되어있다. 그러나 쿠키도 하위키를 이용하면 이러한 제한을 일부 해소할수 있지만, 대부분 쿠키의 제한으로 까지 데이터를 저장할 일이 없다.
반 영구적으로 데이터 저장이 가능하다
쿠키는 만료일자를 지정하게 되어 있어 만료일자로 지정된 날짜에 쿠키는 제거된다.
만약 만료일자를 지정하지 않으면 Session cookies 된다. 만일 영구 쿠키를 원한다면 만료일자를 굉장히 멀게 설정하여 해결할 수 있다.
서버는 요청 자체만으로 그 요청이 누구에게서 오는지 알수 없기 때문에 응답을 보낼수 없다.
이때 쿠키에 나에 대한 정보를 담아 서버로 보내면, 서버는 쿠키를 읽어서 내가 누군지 파악한다.
쿠키는 서버와 클라이언트 간의 지속적인 데이터 교환을 위해 만들어 졌기 때문에 서버로 계속 전송된다.
WebStorage의 보안은 서로 다른 도메인의 데이터 침범을 막고는 있지만 클라이언트, 즉 사용자를 막고 있지는 않다. 클라이언트는 얼마든지 저장된 값을 임의로 수정이 가능하다. 이것은 쿠키와 동일한 개념이다. 그렇다고 쿠키에 비해 별다른 보안 취약점을 더 가진 것은 아니다. 따라서 개발자는 사용자에 의한 이러한 임의 변경에 항상 예의 주시하고 방어 코드의 작성을 잊지 말아야 한다.