20P by neo 5달전 | ★ favorite | 댓글 2개
  • 프로그레시브 웹 앱(PWA)은 웹 애플리케이션을 네이티브 앱처럼 느끼게 하는 강력한 도구로, 다양한 디스플레이 모드를 통해 사용자 경험을 최적화 가능
  • PWA의 매니페스트 파일에서 설정하는 디스플레이 모드는 브라우저 UI의 가시성을 조정하며, 각 모드에 따라 사용자 인터페이스를 조정해 웹과 앱 경험 간 차이를 완화
  • CSS 미디어 쿼리와 JavaScript를 활용해 디스플레이 모드별로 콘텐츠와 기능을 조정, 사용자 요구를 충족하는 맞춤형 경험 제공
  • PWA 사용자와 일반 웹사이트 방문자는 서로 다른 기대를 가지므로, 디스플레이 모드에 따라 내비게이션, 설치 프롬프트, 콘텐츠를 최적화해야 함
  • 디스플레이 모드별 최적화는 PWA를 더 세련되고 앱처럼 느끼게 하며, 웹에서의 앱 경험을 향상시키는 중요한 기술임

PWA 디스플레이 모드와 최적화 필요성

  • PWA는 웹 애플리케이션을 네이티브 앱처럼 구현하는 기술로, 브라우저 환경에서 벗어나면서 사용성 문제가 발생할 수 있음
    • 브라우저가 제공하는 뒤로 가기, 새로고침, URL 복사 등의 기능을 잃을 가능성
    • 웹사이트에 적합한 요소가 앱 환경에서는 부자연스러울 수 있음
  • manifest 파일에서 설정 가능한 디스플레이 모드는 다음과 같음
    • fullscreen: 모든 브라우저 UI를 숨기고 전체 화면 사용
    • standalone: 브라우저 컨트롤을 숨기고 네이티브 앱처럼 보임
    • minimal-ui: 최소한의 브라우저 UI 요소 표시
    • browser: 표준 브라우저 인터페이스 제공
  • 브라우저 UI가 숨겨지면 사용자 경험에 영향을 미칠 수 있으므로, 디스플레이 모드별 최적화가 필수적

디스플레이 모드 미디어 쿼리 활용

  • 미디어 쿼리를 사용해 디스플레이 모드에 따라 스타일과 기능을 조정 가능
    • 예: @media (display-mode: standalone)은 standalone 모드에서만 적용
    • fullscreen, minimal-ui, browser 모드에 각각 대응하는 쿼리 지원
  • 실험적 모드인 window-controls-overlaytabbeddisplay_override를 통해 사용자 지정 순서로 설정 가능
    • window-controls-overlay: 데스크톱에서 창 컨트롤 버튼을 오버레이로 표시
    • tabbed: 단일 창 내 여러 애플리케이션 환경 지원
  • JavaScript로 디스플레이 모드 확인 및 동적 조정 가능
    • 예: window.matchMedia("(display-mode: standalone)").matches로 현재 모드 확인
    • 모드 변경 시 이벤트를 감지해 동적으로 UI 조정

실용적 적용 사례

  • PWA 사용자 맞춤 콘텐츠: PWA 설치 사용자는 이미 전환된 사용자이므로, 마케팅 콘텐츠를 줄이고 사용자 경험에 집중
    • 설치 프롬프트 등 불필요한 요소를 숨김 처리
  • 추가 옵션 제공: 브라우저 UI가 없는 경우, 폰트 크기 조정, 라이트/다크 모드 전환, 공유 기능 등 인앱 대안 필요
  • 플랫폼 적합 기능: 모바일 네이티브 앱에서 흔한 하단 내비게이션 바는 PWA에 적합하나 웹사이트에서는 부자연스러움
    • 인쇄 버튼 같은 기능은 PWA 모드에서 숨기는 것이 적절
  • 설치 프롬프트 관리: 이미 설치된 PWA에서 설치 프롬프트가 표시되지 않도록 미디어 쿼리 또는 JavaScript로 제어
    • 예: .hide-in-pwa 유틸리티 클래스로 PWA 모드에서 요소 숨김
  • 스코프와 시작 URL 전략: scopestart_url로 PWA와 웹 환경 간 콘텐츠 차별화
    • scope: PWA의 최상위 경로를 정의, 범위를 벗어나면 브라우저 UI 표시
    • start_url: 앱 실행 시 표시할 페이지 지정, 예: 대시보드로 바로 이동
  • 뷰 전환 강화: 네이티브 앱에서 흔한 뷰 전환 효과를 PWA 전용으로 적용
    • 예: @media (display-mode: standalone) 내에서 뷰 전환 CSS 설정

브라우저 지원과 테스트

  • 디스플레이 모드 미디어 쿼리는 대부분의 브라우저에서 광범위한 지원을 받음
    • Firefox는 PWA를 지원하지 않으며, 안드로이드 Firefox는 browser 모드로만 표시
    • 점진적 강화를 통해 비지원 브라우저에서 자연스러운 성능 저하 보장
  • 테스트는 디바이스와 브라우저별로 다르게 동작하므로 다양한 환경에서 수행해야 함
    • 브라우저는 디스플레이 모드 시뮬레이션을 제공하지 않으므로, 실제 디바이스와 OS 조합으로 테스트 필요

요약 및 시사점

  • display-mode 미디어 쿼리를 활용해 PWA를 설치 및 디스플레이 맥락에 따라 적응형 경험 제공
    • 설치 프롬프트 숨김, 내비게이션 지원, 콘텐츠 맞춤, 네이티브 느낌 강화, 점진적 개선 가능
  • PWA 사용자는 일반 웹 방문자와 다른 요구와 기대를 가지므로, 디스플레이 모드에 따라 세심한 조정 필요
  • PWA의 성숙도가 높아질수록, 세심한 구현과 최적화가 매력적인 앱 경험을 만드는 핵심
  • 추가 정보는 Smashing Magazine의 “Extensive Guide To Progressive Web Applications” 참고 권장

브라우저라는 통로를 통해서 써야 하는거여서.. 항상 네이티브를 선호하는데, PWA이야기를 보면 항상 재밌어요.
같은 최적화를 추구하는데 방향이 다른…

Firefox도 nightly에서 다시 PWA를 지원하기 시작했습니다. 곧 stable에도 추가될거에요.