Skip to content

서비스 워커

서비스 워커는 브라우저의 백그라운드에서 실행되는 스크립트로, 캐싱이나 푸시 알림과 같은 작업을 처리한다. 서비스 워커 어댑터를 사용하면 Hono로 만든 애플리케이션을 브라우저 내에서 FetchEvent 핸들러로 실행할 수 있다.

이 페이지에서는 Vite를 사용해 프로젝트를 생성하는 예제를 보여준다.

1. 설정

먼저 프로젝트 디렉토리를 생성하고 이동한다:

sh
mkdir my-app
cd my-app

프로젝트에 필요한 파일을 생성한다. package.json 파일을 다음과 같이 만든다:

json
{
  "name": "my-app",
  "private": true,
  "scripts": {
    "dev": "vite dev"
  },
  "type": "module"
}

마찬가지로 tsconfig.json 파일을 다음과 같이 생성한다:

json
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "ESNext",
    "lib": ["ES2020", "DOM", "WebWorker"],
    "moduleResolution": "bundler"
  },
  "include": ["./"],
  "exclude": ["node_modules"]
}

다음으로 필요한 모듈을 설치한다.

sh
npm i hono
npm i -D vite
sh
yarn add hono
yarn add -D vite
sh
pnpm add hono
pnpm add -D vite
sh
bun add hono
bun add -D vite

2. Hello World

index.html을 수정한다:

html
<!doctype html>
<html>
  <body>
    <a href="/sw">Service Worker로 Hello World</a>
    <script type="module" src="/main.ts"></script>
  </body>
</html>

main.ts는 Service Worker를 등록하는 스크립트다:

ts
function register() {
  navigator.serviceWorker
    .register('/sw.ts', { scope: '/sw', type: 'module' })
    .then(
      function (_registration) {
        console.log('Service Worker 등록: 성공')
      },
      function (_error) {
        console.log('Service Worker 등록: 오류')
      }
    )
}
function start() {
  navigator.serviceWorker
    .getRegistrations()
    .then(function (registrations) {
      for (const registration of registrations) {
        console.log('Service Worker 등록 해제')
        registration.unregister()
      }
      register()
    })
}
start()

sw.ts에서 Hono를 사용해 애플리케이션을 생성하고, Service Worker 어댑터의 handle 함수를 통해 fetch 이벤트에 등록한다. 이를 통해 Hono 애플리케이션이 /sw에 대한 접근을 가로챌 수 있다.

ts
// 타입 지원을 위해
// https://github.com/microsoft/TypeScript/issues/14877
declare const self: ServiceWorkerGlobalScope

import { Hono } from 'hono'
import { handle } from 'hono/service-worker'

const app = new Hono().basePath('/sw')
app.get('/', (c) => c.text('Hello World'))

self.addEventListener('fetch', handle(app))

3. 실행하기

개발 서버를 시작한다.

sh
npm run dev
sh
yarn dev
sh
pnpm run dev
sh
bun run dev

기본적으로 개발 서버는 5173 포트에서 실행된다. 브라우저에서 http://localhost:5173/에 접속해 Service Worker 등록을 완료한다. 그런 다음 /sw에 접속해 Hono 애플리케이션의 응답을 확인한다.

Released under the MIT License.