LocalStorage, SessionStorage
Cookies
IndexedDB
const storeBtn = document.getElementById("store-btn");
const retrBtn = document.getElementById("retrieve-btn");
const userId = "u123";
const user = {
name: "Taemin",
age: 32,
hobbies: ["Dancing", "Playing with his cats"],
};
storeBtn.addEventListener("click", () => {
localStorage.setItem("uid", userId);
localStorage.setItem("user", JSON.stringify(user));
});
retrBtn.addEventListener("click", () => {
const extractedId = localStorage.getItem("uid");
const extractedUser = JSON.parse(localStorage.getItem("user"));
console.log(extractedUser);
if (extractedId) {
console.log("Got the id - " + extractedId);
} else {
console.log("Could not find id");
}
});

storeBtn.addEventListener("click", () => {
sessionStorage.setItem("uid", userId);
});
retrBtn.addEventListener("click", () => {
const extractedId = sessionStorage.getItem("uid");
});


브라우저에서 페이지가 열러있는 동안 남아있고 페이지를 새로 고침해도 활성화된 탭에 있는 한 데이터가 남아있게 되며 애플리케이션이 실행 중인 탭이나 전체 탭을 닫거나 전체 브라우저를 닫으면 세션 스토리지가 삭제된다. 그에 반면하여 로컬 스토리지는 삭제되지 않는다. 공간 부족 등의 이유로 사용자가 수동으로 삭제하거나 브라우저가 삭제하지 않는 한 데이터는 남아있게 된다.
// ===== 쿠키
const storeBtn = document.getElementById("store-btn");
const retrBtn = document.getElementById("retrieve-btn");
storeBtn.addEventListener("click", () => {
const userId = "u123";
document.cookie = `uid=${userId}`; // 오버라이딩이 아니라 추가하는 것임!
});
retrBtn.addEventListener("click", () => {
console.log(document.cookie); // 저장된 모든 쿠키 데이터에 엑세스
});
// ===== 쿠키
const storeBtn = document.getElementById("store-btn");
const retrBtn = document.getElementById("retrieve-btn");
storeBtn.addEventListener("click", () => {
const userId = "u123";
const user = { name: "Taemin", age: 32 };
document.cookie = `uid=${userId}`; // 오버라이딩이 아니라 추가하는 것임!
document.cookie = `user=${JSON.stringify(user)}`;
});
retrBtn.addEventListener("click", () => {
console.log(document.cookie.split(";")); // 저장된 모든 쿠키 데이터에 엑세스
//document.cookie => uid=u123; user={"name":"Taemin","age":32};
//document.cookie.split(';') =>
//['uid=u123', ' user={"name":"Taemin","age":32}']
//0: "uid=u123"
//1: " user={\"name\":\"Taemin\",\"age\":32}"
});
이렇게도 만들 수 있다.
retrBtn.addEventListener("click", () => {
const cookieData = document.cookie.split(";");
const data = cookieData.map((i) => {
return i.trim();
});
console.log(data[1].split("=")[1]); //user value
});
쿠키의 장점
expires=날짜로도 할 수 있다.storeBtn.addEventListener("click", () => {
const userId = "u123";
const user = { name: "Taemin", age: 32 };
document.cookie = `uid=${userId}; max-age=2`; // 만료시간 설정. 반드시 '초'로 작성해야한다. 이 경우, 만료가 2초.
document.cookie = `user=${JSON.stringify(user)}`;
});
// === indexedDB
const storeBtn = document.getElementById("store-btn");
const retrBtn = document.getElementById("retrieve-btn");
const dbRequest = indexedDB.open("StorageDummy", 1); // 기존에 없었다면 데이터베이스 생성, 있었다면 데이터베이스와 연결.
dbRequest.onupgradeneeded = function (e) {
const db = e.target.result; // 만들어진 데이터베이스에 접근
const objStore = db.createObjectStore("products", { keyPath: "id" }); // 해당 데이터는 잃어버려도 되는 데이터 & 사용자 경험을 높이기 위해 필요한 데이터를 저장하는 것.
objStore.transaction.oncomplete = function (e) {
const productsStore = db
.transaction("products", "readwrite")
.objectStore("products"); // transaction(객체 저장소의 이름, 저장소에 접근할 때 사용하는 모드)
productsStore.add({
id: "p1",
title: "A first product",
price: 12.99,
tags: ["Expensive", "Luxury", "Exclusive"],
});
}; // 객체 저장소의 생성이 끝나면 트리거 될 것.
};
dbRequest.onerror = function (e) {
console.log("ERROR");
};
storeBtn.addEventListener("click", () => {});
retrBtn.addEventListener("click", () => {});

// === indexedDB
const storeBtn = document.getElementById("store-btn");
const retrBtn = document.getElementById("retrieve-btn");
let db;
const dbRequest = indexedDB.open("StorageDummy", 1);
dbRequest.onsuccess = function (e) {
db = e.target.result;
};
dbRequest.onupgradeneeded = function (e) {
// 데이터베이스가 처음 만들어졌을 때 혹은 버전이 변경되었을 때 작동.
db = e.target.result;
const objStore = db.createObjectStore("products", { keyPath: "id" });
objStore.transaction.oncomplete = function (e) {
const productsStore = db
.transaction("products", "readwrite")
.objectStore("products");
productsStore.add({
id: "p1",
title: "A second product",
price: 12.99,
tags: ["Expensive", "Luxury", "Exclusive"],
});
};
};
dbRequest.onerror = function (e) {
console.log("ERROR");
};
storeBtn.addEventListener("click", () => {
if (!db) {
return;
}
const productsStore = db
.transaction("products", "readwrite")
.objectStore("products");
productsStore.add({
id: "p2",
title: "A second product",
price: 122.99,
tags: ["Expensive", "Luxury"],
});
});
retrBtn.addEventListener("click", () => {
const productsStore = db
.transaction("products", "readwrite")
.objectStore("products");
const request = productsStore.get("p2"); // 조회하고 싶은 키. 그리고 얘는 request 객체를 줌
request.onsuccess = function () {
console.log(request.result);
};
});
🔗 로컬&세션 스토리지
🔗 JS에서의 쿠키
🔗 IndexedDB