로컬스토리지 만료 시간을 설정할 수 있나요?

19 조회 수

웹 브라우저의 LocalStorage는 데이터를 영구적으로 저장합니다. 브라우저를 닫거나 컴퓨터를 껐다 켜도 데이터가 사라지지 않아요. 따라서 LocalStorage 자체적으로 만료 시간을 설정하는 기능은 제공하지 않습니다. 데이터 삭제는 사용자가 직접 JavaScript 코드를 통해 수행하거나 브라우저 설정에서 수동으로 삭제해야 합니다.

피드백 0 좋아요 수

로컬 스토리지, 영원불멸은 아니다: 만료 시간 설정의 기술적 고찰과 대안적 접근

웹 개발을 하다 보면 데이터를 클라이언트 측에 저장해야 할 필요가 생깁니다. 이때 로컬 스토리지는 훌륭한 선택지가 되곤 하죠. 브라우저에 내장된 로컬 스토리지는 사용자의 브라우저에 키-값 쌍으로 데이터를 저장하는 간단하고 강력한 도구입니다. 하지만 흔히들 로컬 스토리지가 “영구적”이라는 오해를 하곤 합니다. 브라우저를 닫아도, 심지어 컴퓨터를 재부팅해도 데이터가 남아있으니 그렇게 생각하는 것도 무리는 아니죠. 하지만 “영구적”이라는 단어는 “만료되지 않는다”는 의미와는 다릅니다.

로컬 스토리지는 엄밀히 말해 “영구적”이지 않습니다. 물론 세션 스토리지처럼 브라우저 세션이 끝나면 데이터가 사라지는 휘발성 저장소는 아닙니다. 하지만 사용자가 직접 브라우저 설정을 통해 로컬 스토리지 데이터를 삭제할 수도 있고, 개발자가 JavaScript 코드를 사용하여 특정 데이터를 지울 수도 있습니다.

문제는 로컬 스토리지 자체에는 만료 시간을 설정하는 기능이 내장되어 있지 않다는 점입니다. 즉, 특정 데이터가 특정 시점에 자동으로 삭제되도록 설정할 수 없다는 의미입니다. 이는 로컬 스토리지가 설계될 때 의도적으로 결정된 사항입니다. 로컬 스토리지는 비교적 단순한 구조를 가지고 있으며, 영구적인 데이터 저장을 염두에 두고 설계되었기 때문입니다.

그렇다면 만료 시간이 필요한 데이터를 로컬 스토리지에 저장해야 할 경우에는 어떻게 해야 할까요? 다행히도 몇 가지 대안적인 접근 방식이 존재합니다.

1. 만료 시간 정보를 함께 저장하기:

가장 일반적인 방법은 데이터와 함께 만료 시간을 로컬 스토리지에 저장하는 것입니다. 예를 들어, 다음과 같은 방식으로 데이터를 저장할 수 있습니다.

const data = {
  value: "저장할 데이터",
  expiry: Date.now() + (60 * 60 * 1000) // 1시간 후 만료
};

localStorage.setItem("myData", JSON.stringify(data));

그리고 데이터를 가져올 때마다 만료 시간을 확인하여 유효한 데이터인지 검증합니다.

const storedData = localStorage.getItem("myData");

if (storedData) {
  const parsedData = JSON.parse(storedData);
  if (Date.now() < parsedData.expiry) {
    // 데이터가 유효함. 사용.
    console.log("유효한 데이터:", parsedData.value);
  } else {
    // 데이터가 만료됨. 삭제.
    localStorage.removeItem("myData");
    console.log("데이터 만료됨");
  }
} else {
  console.log("데이터 없음");
}

이 방법은 비교적 간단하지만, 모든 데이터를 가져올 때마다 만료 시간을 검증해야 한다는 단점이 있습니다.

2. 래퍼 함수 또는 라이브러리 사용:

만료 시간 관리를 더 편리하게 해주는 래퍼 함수나 라이브러리를 사용하는 것도 좋은 방법입니다. 이러한 도구들은 만료 시간 설정 및 검증을 캡슐화하여 코드의 재사용성과 가독성을 높여줍니다. 예를 들어, 간단한 래퍼 함수를 만들어 사용할 수 있습니다.

function setLocalStorageWithExpiry(key, value, expiryInSeconds) {
  const expiry = Date.now() + (expiryInSeconds * 1000);
  const item = {
    value: value,
    expiry: expiry,
  };
  localStorage.setItem(key, JSON.stringify(item));
}

function getLocalStorageWithExpiry(key) {
  const itemStr = localStorage.getItem(key);
  if (!itemStr) {
    return null;
  }
  const item = JSON.parse(itemStr);
  if (Date.now() > item.expiry) {
    localStorage.removeItem(key);
    return null;
  }
  return item.value;
}

// 사용 예시
setLocalStorageWithExpiry("myKey", "myValue", 3600); // 1시간 후 만료
const myValue = getLocalStorageWithExpiry("myKey");
console.log(myValue);

3. IndexedDB와 같은 다른 저장소 사용:

만약 더 복잡한 데이터 구조를 저장해야 하거나, 더 강력한 기능(트랜잭션, 인덱싱 등)이 필요하다면 IndexedDB와 같은 다른 클라이언트 측 저장소를 고려해볼 수 있습니다. IndexedDB는 로컬 스토리지보다 더 많은 기능을 제공하며, 필요에 따라 만료 시간과 관련된 로직을 더 효율적으로 구현할 수 있습니다.

결론적으로, 로컬 스토리지는 그 자체로는 만료 시간을 설정하는 기능을 제공하지 않지만, 위에서 언급한 다양한 방법들을 통해 만료 시간을 관리하고 데이터를 효과적으로 사용할 수 있습니다. 웹 개발자는 프로젝트의 요구 사항과 상황에 따라 가장 적합한 방법을 선택하여 데이터를 저장하고 관리해야 합니다. 로컬 스토리지는 편리한 도구이지만, 영원불멸의 존재는 아니라는 점을 기억하고, 데이터 관리 전략을 신중하게 수립해야 합니다.

#로컬스토리지 #만료시간 #설정