Service Worker
기본 정보
- 명칭: Service Worker
- 분류: 브라우저 백그라운드 스크립트
- 개발 언어: JavaScript
- 주요 용도: 캐싱, 오프라인 지원, 푸시 알림, 백그라운드 작업
- 관련 주제: #ServiceWorker #PWA #JavaScript #웹앱
개요
Service Worker는 브라우저와 서버 사이에서 동작하는 백그라운드 JavaScript 스크립트이다.
웹페이지와 독립적으로 실행되며, 네트워크 요청을 가로채 캐시를 활용하거나 오프라인 기능, 푸시 알림, 백그라운드 동기화 등을 구현할 수 있다.
PWA(Progressive Web App)를 구현하기 위한 핵심 기술 중 하나이다.
동작 구조
사용자
↓
브라우저
↓
Service Worker
├── Cache
├── Fetch
├── Push
├── Sync
└── Notification
↓
Server
주요 특징
- 백그라운드 실행
- 네트워크 요청 가로채기
- 오프라인 지원
- 캐시 관리
- 푸시 알림
- 백그라운드 동기화
- 앱 성능 향상
동작 과정
웹사이트 접속
↓
Service Worker 등록
↓
설치(Install)
↓
활성화(Activate)
↓
Fetch 이벤트 처리
↓
Cache 또는 Network 응답
생명주기(Lifecycle)
Register
↓
Install
↓
Activate
↓
Running
↓
Update
↓
Terminate
등록(Register)
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register(
'/service-worker.js'
);
}
브라우저에 Service Worker를 등록한다.
Install 이벤트
self.addEventListener(
'install',
event=>{
});
필요한 파일을 캐시에 저장하는 단계이다.
Activate 이벤트
self.addEventListener(
'activate',
event=>{
});
오래된 캐시를 삭제하거나 초기 설정을 수행한다.
Fetch 이벤트
self.addEventListener(
'fetch',
event=>{
});
모든 네트워크 요청을 가로채 처리할 수 있다.
캐시 저장
caches.open("v1")
.then(cache=>{
cache.addAll([
"/",
"/style.css"
]);
});
정적 파일을 미리 저장한다.
캐시 조회
caches.match(
event.request
)
캐시에 존재하면 서버 요청 없이 응답한다.
Cache First 전략
Request
↓
Cache 확인
↓
있음 → 반환
↓
없음 → Server 요청
속도가 빠르며 정적 리소스에 적합하다.
Network First 전략
Request
↓
Server 요청
↓
성공 → Cache 저장
↓
실패 → Cache 반환
최신 데이터가 중요한 서비스에 적합하다.
Stale While Revalidate
Cache 반환
↓
동시에
↓
Server 요청
↓
Cache 업데이트
빠른 응답과 최신 데이터 확보를 동시에 노릴 수 있다.
Push Notification
self.addEventListener(
'push',
event=>{
});
백그라운드에서도 푸시 알림을 받을 수 있다.
Notification
self.registration.showNotification(
"새 알림"
);
사용자에게 알림을 표시한다.
Background Sync
self.addEventListener(
"sync",
event=>{
});
오프라인에서 수행하지 못한 작업을 네트워크 복구 후 자동 실행한다.
HTTPS
Service Worker는 보안을 위해 HTTPS 환경에서만 동작한다.
예외
localhost
개발 환경에서는 HTTP도 허용된다.
PWA와 관계
HTML
↓
JavaScript
↓
Manifest
+
Service Worker
↓
PWA
Service Worker와 Manifest가 함께 있어야 PWA 기능을 제대로 활용할 수 있다.
대표 활용 분야
- 오프라인 웹앱
- 쇼핑몰
- ERP
- SaaS
- 뉴스 서비스
- 메모 앱
- 관리자 시스템
- 모바일 웹
장점
- 빠른 로딩 속도
- 오프라인 지원
- 서버 부하 감소
- 사용자 경험 향상
- 푸시 알림 지원
- 캐시 활용 가능
단점
- 캐시 관리가 복잡할 수 있음
- HTTPS 필수
- 브라우저별 정책 차이
- 업데이트 전략을 잘 설계해야 함
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
- 캐시 버전 관리(
v1,v2등) - 오래된 캐시 자동 삭제
- Workbox 라이브러리 활용
- 정적 파일은 Cache First 전략 적용
- API는 Network First 또는 Stale While Revalidate 전략 적용
- HTTPS 환경에서 운영
- 서비스 워커 업데이트 안내 UI 제공
- Push 권한은 필요한 시점에 요청
- Lighthouse로 PWA 품질 점검
- 캐시 용량 관리 정책 수립
Service Worker와 함께 사용하는 기술
대표 개발 도구
- Chrome DevTools
- Lighthouse
- Workbox
- Visual Studio Code
- Vite
- npm
관련 문서
출처
- MDN Web Docs - Service Worker API
- Google web.dev Service Workers Guide
- W3C Service Workers Specification