로컬 스토리지를 활용한 사용자 데이터 저장 기법 (예제 2개)

현대 웹 애플리케이션은 사용자가 입력한 데이터를 저장하고, 이를 필요할 때마다 빠르게 불러와야 할 필요성이 있습니다. 웹 개발에서는 이 데이터를 서버에 저장하는 방법 외에, 클라이언트 측에서 브라우저가 제공하는 로컬 스토리지(Local Storage)를 활용해 데이터를 관리할 수 있습니다. 로컬 스토리지는 자바스크립트를 통해 쉽게 접근하고 사용할 수 있어 빠른 데이터 접근이 가능하며, 사용자 경험을 크게 향상시킬 수 있습니다.


1. 로컬 스토리지란?

로컬스토리지는 웹 브라우저가 제공하는 저장소로, 사용자가 직접 접근하거나 브라우저를 닫더라도 데이터가 남아있습니다. 로컬스토리지는 영구적 데이터 저장소로, 세션 스토리지와 다르게 브라우저가 종료되더라도 데이터가 사라지지 않는 것이 특징입니다. 주요 특징은 다음과 같습니다.

  • 영구 저장: 사용자가 명시적으로 삭제하지 않는 한 브라우저에 데이터가 남아있음
  • 5MB 데이터 저장: 브라우저마다 다르지만 대부분 5MB까지 저장 가능
  • 키-값(key-value) 형태: JSON 데이터 형태로 문자열만 저장 가능

2. 로컬 스토리지 기본 사용법

로컬스토리지는 자바스크립트의 localStorage 객체를 통해 접근할 수 있습니다. 데이터 저장, 읽기, 삭제 등 기본적인 기능을 다음과 같은 방식으로 사용할 수 있습니다.

(1) 데이터 저장하기

로컬스토리지에 데이터를 저장하려면 setItem 메서드를 사용합니다. 이 메서드는 데이터의 키와 값을 모두 문자열 형태로 저장합니다.

// 사용자 이름을 저장
localStorage.setItem("username", "홍길동");

위 코드에서는 username이라는 키로 “홍길동”이라는 값을 저장합니다.

(2) 데이터 불러오기

저장된 데이터를 불러오려면 getItem 메서드를 사용합니다. 이 메서드는 특정 키에 대한 값을 가져옵니다.

// 사용자 이름을 불러오기
const username = localStorage.getItem("username");
console.log(username); // 홍길동

(3) 데이터 삭제하기

특정 키에 저장된 데이터를 삭제하려면 removeItem 메서드를 사용합니다.

// username 키 삭제
localStorage.removeItem("username");

전체 데이터를 삭제하려면 clear 메서드를 사용해 로컬스토리지의 모든 항목을 제거할 수 있습니다.

localStorage.clear();

3. JSON 데이터 저장하기

로컬 스토리지는 문자열만 저장 가능하므로, JSON 형태의 데이터를 저장하려면 자바스크립트의 JSON.stringify와 JSON.parse 메서드를 사용해 변환해야 합니다.

// JSON 객체 저장하기
const user = { name: "홍길동", age: 30 };
localStorage.setItem("user", JSON.stringify(user));

// JSON 객체 불러오기
const storedUser = JSON.parse(localStorage.getItem("user"));
console.log(storedUser.name); // 홍길동

위 코드에서는 객체를 JSON.stringify를 통해 문자열로 변환해 저장하고, 불러올 때는 JSON.parse를 통해 다시 객체로 변환합니다.

4. 로컬 스토리지의 실용적인 사용 예제

로컬스토리지는 다양한 상황에서 활용될 수 있습니다. 대표적인 예로는 사용자 설정을 유지하거나, 임시 저장을 통해 데이터 손실을 방지하는 등의 기능을 들 수 있습니다.

(1) 사용자 테마 저장

사용자가 웹사이트에서 테마를 선택할 경우, 로컬스토리지에 테마 설정을 저장하고 다시 방문할 때 이를 불러와 적용할 수 있습니다.

// 다크 모드 테마 저장하기
function saveTheme(theme) {
    localStorage.setItem("theme", theme);
}

// 테마 불러오기
function loadTheme() {
    const theme = localStorage.getItem("theme");
    if (theme) {
        document.body.className = theme;
    }
}

// 사용자가 테마를 변경하면 해당 설정을 저장
document.getElementById("themeSelector").addEventListener("change", (event) => {
    saveTheme(event.target.value);
    loadTheme();
});

이 코드는 사용자가 테마 선택기를 통해 테마를 선택하면, 로컬 스토리지에 저장하여 다음에 방문할 때에도 동일한 테마가 적용되도록 합니다.

(2) 폼 데이터 임시 저장

폼 데이터를 임시로 저장하여 사용자가 브라우저를 닫더라도 데이터가 유지되도록 할 수 있습니다. 이렇게 하면 데이터 손실을 방지할 수 있습니다.

// 폼 데이터 저장하기
function saveFormData() {
    const formData = {
        name: document.getElementById("name").value,
        email: document.getElementById("email").value
    };
    localStorage.setItem("formData", JSON.stringify(formData));
}

// 폼 데이터 불러오기
function loadFormData() {
    const storedData = JSON.parse(localStorage.getItem("formData"));
    if (storedData) {
        document.getElementById("name").value = storedData.name;
        document.getElementById("email").value = storedData.email;
    }
}

// 폼에 값이 입력될 때마다 데이터 저장
document.querySelectorAll("input").forEach(input => {
    input.addEventListener("input", saveFormData);
});

// 페이지 로드 시 저장된 데이터 불러오기
document.addEventListener("DOMContentLoaded", loadFormData);

위 코드는 사용자가 폼을 작성할 때마다 데이터를 로컬 스토리지에 저장하고, 페이지를 다시 열면 해당 데이터를 불러와 폼을 자동으로 채웁니다.

5. 로컬 스토리지 사용 시 주의사항

로컬스토리지는 유용하지만, 보안과 용량 문제를 고려해야 합니다.

  1. 보안: 로컬스토리지에 민감한 정보를 저장하지 않도록 주의합니다. 예를 들어 비밀번호나 민감한 개인 정보는 절대 로컬스토리지에 저장해서는 안 되며, 이를 서버에 안전하게 저장해야 합니다.
  2. 저장 용량: 브라우저마다 저장 용량이 다르며, 보통 5MB로 제한되어 있습니다. 많은 데이터를 저장해야 할 경우 로컬스토리지를 남용하지 않도록 합니다.
  3. 데이터 유효성 검사: 데이터가 유효한지 확인하고, 필요한 경우 새로운 데이터를 업데이트하거나 삭제하는 등의 유지 관리가 필요합니다.

6. 로컬 스토리지 사용을 위한 대안

로컬스토리지는 장기적인 데이터 보관에 유리하지만, 일정 기간 동안만 데이터를 저장하고 싶은 경우 세션 스토리지(sessionStorage)를 사용할 수 있습니다. 세션 스토리지는 브라우저 탭이 닫히면 데이터가 자동으로 삭제되는 일시적인 저장소입니다.

// 세션 스토리지에 데이터 저장
sessionStorage.setItem("tempData", "임시 데이터");

// 세션 스토리지에서 데이터 불러오기
const tempData = sessionStorage.getItem("tempData");

로컬스토리지는 웹 애플리케이션에서 데이터 저장을 쉽게 관리할 수 있도록 도와주는 중요한 기능입니다. 사용자 경험을 개선하고, 특히 사용자 설정이나 임시 데이터를 저장하는 데 유용하게 사용할 수 있습니다. 로컬스토리지를 통해 사용자 설정을 저장하고 불러오는 예제를 활용하여 여러분의 웹사이트를 더 유용하고 직관적으로 만들어보세요.

이 게시물이 얼마나 유용했습니까?

평점을 매겨주세요.

평균 평점 0 / 5. 투표수: 0

지금까지 투표한 사람이 없습니다. 가장 먼저 게시물을 평가해 주세요.

error: 우클릭이 불가능 합니다.