
더모먼트 스터디에서 PWA 라는 주제를 맡아 발표하게 되었다.
발표 준비를 하며 공부했던 내용을 정리해 보겠다.
PWA를 처음 알아보았을 때 "반응형 웹이랑 다를게 뭐지?" 라고 생각했었다. 허지만 공부를 하며 단순 UI만 앱처럼 작동하는것이 아닌 앱처럼 작동하기 위해서 여러가지 기능이 있다는 것을 알게 되었다.
웹은 다음과 같이 작동하며 다음과 같은 특징이 있다.
사용자 → 브라우저 → 서버 → HTML, CSS → 렌더링
이와 반면에 앱은
앱 설치 → 기기에 저장 → 실행 → 필요 시 서버와 통신
그렇다면 웹의 접근성과 앱의 성능, 이 둘의 장점을 합칠 수는 없을까? 그 해답이 바로 PWA다.
PWA(Progressive Web App)는 웹 기술을 사용하면서도 앱과 유사한 사용자 경험을 제공하는 기술이다.
PWA는 웹이지만 앱의 장점을 사용하기 위해 사용하는 기술이라고 생각하면 된다.
PWA가 앱처럼 동작하기 위해서는 세 가지 핵심 기술이 필요하다.
PWA는 반드시 HTTPS 환경에서만 동작한다.
서비스 워커는 브라우저의 네트워크 요청을 가로채는 강력한 기능을 가지고 있다. 만약 HTTP 환경에서 이를 허용한다면 악의적인 스크립트가 요청을 조작하는 중간자 공격(MITM)에 취약해진다. 그렇기 때문에 브라우저는 HTTPS 환경에서만 서비스 워커 등록을 허용한다. (개발 편의를 위해 localhost는 예외다)
서비스 워커는 PWA의 핵심이라고 할 수 있다.
일반 자바스크립트와 달리 브라우저의 메인 스레드와 완전히 분리된 백그라운드에서 실행되는 스크립트다. 덕분에 앱이 꺼져 있거나 브라우저가 열려 있지 않아도 동작할 수 있다.
서비스 워커의 가장 중요한 역할은 네트워크 요청을 가로채는 것이다. 사용자가 어떤 리소스를 요청하면 서비스 워커가 중간에서 이를 가로채 캐시에 저장된 응답을 돌려줄 수 있다. 이것이 오프라인 동작을 가능하게 하는 원리다.
사용자 요청 → 서비스 워커 → 캐시 확인
├─ 캐시 있음 → 캐시된 응답 반환 (오프라인 가능)
└─ 캐시 없음 → 서버에 요청 → 응답 캐시 후 반환
서비스 워커는 다음 라이프사이클로 동작한다.
manifest.json 파일 하나로 "이 웹사이트는 앱처럼 설치될 수 있다"고 브라우저에게 알려주는 역할을 한다.
{
"name": "My PWA App",
"short_name": "MyApp",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"icons": [
{
"src": "/icons/icon-192.png",
"sizes": "192x192",
"type": "image/png"
}
]
}
display: "standalone" 으로 설정하면 브라우저 주소창 없이 앱처럼 실행된다.PWA가 만능 해결책은 아니다. 장단점을 명확히 알고 사용해야 한다.
장점
단점
PWA는 이미 많은 기업들이 실제 서비스에 도입하여 유의미한 성과를 거두고 있다.
Twitter Lite
Twitter는 저사양 기기와 느린 네트워크 환경의 사용자를 위해 PWA 버전인 Twitter Lite를 출시했다. 그 결과 데이터 사용량이 70% 감소했고, 세션당 페이지 방문 수는 65% 증가했다.
Starbucks
Starbucks PWA는 오프라인 상태에서도 메뉴 탐색과 주문이 가능하다. 네이티브 앱 대비 앱 크기가 99.84% 절감되었고, 이를 통해 저사양 기기 사용자층까지 서비스를 확대했다.
Pinterest
Pinterest는 모바일 웹을 PWA로 전환한 후 가입 전환율이 60% 증가했고, 핵심 참여 지표도 크게 개선되었다.
이처럼 PWA는 특히 느린 네트워크 환경이나 저사양 기기 사용자가 많은 서비스에서 큰 효과를 발휘한다.
PWA는 네이티브 앱을 완전히 대체하는 기술이 아니다. 블루투스나 NFC 같은 고급 하드웨어 기능이 필요하거나, 앱스토어 노출이 중요한 서비스라면 여전히 네이티브 앱이 적합하다.
하지만 "웹의 접근성을 유지하면서 앱에 가까운 경험을 제공한다"는 측면에서 PWA는 분명히 웹이 나아가는 방향 중 하나라고 생각한다. 앞으로 브라우저의 API 지원이 더 넓어질수록 PWA의 가능성도 함께 커질 것이다.
잘 봤습니다 ^_^