이번 블로그에선 web storage와 cookie에 대해서 알아보자!
HTML5부터 제공하는 기능으로, 해당 도메인과 관련된 특정 데이터를 서버가 아니라 클라이언트 웹브라우저에 저장할 수 있도록 제공하는 기능을 의미한다.
쿠키(cookie)와 비슷한 기능이며, Web Storage는 객체처럼 key와 value 형태로 데이터를 저장하고, 키를 통해 데이터를 찾을 수 있어서 데이터 값을 이용하기에 편리하다.
Web Storage는 영구저장소(LocalStorage)와 임시저장소(SessionStorage)로 나누어지는데, 이들은 데이터의 지속성에 따라 구분할 수 있다.
Web Storage는 쿠키와 마찬가지로 데이터의 보안 측면에서 사이트의 도메인 단위로 접근이 제한됨.
💡 브라우저 컨텍스트
: Document를 표시하는 환경, 즉, 브라우저가 불러온 웹페이지.
1. 서버 전송이 없다.
2. 단순 문자열을 넘어 객체 정보를 저장할 수 있다.
3. 용량의 제한이 없다.
4. 영구 데이터 저장이 가능하다.
쿠키는 웹브라우저와 동일하게 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.
영구 저장할 수 있었던 local storage와 달리 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다.
쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조하게 된다.
또한 클라이언트에 300개까지 쿠키 저장 가능하고 하나의 도메인당 20개의 값만 가질 수 있다 (하나의 쿠키값은 4KB까지 저장)
Response Header
에 Set-Cookie
속성을 사용하면 클라이언트에 쿠키를 만들 수 있다. 이 방법은 나중에 로그인에서 refreshToken을 생성하고 쿠키에 등록하는데 이용된다.
쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request시에 Request Header를 넣어서 자동으로 서버에 전송한다. 그렇기에, 브라우저 저장소임에도 불구하고 백엔드와 긴밀히 연결되어 있어 쿠키에 있는 내용을 백엔드에서도 빼내어 볼 수 있다.
이름 : 각각의 쿠키를 구별하는 데 사용되는 이름
값 : 쿠키의 이름과 관련된 값
유효시간 : 쿠키의 유지시간
httpOnly, secure : 쿠기들을 안전하게 보관할 수 있도록 보안 강화 기능
httpOnly
= > js으로 쿠키 조작 못하고 http 통신으로만 주고 받게 할 수 있음
secure
= > https에서만 주고 받기 가능
도메인 : 쿠키를 전송할 도메인
경로 : 쿠키를 전송할 요청 경로
클라이언트가 페이지 요청
서버에서 쿠키를 생성
HTTP 헤더에 쿠키를 포함시켜 응답
브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있다
같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보낸다
서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때 쿠키를 업데이트하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답한다.
1. 쿠키는 매번 서버로 전송된다.
: 웹사이트에서 쿠키를 설정하면 이후 모든 웹 요청은 쿠키 정보를 포함해 서버로 전송됨. 반면 Web Storage는 저장된 데이터가 클라이언트에 존재할 뿐 서버로 전송되지는 않는다.
2. Web Storage는 단순 문자열을 넘어(스크립트) 객체 정보를 저장할 수 있다.
3. Web Storage는 용량의 제한이 없다.
: 반면 쿠키는 개수와 용량에 제한이 있다.
4. Web Storage는 영구 데이터 저장이 가능하다.
: 쿠키는 만료 일자를 지정하게 되어있어 언젠가 제거된다.
참고자료: 코드캠프 수업자료