본문 바로가기
프로그래밍/Front-end

자바스크립트로 웹 페이지의 '뒤로가기' 에러와 캐시 문제 해결하기

by @GodWin 2024. 12. 10.

-

 

-

웹 개발 중, 사용자가 '뒤로가기' 버튼을 클릭했을 때 페이지가 제대로 작동하지 않거나, 캐시된 내용 때문에 오류가 발생하는 문제를 겪은 적이 있나요?
이 문제는 꽤 자주 발생하는데요, 그럴 때마다 답답하고 속상할 수 있죠.
오늘은 그런 문제들을 자바스크립트를 이용해 해결하는 방법을 알아보려고 해요. 어려워 보일 수 있지만, 차근차근 따라오시면 쉽게 해결할 수 있습니다!

1. 히스토리 API로 뒤로가기 제어하기

먼저, 브라우저 히스토리 API를 활용해서 뒤로가기 버튼을 눌렀을 때 발생하는 문제를 방지할 수 있어요.
히스토리 API를 사용하면, 사용자가 뒤로가기를 눌러도 이전 페이지로 돌아가지 않게 하고, 대신 페이지를 강제로 새로 고침하도록 만들 수 있습니다.

Ex) 뒤로가기 버튼을 눌렀을 때 강제로 새로 고침하기

if (window.history && window.history.pushState) {
    // 현재 페이지의 URL을 히스토리에 추가
    window.history.pushState(null, null, window.location.href);

    // 뒤로가기 버튼이 눌렸을 때 페이지를 새로 고침
    window.onpopstate = function () {
        location.reload(true);  // 강제로 새로 고침
    };
}

이 코드는 페이지가 로드될 때, 히스토리 스택에 현재 URL을 추가하고, 뒤로가기 버튼을 눌렀을 때 페이지를 새로 고침합니다.
location.reload(true)는 캐시를 무시하고 서버에서 최신 데이터를 다시 로드하도록 합니다. 이렇게 하면 사용자가 이전 페이지로 돌아갔을 때 발생하는 문제를 예방할 수 있어요.

 

2. 캐시 비활성화와 강제 새로 고침

브라우저는 기본적으로 페이지를 캐시해서, 사용자가 다시 페이지를 방문할 때 더 빠르게 로드되도록 도와줍니다.
그런데 가끔, 이 캐시가 문제를 일으킬 수 있죠. 캐시된 페이지가 제대로 표시되지 않거나, 오래된 데이터가 나올 수 있기 때문입니다.
이럴 때는 강제 새로 고침을 사용해서 최신 데이터를 받아오는 게 좋습니다.

Ex) 페이지 로드 시 강제 새로 고침

if (performance.navigation.type === 1) {
    // 새로 고침 후 로드된 페이지일 때
    console.log("페이지가 새로 고침되었습니다.");
} else {
    // 새로 고침이 아닌 경우
    window.location.reload(true);  // 강제로 새로 고침
}

이 코드는 페이지가 새로 고침된 경우와 그렇지 않은 경우를 구분하여, 페이지가 처음 로드될 때 강제로 새로 고침을 수행합니다.
window.location.reload(true)를 사용하면, 캐시를 무시하고 서버에서 페이지를 새로 로드하게 됩니다. 이렇게 하면, 항상 최신 정보를 받아올 수 있어요!

 

3. 세션 스토리지(SessionStorage) 활용하기

세션 스토리지는 사용자가 페이지를 새로 고침하거나 뒤로가기를 했을 때, 페이지 상태를 추적하고 관리할 수 있게 도와줍니다.
간단히 말해서, 사용자가 페이지를 떠날 때 상태를 저장하고, 다시 돌아왔을 때 그 상태를 복원할 수 있도록 하는 방법이에요.

Ex) 세션 스토리지를 이용한 상태 관리

// 페이지 로드 시 상태 저장
if (!sessionStorage.getItem('visited')) {
    sessionStorage.setItem('visited', 'true');
} else {
    // 뒤로가기 버튼을 눌렀을 때 다른 동작 처리
    console.log('뒤로가기 버튼을 눌렀습니다.');
}

// 페이지가 떠나기 전에 세션 상태 초기화
window.addEventListener('beforeunload', function () {
    sessionStorage.removeItem('visited');
});

sessionStorage는 페이지가 닫히거나 새로 고침될 때까지 데이터를 저장합니다.
따라서, 사용자가 페이지를 떠났다가 다시 돌아왔을 때, 이전에 저장한 상태를 쉽게 확인하고 관리할 수 있어요. 뒤로가기 버튼을 눌렀을 때 원하는 동작을 처리하는 데 유용합니다!

 

4. 캐시를 강제로 삭제하고 새로 고침하기

만약 서비스 워커캐시 API를 사용해서 좀 더 세밀하게 캐시를 제어하고 싶다면, 캐시를 삭제하고 페이지를 새로 고침하는 방법도 있습니다.
이렇게 하면, 항상 최신 데이터를 받아올 수 있도록 보장할 수 있습니다.

Ex) 캐시 삭제 후 페이지 새로 고침

// 브라우저의 캐시 API를 사용하여 캐시 삭제
if ('caches' in window) {
    caches.keys().then(function (cacheNames) {
        cacheNames.forEach(function (cacheName) {
            caches.delete(cacheName);  // 모든 캐시 삭제
        });
    });
}

// 페이지를 강제로 새로 고침
window.location.reload(true);

위 코드는 caches.keys()를 사용해 브라우저에 저장된 캐시를 확인하고, caches.delete()로 모든 캐시를 삭제한 후 페이지를 새로 고침합니다.
이 방법을 사용하면, 항상 최신 페이지를 서버에서 받아올 수 있어서 캐시 문제를 해결할 수 있어요!

웹 개발 중 '뒤로가기' 버튼을 눌렀을 때 발생하는 오류나 캐시 문제는 자주 발생하는 문제입니다.
하지만 걱정하지 마세요! 자바스크립트를 사용하면 충분히 해결할 수 있습니다.
여기서 소개한 방법들을 잘 활용하면, 페이지 상태를 관리하고 캐시 문제를 해결하는 데 큰 도움이 될 거예요.

 

  • 히스토리 API로 뒤로가기를 제어하고,
  • 캐시 비활성화강제 새로 고침으로 최신 정보를 받아올 수 있습니다.
  • 세션 스토리지로컬 스토리지로 상태를 관리하며,
  • 캐시 삭제를 통해 항상 최신 데이터를 가져올 수 있어요.

이 방법들을 잘 조합해서, 사용자 경험을 더 나은 방향으로 개선할 수 있습니다.
다음에는 더 재미있는 팁과 트릭을 들고 올게요. 여러분도 코드 작성하면서 즐거운 경험이 되길 바랄게요!