Service Worker는 브라우저가 페이지와 별도로 실행하는 background worker입니다. 페이지의 JavaScript와 달리 DOM에 직접 접근할 수는 없지만, fetch event를 가로채 network 요청에 cache 전략을 적용할 수 있습니다. 이를 통해 offline fallback, asset caching, PWA 기능을 만들 수 있습니다.
Service Worker는 install, activate, fetch 같은 lifecycle을 가지며, 보안상 HTTPS 환경에서 동작합니다. 잘못된 cache 전략을 쓰면 오래된 파일이 계속 제공될 수 있어 update 전략도 중요합니다.
꼬리질문
조금 더 깊게 물어본다면
답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.
Service Worker는 DOM에 접근할 수 있나요?
직접 접근할 수 없습니다. 별도 worker context에서 실행되기 때문입니다. 페이지와 통신하려면 postMessage 같은 방식을 사용해야 합니다.
이 점이 일반 page script와 큰 차이입니다.
Service Worker가 HTTPS를 요구하는 이유는 무엇인가요?
네트워크 요청을 가로챌 수 있을 정도로 강력한 기능이기 때문입니다. 중간자 공격으로 service worker가 변조되면 큰 보안 문제가 생길 수 있습니다.
로컬 개발 환경은 예외적으로 허용되는 경우가 많습니다.
cache-first와 network-first는 어떻게 다른가요?
cache-first는 cache를 먼저 보고 없을 때 network를 사용합니다. 정적 asset에 어울립니다. network-first는 network를 먼저 시도하고 실패하면 cache를 사용합니다. 최신성이 중요한 API나 문서에 더 어울릴 수 있습니다.
resource 성격에 따라 전략을 나눠야 합니다.
Service Worker 업데이트가 어려운 이유는 무엇인가요?
새 worker가 설치되어도 기존 page가 열려 있으면 바로 제어권을 가져오지 않을 수 있습니다. 사용자가 새로고침하거나 모든 tab을 닫아야 활성화되는 흐름이 생길 수 있습니다.