게시일: 2023년 8월 10일, 최종 업데이트: 2026년 7월 14일
unload 이벤트는 페이지에서 명시적으로 다시 사용 설정하지 않는 한 unload 핸들러가 페이지에서 실행되지 않도록 기본값을 점진적으로 변경하여 점진적으로 지원 중단됩니다.
지원 중단 타임라인
Google은 뒤로-앞으로 캐시를 구현할 의도를 발표했을 때인 2019년 1월부터 로드 취소 동작이 변경될 수 있다고 언급했습니다. 구현 작업과 동시에 대규모 아웃리치를 진행한 결과 로드 취소 사용량이 크게 감소했습니다. 이 아웃리치를 보완하기 위해 Chrome 115부터 로드 취소 지원 중단의 영향을 테스트하는 방법도 제공하기 시작했습니다.
- Chrome 115에서 로드 취소에 Permission-Policy API를 사용하는 실제 테스트 (2023년 7월)
- Chrome 117에서 플래그를 사용 설정하여 로컬 테스트 (2023년 9월)
2024년에는 출시 시작을 차단하는 여러 문제를 해결했으며 2025년에는 상위 50개 사이트에 지원 중단을 출시했습니다.
| Milestone | Milestone 날짜 | 상위 50개 사이트 | 기타 출처 비율 |
|---|---|---|---|
| 135 | 2025년 3월 26일 | 1 (www.google.com) |
0 |
| 139 | 2025년 7월 30일 | 5 | 0 |
| 140 | 2025년 8월 27일 | 10 | 0 |
| 141 | 2025년 9월 24일 | 25 | 0 |
| 142 | 2025년 10월 22일 | 50 | 0 |
2026년에는 다음 표에 자세히 설명된 대로 8개 Milestone (약 32주)에 걸쳐 모든 출처에 출시하기 시작했습니다.
| Milestone | Milestone 날짜 | 상위 50개 사이트 | 모든 사이트의 Chrome 페이지 로드 비율 |
|---|---|---|---|
| 146 | 2026년 3월 10일 | 50 | 1 |
| 147 | 2026년 4월 7일 | 50 | 5 |
| 148 | 2026년 5월 5일 | 50 | 10 |
| 149 | 2026년 6월 2일 | 50 | 20 |
| 150 | 2026년 6월 30일 | 50 | 40 |
| 151 | 2026년 7월 28일 | 50 | 60 |
| 152 | 2026년 8월 25일 | 50 | 80 |
| 154 | 2026년 9월 22일 | 50 | 100 |
전체 출시는 지원 중단 의도에 자세히 설명된 대로 개별 사용자 또는 사이트가 아닌 페이지 로드 (시간 경과에 따른 일관성)를 기반으로 하므로 사용자 또는 사이트에 다른 사용자 또는 사이트보다 더 큰 영향을 미치지 않습니다.
이 지원 중단 타임라인에서 로드 취소에서 이전하는 데 충분한 시간을 제공하지 않는 경우 선택 해제 옵션 메뉴도 제공합니다.
배경
unload는 문서가 로드 취소될 때 실행되도록 설계되었습니다. 이론적으로 사용자가 페이지에서 벗어날 때마다 또는 세션 종료 콜백으로 코드를 실행하는 데 사용할 수 있습니다.
이 이벤트가 가장 일반적으로 사용된 시나리오는 다음과 같습니다.
- 사용자 데이터 저장: 페이지를 벗어나기 전에 데이터를 저장합니다.
- 정리 작업 실행: 페이지를 버리기 전에 열려 있는 리소스를 닫습니다.
- 애널리틱스 전송: 세션 종료 시 사용자 상호작용과 관련된 데이터를 전송합니다.
그러나 unload 이벤트는 매우 불안정합니다.
데스크톱 Chrome 및 Firefox에서 unload는 비교적 안정적이지만 bfcache (뒤로-앞으로 캐시)의 사용을 방지하여 사이트 성능에 부정적인 영향을 미칩니다.
모바일 브라우저에서는 탭이 자주 백그라운드 처리된 후 종료되므로 unload가 실행되지 않는 경우가 많습니다. 이러한 이유로 브라우저는 모바일에서 unload보다 bfcache에 우선순위를 두므로 더욱 불안정해집니다. Safari도 데스크톱에서 이 동작을 사용합니다.
Chrome팀은 데스크톱에서 unload보다 bfcache에 우선순위를 두는 모바일 모델을 사용하면 이전에는 Chrome (및 Firefox)에서 비교적 안정적이었던 데스크톱에서도 불안정해져 방해가 될 것이라고 생각합니다. 대신 Chrome의 목표는 unload 이벤트를 완전히 삭제하는 것입니다. 그때까지는 지원 중단을 명시적으로 선택 해제한 사용자를 위해 Chrome의 데스크톱에서 안정적으로 유지됩니다.
unload 이벤트를 지원 중단하는 이유는 무엇인가요?
unload 지원 중단은 현재 우리가 살고 있는 웹을 훨씬 더 크게 인식하는 데 있어 중요한 단계입니다. unload 이벤트는 현대 컴퓨팅 세계에서 웹을 탐색하는 방식에 점점 더 맞지 않는 앱 수명 주기에 대한 잘못된 제어 감각을 제공합니다.
모바일 운영체제는 메모리를 절약하기 위해 웹페이지를 자주 고정하거나 로드 취소하며 데스크톱 브라우저도 동일한 이유로 점점 더 많이 이 작업을 실행합니다. 운영체제 개입이 없더라도 사용자는 '페이지를 벗어나지' 않고도 탭을 자주 전환하고 이전 탭을 종료합니다.
더 이상 유효하지 않은(유효한 적이 있다면) 오래된 개념에 의존하지 않고 웹 개발자로서 패러다임이 실제 세계의 패러다임과 일치하도록 해야 한다는 인식이 unload 이벤트를 더 이상 사용하지 않는 것으로 이어집니다.
unload 이벤트의 대안
unload 대신 다음을 사용하는 것이 좋습니다.
visibilitychange: 페이지의 공개 상태가 변경되는 시점을 확인합니다. 이 이벤트는 사용자가 탭을 전환하거나, 브라우저 창을 최소화하거나, 새 페이지를 열 때 발생합니다.hidden상태를 앱 및 사용자 데이터를 저장하는 마지막 안정적인 시간으로 간주합니다.pagehide: 사용자가 페이지에서 벗어난 시점을 확인합니다. 이 이벤트는 사용자가 페이지에서 벗어나거나, 페이지를 새로고침하거나, 브라우저 창을 닫을 때 발생합니다. 페이지가 최소화되거나 다른 탭으로 전환되면pagehide이벤트가 실행되지 않습니다.pagehide는 페이지가 뒤로-앞으로 캐시에 적합하지 않게 만들지 않으므로 이 이벤트가 실행된 후 페이지를 복원할 수 있습니다. 이 이벤트에서 리소스를 정리하는 경우 페이지 복원 시 리소스를 복원해야 할 수 있습니다.
beforeunload 이벤트는 취소 가능한 이벤트라는 점에서 unload와 약간 다른 사용 사례를 가지고 있습니다. 이 이벤트는 탐색 시 저장되지 않은 변경사항을 사용자에게 경고하는 데 자주 사용됩니다. 이 이벤트는 백그라운드 탭이 종료되면 실행되지 않으므로 불안정합니다. beforeunload 사용을 제한하고 조건부로만 추가하는 것이 좋습니다. 대신 대부분의 unload 대체에 앞서 언급한 이벤트를 사용하세요.
자세한 내용은 unload 핸들러를 사용하지 않는 방법에 관한 이 도움말을 참고하세요.
unload 사용 감지
페이지에서 unload 이벤트가 표시되는 위치를 찾는 데 도움이 되는 다양한 도구가 있습니다. 이를 통해 사이트는 자체 코드 또는 라이브러리를 사용하여 이 이벤트를 사용하고 있는지 확인할 수 있으므로 예정된 지원 중단의 영향을 받을 수 있습니다.
Chrome DevTools
Chrome DevTools에는 unload 핸들러 사용을 비롯하여 페이지가 뒤로-앞으로 캐시에 적합하지 않게 만들 수 있는 문제를 식별하는 데 도움이 되는 back-forward-cache 감사가 포함되어 있습니다.
뒤로-앞으로 캐시를 테스트하려면 다음 단계를 따르세요.
페이지에서 DevTools를 열고 애플리케이션 > 백그라운드 서비스 > 뒤로-앞으로 캐시 로 이동합니다.
뒤로-앞으로 캐시 테스트 를 클릭합니다. Chrome에서 자동으로
chrome://terms/로 이동한 후 페이지로 돌아갑니다. 또는 브라우저의 뒤로 및 앞으로 버튼을 클릭할 수 있습니다.
페이지가 뒤로-앞으로 캐싱에 적합하지 않은 경우 뒤로-앞으로 캐시 탭에 문제 목록이 표시됩니다. 조치 가능에서 unload를 사용하고 있는지 확인할 수 있습니다.
Reporting API
Reporting API는 읽기 전용 권한 정책과 함께 사용하여 웹사이트 사용자로부터 unload 사용을 감지할 수 있습니다.
자세한 내용은 Reporting API를 사용하여 로드 취소 찾기를 참고하세요.
Bfcache notRestoredReasons API
notRestoredReasons 속성—PerformanceNavigationTiming 클래스에 추가된—은 탐색 시 문서가 bfcache를 사용하지 못하도록 차단되었는지 여부와 그 이유에 관한 정보를 보고합니다. 다음은 기존 unload 리스너에 관한 응답 객체 경고의 예입니다.
{
children: [],
id: null,
name: null,
reasons: [
{"reason", "unload-listener"}
],
src: null,
url: "https://www.example.com/page/"
}
unload 액세스 제어
Chrome은 unload 이벤트를 점진적으로 지원 중단하고 있습니다. 그동안 다양한 도구를 사용하여 이 동작을 제어하고 예정된 지원 중단을 준비할 수 있습니다. 이러한 기술에 장기적으로 의존해서는 안 되며 가능한 한 빨리 대안으로 이전할 계획을 세워야 합니다.
다음 옵션을 사용하면 unload 핸들러를 사용 설정 또는 사용 중지하여 예정된 지원 중단을 준비할 수 있도록 핸들러가 없는 경우 사이트가 어떻게 작동하는지 테스트할 수 있습니다. 다양한 유형의 정책이 있습니다.
- 권한 정책: 사이트 소유자가 HTTP 헤더를 사용하여 사이트 또는 개별 페이지 수준에서 기능에 대한 액세스를 제어할 수 있는 플랫폼 API입니다.
- 엔터프라이즈 정책: IT 관리자가 조직 또는 비즈니스용 Chrome을 구성하는 도구입니다. Google 관리 콘솔과 같은 관리자 패널을 사용하여 구성할 수 있습니다.
- Chrome 플래그: 개별 개발자가
unload지원 중단 설정을 변경하여 다양한 사이트에 미치는 영향을 테스트할 수 있습니다.
권한 정책
Chrome 115부터 권한 정책이 추가되어 사이트에서 unload 핸들러 사용을 선택 해제하고 bfcache를 즉시 활용하여 사이트 성능을 개선할 수 있습니다. 사이트에서 이 기능을 설정하는 방법은 이러한 예시를 참고하세요. 이를 통해 사이트는 unload 지원 중단을 앞서 준비할 수 있습니다.
Chrome 117에서는 사이트에서 반대로 unload 핸들러를 계속 실행하도록 선택할 수 있도록 확장되었습니다. Chrome에서 이러한 기본값을 향후 실행되지 않도록 변경하기 때문입니다.unload 사이트에서 로드 취소 핸들러를 계속 실행하도록 허용하는 방법은 이러한 예시를 참고하세요. Google은 사이트 소유자가 불안정성을 고려하여 unload 핸들러 사용을 중단하도록 권장하지만, 이를 사용해야 하는 사이트를 위해 상당한 기간 동안 이 선택 해제를 지원할 계획입니다. 다시 선택해도 모바일에서 unload 핸들러가 더 안정적으로 작동하지는 않으며 현재 상태가 복원될 뿐입니다.
엔터프라이즈 정책
unload 이벤트에 따라 올바르게 작동하는 소프트웨어가 있는 기업은 ForcePermissionPolicyUnloadDefaultEnabled 정책을 사용하여 제어 중인 기기의 점진적인 지원 중단을 방지할 수 있습니다. 이 정책을 사용 설정하면 unload가 모든 출처에 대해 기본적으로 사용 설정된 상태로 유지됩니다. 페이지는 원하는 경우 더 엄격한 정책을 설정할 수 있습니다. 권한 정책 선택 해제와 마찬가지로 잠재적인 호환성이 손상되는 변경사항을 완화하는 도구입니다. 다시 한번 말씀드리지만 사이트 소유자는 unload 핸들러에 의존하지 않도록 권장하지만, Chrome은 이를 사용해야 하는 사이트를 위해 상당한 기간 동안 이 엔터프라이즈 선택 해제를 지원할 계획입니다.
Chrome 플래그 및 명령줄 스위치
엔터프라이즈 정책 외에도 Chrome 플래그 및 명령줄 스위치를 사용하여 개별 사용자의 지원 중단을 사용 중지할 수 있습니다.
chrome://flags/#deprecate-unload를 enabled로 설정하면 지원 중단 기본값이 앞으로 이동하고 unload 핸들러가 실행되지 않습니다. 권한 정책을 사용하여 사이트별로 재정의할 수 있지만 기본적으로 계속 실행됩니다.
이러한 설정은 명령줄 스위치로도 제어할 수 있습니다.
옵션 비교
다음 표에는 앞에서 설명한 옵션의 다양한 용도가 요약되어 있습니다.
| 지원 중단 앞으로 가져오기 | 지원 중단 앞으로 가져오기 (예외 포함) | 이전을 위한 시간을 확보하기 위해 지원 중단 방지 | |
|---|---|---|---|
| 권한 정책 (페이지/사이트에 적용) |
예 | 예 | 예 |
| 엔터프라이즈 정책 (기기에 적용) |
지원하지 않음 | 아니요 | 예 |
| Chrome 플래그 (개별 사용자에게 적용) |
예 | 아니요 | 지원하지 않음 |
| Chrome 명령줄 스위치 (개별 사용자에게 적용) |
예 | 아니요 | 예 |
결론
unload 핸들러가 지원 중단됩니다. 오랫동안 불안정했으며 문서가 삭제되는 모든 경우에 실행된다고 보장되지 않습니다. 또한 unload 핸들러는 bfcache와 호환되지 않습니다.
unload 핸들러를 사용하는 사이트는 기존 unload 핸들러를 테스트하고, 삭제하거나 이전하거나, 최후의 수단으로 시간이 더 필요한 경우 지원 중단을 지연하여 예정된 지원 중단을 준비해야 합니다.
감사의 말씀
유용한 검토 의견을 제공해 주신 Kenji Baheux, Fergal Daly, Adriana Jara, Jeremy Wagner께 감사드립니다.