- HTTP는 요청과 응답으로 이뤄지는 하나의 사이클이 끝나면, 연결이 끊어지는 무상태성을 띄어서 클라이언트의 상태를 보존하지 않는다
- 클라이언트의 상태를 서버가 아닌 클라이언트에 저장해두고 필요시마다 데이터를 꺼내서 서버에 전달하는 방식으로 HTTP의 단점을 보완하고자 쿠키와 웹 스토리지를 사용한다
- 만료 기간이 있는 클라이언트 단에 저장하는 작은 텍스트 파일
- 요청과 응답만이 존재했던 HTTP 웹세계에 이전에 서버와 클라이언트가 주고 받은 내역을 기억하고 불러올 수 있는 혁신적인 역할을 수행
- Session Cookie: 메모리에만 저장되며, 만료시간이 있지만 브라우저 종료시 삭제되는 쿠키
- Persistent Cookie: 파일로 저장되며, Max-Age 설정을 통해 장기간 유지 가능하고 브라우저 종료와 관계없이 사용 가능한 쿠키
- Secure Cookie: HTTPS에서 사용되는 암호화된 쿠키. 비교적 안전하지만 실질적 보안이 제공되지 않아 민감한 데이터 저장 절대 금지
- Third Party Cookie: 다른 도메인에 요청이 필요할 때 생성하는 쿠키. 주로 광고 목적으로 사용되며, 유저 개인정보 악용의 문제 발생
- 클라이언트가 서버에 HTTP 요청
- 서버가 HTTP 응답시 set-cookie를 통해 쿠키 생성하여 전달
- 클라이언트는 이제부터 매 HTTP Request시 HTTP Header에 쿠키담아서 전송
- 만료 기간 전이라면, 쿠키는 브라우저에 저장되어 있으며, 항상 요청시 사용 가능
- 만료됬다면, 클라이언트가 새로 서버에 요청하여 쿠키 새로 발급
장점
- 대부분의 브라우저가 지원
- 데이터 유효기간 지정 가능 (ex. 1 hour, 1 day)
- XSS (사이트 간 악성 Js 코드를 심는 행위)로부터 안전 - 서버에서 쿠키의 httpOnly 옵션을 설정하면, Js에서 쿠키에 접근 자체가 불가능
단점- 매우 작은 데이터 저장 용량 (4kb)
- 매번 서버에 HTTP 요청시 같이 전달되어 서버에 부담
- 암호화가 안되어 있어 유저 정보 도난 위험
- CSRF(사이트 간 요청 위조) 위협 - 공격자가 사용자의 요청을 가로챈 뒤 사용자의 의지와 상관없이 보안적으로 위험한 행동을 하게끔 변조하여 부당 이익을 취하는 행위
- 문자열만 저장 가능
- 클라이언트에 데이터를 저장할 수 있도록 HTML5부터 나온 새로운 방식의 데이터 저장소
- 로컬 스토리지와 세션 스토리지가 존재
- key와 value 쌍의 형태로 데이터 저장
- window 객체의 프로퍼티로 존재
장점
- 서버에 불필요하게 데이터 저장 x
- 넉넉한 데이터 저장 용량 (모바일: 2.5MB, 데스크탑: 5~10MB)
- 문자열 외에도 자바스크립트의 모든 원시형 데이터와 객체 저장 가능
- 도메인 단위로 접근이 제한되는 CORS 특성 덕분에 CSRF로부터 안전
단점- HTML5를 지원하는 브라우저만 사용 가능
- XSS로부터 위험 - local storage에 접근하는 Js 코드로 쉽게 접근 가능
- 로컬 스토리지는 데이터 영구 저장이 가능, 세션 스토리지는 브라우저 탭/윈도우가 닫히면 스토리지가 초기화
- 로컬 스토리지는 window.localStorage, 세션 스토리지는 window.sessionStorage 객체 사용
- 쿠키 : 일시적으로 필요한 가벼운 데이터 저장이 필요할 때
- 다시 보지 않음 쿠키 팝업창 , 로그인 자동 완성
- 로컬 스토리지 : 지속적으로 필요한 데이터 저장이 필요할 때
- 자동 로그인
- 세션 스토리지 : 일시적으로 필요한 데이터 저장이 필요할 때
- 일회성 로그인, 입력 폼 저장, 비로그인 장바구니