← 목록

PWA를 위한 오프라인 기능 구현하기 📶

작성: 2024년 09월 13일읽기: 약 4분

오늘은 Progressive Web App(PWA)에서 중요한 기능 중 하나인 오프라인 기능을 구현하는 방법을 알아보겠습니다. 웹 개발에 관심 있는 주니어 개발자 여러분, 오프라인 기능을 통해 사용자 경험을 대폭 향상시킬 수 있습니다. 복잡한 기술 용어는 최대한 피하면서 설명하겠습니다!

서비스 워커(Service Worker) 소개

오프라인 기능을 구현하기 위해 우리는 '서비스 워커'라는 기술을 사용할 것입니다. 서비스 워커는 브라우저와 서버 사이에서 작동하는 스크립트 파일입니다. 이것은 웹 앱이 오프라인일 때도 작동할 수 있게 해주는 핵심 기술입니다.

서비스 워커 등록하기

먼저, 서비스 워커를 등록해야 합니다. 이 코드 스니펫을 사용하여 서비스 워커 파일(service-worker.js)을 등록해 보세요.

if ('serviceWorker' in navigator) {
  window.addEventListener('load', function() {
    navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
      // 등록 성공
      console.log('ServiceWorker registration successful with scope: ', registration.scope);
    }, function(err) {
      // 등록 실패
      console.log('ServiceWorker registration failed: ', err);
    });
  });
}

캐싱 전략

서비스 워커를 사용하여 오프라인 기능을 구현하는 핵심은 적절한 캐싱 전략을 선택하는 것입니다. 여기서는 가장 간단한 캐싱 전략인 '캐시 우선(Cache First)' 전략을 사용해 보겠습니다.

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request).then(function(response) {
      // 캐시에서 찾은 경우 해당 캐시 반환
      if (response) {
        return response;
      }
      return fetch(event.request);
    })
  );
});

이 코드는 서비스 워커가 네트워크 요청을 가로채고, 요청에 해당하는 캐시가 있으면 그 캐시를 반환합니다. 캐시가 없으면 네트워크에서 요청을 가져옵니다.

캐시 업데이트

오프라인 기능을 구현할 때 중요한 것은 캐시를 최신 상태로 유지하는 것입니다. 서비스 워커의 install 이벤트를 사용하여 초기 캐시 세트를 설정할 수 있습니다.

var CACHE_NAME = 'my-site-cache-v1';
var urlsToCache = [
  '/',
  '/styles/main.css',
  '/script/main.js'
];

self.addEventListener('install', function(event) {
  // 캐시를 열고 필요한 자원을 캐시에 추가합니다.
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(function(cache) {
        console.log('Opened cache');
        return cache.addAll(urlsToCache);
      })
  );
});

이 코드는 서비스 워커 설치 시 웹 앱에 필요한 기본 자원들을 캐시에 추가합니다. 이렇게 하면 오프라인 상태에서도 이 자원들을 사용할 수 있습니다.

마무리

오프라인 기능은 PWA의 중요한 부분입니다. 오늘 배운 내용을 통해 사용자가 네트워크에 연결되어 있지 않을 때도 웹 앱을 사용할 수 있게 되었습니다. 서비스 워커와 캐싱 전략을 잘 활용하여 사용자 경험을 향상시켜 보세요!

이제 여러분도 PWA의 오프라인 기능 구현에 한 걸음 더 다가섰습니다. 계속해서 연습하고, 새로운 기능을 탐색하여 웹 개발 능력을 키워 나가세요!