바닐라 JS로 간단한 프로젝트를 진행하던 도중, 로그인 정보를 어디에 저장해야할 지 생각해보는 시간을 갖게 되었다.
만약, React
나 Svelte
같은 프론트 기술을 사용했더라면, 쿠키와 전역 상태 저장 관리 라이브러리(Redux
나 Svelte store
등)를 통해 토큰 값이나 로그인 정보를 저장했을 것 같다.
그렇다면, 바닐라 JS로 프론트를 구현할 시, 클라이언트는 데이터를 어디에다 저장해야 할까?
조사해본 결과, Web Storage와 Cookie
가 있으며, Web Storage는 Local Storage와 Session Storage
가 존재했다.
페이지 세션이 유지되는 동안(브라우저가 열려있는 동안) 제공
5MB
까지 저장 가능// Save data to sessionStorage
sessionStorage.setItem("key", "value");
// Get saved data from sessionStorage
let data = sessionStorage.getItem("key");
// Remove saved data from sessionStorage
sessionStorage.removeItem("key");
// Remove all saved data from sessionStorage
sessionStorage.clear();
브라우저를 닫았다 열어도 데이터가 남아 있음
10MB
까지 저장 가능유효기간 없이 데이터를 저장
localStorage.setItem("colorSetting", "#a4509b");
const color = localStorage.getItem("colorSetting");
localStorage.removeItem("myCat");
localStorage.clear();
4KB
까지 저장 가능도메인 하나당
저장할 수 있는 쿠키의 개수는 20여 개 정도로 한정
되어 있음Web Storage API
와 IndexedDB
사용을 추천document.cookie = "yummy_cookie=choco";
document.cookie = "tasty_cookie=strawberry";
console.log(document.cookie);
// logs "yummy_cookie=choco; tasty_cookie=strawberry"
// 특수 값(공백)은 인코딩 처리해 줘야 합니다.
let name = "my name";
let value = "John Smith"
// 인코딩 처리를 해, 쿠키를 my%20name=John%20Smith 로 변경하였습니다.
document.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);
alert(document.cookie); // ...; my%20name=John%20Smith
// 옵션은 key=value 뒤에 나열하고 ;로 구분합니다.
document.cookie = "user=John; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT"