icon안동민 개발노트

Progressive Web Apps (PWA) 소개


 Progressive Web Apps(PWA)는 최신 웹 기술을 사용하여 네이티브 앱과 유사한 사용자 경험을 제공하는 웹 애플리케이션입니다.

 PWA는 웹의 개방성과 접근성을 유지하면서도 네이티브 앱의 장점을 결합하여, 더 나은 사용자 경험을 제공합니다.

 다만 Apple에서 썩 좋아하지 않고, 그렇기에 iOS에서는 PWA를 지원하지 않는 경우가 있습니다.

PWA vs 전통적 웹 앱 vs 네이티브 앱

  • 접근성 : PWA > 전통적 웹 앱 > 네이티브 앱
  • 오프라인 기능 : PWA ≈ 네이티브 앱 > 전통적 웹 앱
  • 설치 용이성 : PWA > 네이티브 앱 > 전통적 웹 앱
  • 업데이트 : PWA > 전통적 웹 앱 > 네이티브 앱

PWA의 주요 특징

  1. 프로그레시브 향상 : 모든 브라우저에서 작동하며, 지원하는 기능에 따라 점진적으로 향상됩니다.
  2. 반응형 : 다양한 화면 크기와 방향에 적응합니다.
  3. 연결 독립적 : 오프라인이나 느린 네트워크에서도 작동합니다.
  4. 앱과 유사함 : 네이티브 앱과 유사한 인터페이스와 내비게이션을 제공합니다.
  5. 최신 상태 유지 : Service Worker를 통해 항상 최신 상태를 유지합니다.
  6. 안전함 : HTTPS를 통해 제공되어 보안을 보장합니다.
  7. 검색 가능 : 검색 엔진에서 발견 가능한 웹 애플리케이션입니다.
  8. 재참여 가능 : 푸시 알림 등을 통해 사용자 재참여를 유도합니다.
  9. 설치 가능 : 앱 스토어 없이 사용자의 홈 화면에 설치할 수 있습니다.

PWA의 핵심 기술 요소

  1. Service Workers : 백그라운드에서 실행되는 스크립트로, 오프라인 기능, 푸시 알림 등을 가능하게 합니다.
// service-worker.js
self.addEventListener('install', (event) => {
  event.waitUntil(
    caches.open('my-cache').then((cache) => {
      return cache.addAll([
        '/',
        '/styles/main.css',
        '/script/main.js'
      ]);
    })
  );
});
 
self.addEventListener('fetch', (event) => {
  event.respondWith(
    caches.match(event.request).then((response) => {
      return response || fetch(event.request);
    })
  );
});
  1. Web App Manifest : 앱의 외관과 동작을 정의하는 JSON 파일입니다.
{
  "name": "My PWA",
  "short_name": "PWA",
  "start_url": "/",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#000000",
  "icons": [
    {
      "src": "icon.png",
      "sizes": "192x192",
      "type": "image/png"
    }
  ]
}
  1. Push Notifications : 사용자에게 실시간 알림을 보낼 수 있습니다.
if ('PushManager' in window) {
  navigator.serviceWorker.ready.then((registration) => {
    registration.pushManager.subscribe({userVisibleOnly: true})
      .then((subscription) => {
        // 서버에 구독 정보 전송
      });
  });
}

오프라인 기능 구현

 1. 캐싱 전략

  • Cache First : 캐시에서 먼저 찾고, 없으면 네트워크 요청
  • Network First : 네트워크 요청을 먼저 시도하고, 실패하면 캐시 사용
  • Stale While Revalidate : 캐시된 콘텐츠를 먼저 제공하고 백그라운드에서 업데이트

 2. 백그라운드 동기화 오프라인 상태에서 수행된 작업을 온라인 상태가 되면 자동으로 동기화합니다.

navigator.serviceWorker.ready.then((registration) => {
  registration.sync.register('mySync').then(() => {
    // 동기화 등록 완료
  });
});

성능 최적화

  1. 코드 분할 : 필요한 코드만 로드하여 초기 로딩 시간 단축
  2. 이미지 최적화 : WebP 형식 사용, 적절한 크기로 리사이징
  3. 리소스 프리로딩 : 중요한 리소스를 미리 로드

Lighthouse를 이용한 성능 측정

 Chrome DevTools의 Lighthouse 탭을 사용하여 PWA 성능을 측정하고 개선할 수 있습니다.

 성능, 접근성, PWA, SEO 등의 지표를 제공합니다.

PWA 배포 및 설치

  1. HTTPS 지원 웹 서버에 PWA 파일 배포
  2. Web App Manifest 파일 연결
  3. Service Worker 등록
  4. 사용자가 "홈 화면에 추가" 옵션 선택하여 설치

플랫폼 지원 현황

  • Android : 완전 지원
  • iOS : 부분 지원 (일부 제한사항 존재)
  • 데스크톱 : Chrome, Edge 등에서 지원

보안 고려사항

  1. HTTPS 사용 필수
  2. 콘텐츠 보안 정책(CSP) 설정
  3. 사용자 데이터 암호화 저장

PWA 실제 적용 사례

  1. Twitter Lite : 데이터 사용량 70% 감소, 페이지 로드 30% 빨라짐
  2. Pinterest : 광고 클릭률 50% 증가, 코어 참여 60% 증가
  3. Uber : 오프라인 기능으로 연결 불안정 지역에서도 사용 가능

 Progressive Web Apps(PWA)는 웹과 네이티브 앱의 장점을 결합하여 사용자 경험을 크게 향상시키는 혁신적인 접근 방식입니다. PWA는 전통적인 웹 애플리케이션의 접근성과 개방성을 유지하면서도, 네이티브 앱과 유사한 성능과 기능을 제공합니다.

 PWA의 주요 특징들은 각각 사용자 경험에 중요한 영향을 미칩니다. 프로그레시브 향상은 모든 사용자가 기본적인 기능을 이용할 수 있게 하면서, 최신 브라우저 사용자에게는 더 나은 경험을 제공합니다. 반응형 디자인은 다양한 기기에서 일관된 경험을 보장하며, 연결 독립성은 불안정한 네트워크 환경에서도 앱 사용이 가능하게 합니다. 앱과 유사한 인터페이스는 사용자에게 친숙한 경험을 제공하고, 푸시 알림을 통한 재참여 유도는 사용자 유지율을 높입니다.

 PWA의 핵심 기술 요소인 Service Workers, Web App Manifest, Push Notifications는 각각 중요한 역할을 합니다. Service Workers는 오프라인 기능과 백그라운드 동기화를 가능하게 하여 네트워크 독립성을 제공합니다. Web App Manifest는 앱의 외관과 동작을 정의하여 네이티브 앱과 유사한 사용자 경험을 만듭니다. Push Notifications는 사용자 재참여를 유도하는 강력한 도구입니다.

 오프라인 기능 구현은 PWA의 핵심 특징 중 하나입니다. 다양한 캐싱 전략을 통해 오프라인 상태에서도 앱 사용이 가능하며, 백그라운드 동기화를 통해 오프라인 상태에서 수행된 작업을 온라인 상태가 되었을 때 자동으로 처리할 수 있습니다.

 성능 최적화는 PWA 개발에서 중요한 부분입니다. 코드 분할, 이미지 최적화, 리소스 프리로딩 등의 기법을 통해 앱의 로딩 속도와 반응성을 개선할 수 있습니다. Lighthouse 도구를 사용하면 이러한 성능 지표를 측정하고 개선점을 찾을 수 있습니다.

 PWA의 배포와 설치 과정은 전통적인 네이티브 앱에 비해 매우 간단합니다. 앱 스토어를 거치지 않고도 웹사이트에서 직접 설치가 가능하며, 업데이트도 자동으로 이루어집니다. 다만, iOS에서는 여전히 일부 제한사항이 있어 완전한 네이티브 앱 경험을 제공하기 어려운 상황입니다.

 보안은 PWA 개발 시 중요하게 고려해야 할 사항입니다. HTTPS 사용, 적절한 CSP 설정, 사용자 데이터의 안전한 처리 등이 필수적입니다.

 실제 적용 사례를 보면, Twitter Lite, Pinterest, Uber 등 많은 기업들이 PWA를 통해 사용자 경험을 개선하고 비즈니스 성과를 향상시켰습니다. 이는 PWA가 단순한 기술적 혁신을 넘어 실질적인 비즈니스 가치를 창출할 수 있음을 보여줍니다.

 결론적으로, PWA는 웹의 미래를 선도하는 기술로 자리잡고 있습니다.

 다만 기대가 무색하게 현 시점에서 그렇게 선호되는 기술은 아닙니다. 그렇기에 PWA를 사용할 때에는 장단점을 잘 파악하고 사용하는 것이 중요합니다.