웹 스토리지(Web Storage)는 브라우저에 데이터를 저장할 수 있게 하는 기술로, HTTP 쿠키와 비슷한 목적을 가지지만, 보다 더 많은 데이터를 저장하고, 사용하기 편리한 API를 제공합니다. 웹 스토리지는 두 가지 형태로 제공됩니다.
sessionStorage
는 window
인터페이스의 읽기 전용 속성으로, 현재 출처의 세션 Storage
객체에 접근할 수 있습니다. sessionStorage
는 localStorage
와 비슷하지만, localStorage
의 데이터는 만료되지 않는 반면, sessionStorage
의 데이터는 페이지 세션이 종료되면 지워집니다.
// 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();
다음 예는 텍스트 필드의 내용을 자동 저장하고 브라우저를 새로 고치면 텍스트 필드 내용을 복원하여 글이 손실되지 않도록 합니다.
// Get the text field that we're going to track
let field = document.getElementById("field");
// See if we have an autosave value
// (this will only happen if the page is accidentally refreshed)
if (sessionStorage.getItem("autosave")) {
// Restore the contents of the text field
field.value = sessionStorage.getItem("autosave");
}
// Listen for changes in the text field
field.addEventListener("change", () => {
// And save the results into the session storage object
sessionStorage.setItem("autosave", field.value);
});
localStorage
는 window
인터페이스의 읽기 전용 속성으로, 문서의 출처에 대한 Storage
객체에 접근할 수 있습니다. 저장된 데이터는 브라우저 세션 간에 유지되며, 만료 시간이 없습니다. 이는 sessionStorage
와 다르게 페이지 세션이 종료되거나 페이지가 닫혀도 데이터가 지워지지 않습니다.
"private browsing" 또는 "incognito" 세션에서 로드된 문서에 대한 localStorage
데이터는 마지막 "private" 탭이 닫힐 때 지워집니다.
file:
URL에서 로드된 문서들(즉, 웹 서버에서 제공되는 것이 아니라 사용자의 로컬 파일 시스템에서 직접 브라우저로 열린 파일)에 대한 localStorage
동작의 요구사항은 정의되지 않았으며, 다른 브라우저 간에 달라질 수 있습니다.
현재 모든 브라우저에서, localStorage
는 각 file:
URL마다 다른 객체를 반환하는 것처럼 보입니다. 즉, 각 file:
URL은 고유한 로컬 스토리지 영역을 가지고 있는 것처럼 보입니다. 하지만 그런 동작에 대한 보장은 없으므로, 위에서 언급했듯이 file:
URL의 요구사항이 여전히 정의되지 않았기 때문에 이에 의존해서는 안 됩니다. 따라서 브라우저가 localStorage
의 file:
URL 처리를 언제든지 변경할 수 있습니다. 사실 일부 브라우저는 시간이 지남에 따라 이를 처리하는 방식을 변경했습니다.
다음 코드 스니펫은 현재 도메인의 로컬 Storage 객체에 접근하고 Storage.setItem()을 사용하여 데이터 항목을 추가합니다.
localStorage.setItem("myCat", "Tom");
localStorage 항목을 읽는 문법은 다음과 같습니다:
const cat = localStorage.getItem("myCat");
localStorage 항목을 제거하는 문법은 다음과 같습니다:
localStorage.removeItem("myCat");
모든 localStorage 항목을 제거하는 문법은 다음과 같습니다:
localStorage.clear();
key-value
형태의 저장소입니다.window
객체 안에 담겨있습니다.IndexedDB
를 사용할 수 있습니다.Cache Storage API, IndexedDB는 비동기적이며, 웹 워커, 서비스 워커, 그리고 window 객체에서 모두 접근할 수 있습니다.
Reference