ETC

PWA

hjkang

모바일 앱

1. 네이티브 앱

  • 애플의 앱스토어나 구글의 플레이스토어에서 다운로드
  • 일반적으로 해당 플랫폼에 특화된 프로그래밍 언어로 만드는 경우가 많음(iOS는 스위프트, 안드로이드는 Java)
  • 각 OS에 맞는 환경에서 개발을 해야하기 때문에, 더 많은 시간과 노력 필요

2. 모바일 웹 앱

  • 모바일 기기에 설치된 웹 브라우저를 기반으로 동작하는 앱으로 모바일을 통해 접근
  • 별도의 설치 없이 대부분의 기기에서 사용 가능
  • 시간, 비용 적게 소요
  • 오프라인 상태에서는 서비스 이용 제한
  • 브라우저 상에서 동작하기 때문에 OS 자원 활용하는데 제한

2. 하이브리드 앱

  • 네이티브 앱과 모바일 웹 앱의 장점을 살리고 단점을 보완하고자 두 가지 방식을 결합한 앱
  • 모바일 웹 앱 기술을 통해 개발하기 때문에 시간과 비용적인 측면에서 네이티브 앱보다 좋음
  • 네이티브 앱만큼 성능이 최적화 되거나 OS 자원을 활용하기에는 제약

PWA(Progressive Web App)

  • 모바일 웹 앱을 네이티브 앱처럼 사용할 수 있도록 함
  • 홈화면에 저장되면 아이콘을 통해 브라우저에서 실행
  • 웹과 앱의 장점 결합

장점

  • 다양한 앱스토어에 출시하기 위해 별도의 프로세스를 거치지 않아도 됨
  • 일반적인 웹 기술 활용하여 만들기 가능
  • 기존의 웹 사이트를 앱으로 만들 수 있기 때문에, 유지보수 용이
  • 반응형이기 때문에, 다양한 화면 크기에도 잘 동작
  • 가볍고 빠른 편
  • 오프라인이나 불안한 네트워크에서도 작동
  • 검색 엔진을 통해 조회 가능
  • 푸시 알림 가능
  • 설치 불필요

단점

  • 다양한 API 미지원
  • OS 별로 이용 가능한 기능의 편차 있음(특히 애플)

세 가지 설정 필요

HTTPS

  • 서비스 워커가 네트워크 요청을 수정할 수 있어서 중간자 공격에 취약하므로, 보안 설정 필요
  • pwa는 localhost나 https로 통신해야만 작동

서비스 워커

  • 네트워크 요청을 수정하고 캐싱이 가능한 JS 파일
  • 브라우저의 백그라운드에서 실행
  • 브라우저와 생명주기가 다르기 때문에 브라우저가 닫혀도 푸시 알림 가능
  • 캐싱을 통해 오프라인 상태에서도 사용할 수 있도록 도와주는 역할

웹 앱 매니페스트

  • 앱에 대한 정보를 담고 있는 Json 파일
  • 배경색, 앱의 이름, 아이콘 등…
  • manifest.json
{
  "short_name": "React App", // 홈 화면의 아이콘 이름
  "name": "Create React App Sample", // 설치 배너에 사용
  "icons": [ // 홈 화면 아이콘
    {
      "src": "favicon.ico",
      "sizes": "64x64 32x32 24x24 16x16",
      "type": "image/x-icon"
    },
    {
      "src": "images/icon192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "images/icon512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ],
  "start_url": "./index.html", // 실행시 시작되는 url
  "display": "standalone", // 디스플레이 유형(fullscreen, standalone, browser)
	"theme_color": "#000000", // 상단 툴바 색상
  "background_color": "#ffffff" // 스플래시 화면 배경 색상
  "orientation": "portrait" // 특정 방향 강제 지정(landscape, portrait)
}

 

 

https://developers-kr.googleblog.com/2017/04/chrome-58-beta-indexeddb-2021.html

  • display 설정
    • fullscreen: 브라우저 기본 웹
    • standalone: 상단 URL 바 제거
    • fullscreen: 화면 전체 사용

 

https://t1.daumcdn.net/cfile/tistory/9916B44F5F32028927

  • orientation 설정
    • portrait: 세로 모드
    • landscape: 가로 모드
  • index.html의 <head> 태그 안에 배치
<head>
    <link rel="manifest" href="manifest.json">
</head>

create-react-app를 이용한 예제

  • 프로젝트 생성
npx create-react-app my-app --template cra-template-pwa

  • 프로젝트 내부에 manifest.json, service-worker.js, serviceWorkerRegistration.js 생성됨
  • 기존 프로젝트가 있다면 위의 파일들을 기존 프로젝트로 복붙해서 사용
  • package.json에서 workbox로 시작하는 패키지들을 기존 프로젝트로 복사 후 npm install
  • 기존 프로젝트의 src/index.js 수정
...
import reportWebVitals from './reportWebVitals';

ReactDOM.render(
 ...
);

serviceWorkerRegistration.register();

 

'ETC' 카테고리의 다른 글

Excel 그룹화 (부분합)  (0) 2023.02.15
Chrome에서 Code Snippets 사용하기  (0) 2023.02.15
인텔리제이 단축키  (0) 2022.11.09
GraphQL  (0) 2022.10.23
AWS, Azure를 GCP와 비교  (0) 2022.10.21