ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION1323 / 1500
웹난이도 중하핵심 답변

activate에서 이전 캐시를 지울 때 새 fetch와 namespace를 어떻게 일관되게 연결하나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

install·activate·fetch가 같은 버전 상수와 소유권 규칙을 사용해야 합니다. v4 install은 app-static-v4와 app-runtime-v4를 채우고, activate는 자신의 등록이 소유한 app- namespace 중 v4가 아닌 것만 삭제합니다. fetch도 동일한 CACHE_VERSION으로 v4를 읽어야 합니다. activate에서 모든 caches.keys()를 삭제하거나 fetch는 v3를 읽게 두면 활성화 직후 miss와 다른 기능 데이터 삭제가 함께 발생합니다.

삭제 Promise는 event.waitUntil()에 연결해 삭제가 끝나기 전 activate가 성공한 것처럼 보이지 않게 합니다. 정적 파일과 runtime 데이터의 수명이 다르므로 namespace를 분리하면 rollback 때 v3 runtime을 잠시 보존할 수 있습니다. clients.claim()은 문서 제어권을 바꾸는 기능이지 캐시 삭제 완료나 runtime 최신화를 기다려 주는 기능이 아닙니다. 따라서 trace에는 active=v4, read=app-runtime-v4, deleted=[app-static-v3], deleteError, fetchMiss를 남기고, miss면 네트워크 fallback을 명시합니다.

삭제 범위는 이름의 접두사만으로 충분하지 않을 수 있습니다. 같은 origin의 다른 등록이 app- 이름을 사용한다면 registration 소유권을 구분하는 접두사나 manifest가 필요합니다. 또한 activate에서 삭제를 기다리는 동안 fetch가 발생할 수 있으므로, 새 worker는 v4 miss를 네트워크로 채울 수 있어야 하고 삭제 실패를 다음 활성화의 재시도 대상으로 남겨야 합니다. rollback 지표가 나쁘면 v3 namespace를 즉시 삭제하지 않는 선택이 저장공간보다 중요한 경우가 있습니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • install·activate·fetch가 공유하는 상수와 namespace 소유권을 제시합니다.
  • 정적·runtime 캐시의 수명과 rollback 비용을 구분합니다.
  • waitUntil, 삭제 실패, fetch miss를 독립 관찰값으로 둡니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • 모든 CacheStorage 항목을 activate에서 지웁니다.
  • clients.claim을 캐시 정리 완료 신호로 해석합니다.
  • fetch가 읽는 세대와 삭제하는 세대를 다른 규칙으로 계산합니다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • rollback을 위해 이전 namespace를 언제까지 보존할지 어떤 오류율로 결정하겠습니까?
  • activate 직후 miss가 나면 네트워크·fallback 순서를 어떻게 설계하겠습니까?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

← 전체 질문 보기