workbox의 이해 caching 전략 - jerrybabah/botw-recipe GitHub Wiki
workbox란?
service worker를 만들 때 사용할 수 있는 라이브러리
workbox로 할 수 있는 것
- (service worker를 직접 만들 때) 추상화된 service worker의 기능을 workbox 내의 여러 패키지에서 단순히 함수 호출하는 것으로 구현할 수 있다.
- 예를 들어, Stale-While-Revalidate 캐싱 전략을 하나의 함수 호출로 끝내버린다.
- (service worker를 직접 구현하지 않을 때) 설정값만 입력해주면 service worker를 자동으로 만들어준다.
workbox를 이용해 service worker를 직접 구현
workbox 모듈을 임포트하는 방법
- CDN을 이용
- importScripts를 이용하여 workbox-sw를 임포트 (웹 페이지와 다른 특수한 환경의 프로세스에서 동작하기 때문에 importScripts라는 특수한 임포트 문법을 사용하는 듯 하다.)
- 임포트한 객체는 workbox에서 사용 가능한 모든 api를 가지고 있다.
- service worker에서 실제로 읽어들이는 js 코드를 직접 코딩하는 방법
- 직접 service worker를 만들고 싶은데, 간단한 로직을 가지고 있다면 이 방법을 추천
- bundler를 이용
- es6+ 문법 또는 typescript를 활용하여 service worker를 구현 (import문, require문 사용 가능)
- 필요한 패키지를 npm으로 설치한 후 각각 임포트 해야 한다.
- 패키지 목록은 workbox 문서의 Service Worker Packages 카테고리 하위에 모두 나와 있다.
- 직접 service worker를 만들건데, 복잡한 로직을 가질 것이라면 이 방법을 추천
workbox를 이용해 service worker를 직접 프로그래밍 하지 않고 구현
다은 세 가지 node 모듈 중 원하는 것을 이용
workbox-webpack-plugin을 확장한 @vue/cli-plugin-pwa를 이용하기
- vue 프레임워크를 이용하고 vue-cli를 사용한다면 @vue/cli-plugin-pwa라는 workbox-webpack-plugin의 wrapper가 존재
- root directory 밑에 vue.config.js에서 설정을 하면 된다. (설정 방법)
캐싱 전략
캐싱 전략은 크게 두 가지 쟁점을 가지고 세울 수 있다.
- 언제 캐싱할까?
- 리소스가 존재하는 원천(캐시 or 서버)을 어떤 순서로 접근할까?
언제 캐싱할 지에 따른 전략
- precaching: 웹앱에 접근하기 전에 캐싱을 하는 전략
- runtime caching: 해당 리소스를 서버 응답을 통해 받았을 때 캐싱하는 전략
리소스 원천 접근 순서에 따른 전략
- Stale-While-Revalidate
- Cache First
- Network First
- Network Only
- Cache Only