SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
마르코(장원석), 우아한테크코스 4기, 2022. 10. 27.
Progressive Web App
점진적으로 향상되는 웹 앱
목차
•1. PWA 개요
•2. 설치 가능하게 만들기
•3. 서비스 워커
•4. Web Push Notification
•5. 오프라인 실행 지원
• 프로그레시브 웹 앱(PWA)은 새롭게 떠오르는 웹 브라우저 API를
전통적인 점진적 향상(progressive enhancement) 기법과
함께 사용해서 네이티브 앱에 필적하는 사용자 경험을 제공하는
크로스 플랫폼 웹 애플리케이션을 말합니다. - MDN -
1. PWA 개요
1) PWA 정의
네이티브 앱에
서
만 구현할 수 있던 기능을
점진적으로 웹 기술로 구현
•점진적 향상(progressive enhancement)
모든 코드를 실행할 수 있는 최신 브라우저 사용자에게는 가능한
최고의 경험을 제공하면서 이전 브라우저를 포함한 가능한 많은
사용자들에게도 필수 기능과 콘텐츠를 제공하려는 디자인 철학
크로스 브라우징 지원
progressive enhancement
기능 탐지 및 폴리필
progressive enhancement란
크로스 브라우징 확인
progressive enhancement
https://www.browserstack.com/
브라우저 호환성 표 확인
https://caniuse.com/
CanIUse
BrowserStack
기기별, 브라우저별 크로스 브라우징
원격 시뮬레이팅하는 테스트 도구
(1분씩 무료, 로컬 가능)
1. PWA 개요
HTTPS
manifest.json
serviceWorker.js
2) PWA가 되기 요건
Web App
3) 활용 사례(Twitter Lite)
1. PWA 개요
mobile.twitter.com
구글플레이스토어 앱 설치
빠른 속도
데이터를 덜 사용
저장공간도 덜 차지
푸시 알림
오프라인 실행 지원
세션당 페이지 수 65% 증가
보
낸
트윗 75% 증가
이탈률 20% 감소
출처: https://web.dev/twitter/
3) 활용 사례(많은 앱들이 네이티브 앱 외에도 PWA를 추가 지원)
1. PWA 개요
https://appsco.pe
https://www.pwastats.com
PWA 예시 확인
1) Manifest 설정
2. 설치 가능하게 만들기
Web App Manifest는 브라우저에게
데스크톱이나 모바일 기기에
설치할 때 어떻게 작동해야 하는지
알려주는 JSON 형식의 파일
macOS iOS
1) Manifest 설정
2. 설치 가능하게 만들기
manifest.json 파일을 최상위 디렉터리에 만든다.
index.html의 head 태그 내에 다음과 같은 링크 태그를 추가한다.
<link rel="manifest" href="manifest.json" />
2) manifest.json의 구성요소
2. 설치 가능하게 만들기
background_color
theme_color
icons
name
short_name
description
orientation
display
display_override
scope
start_url
categories
screenshots
prefer_related_applications
related_applications
protocol_handlers
share_target
shortcuts
https://developer.mozilla.org/en-US/docs/Web/Manifest
2. 설치 가능하게 만들기
MDN
https://developer.mozilla.org/ko/docs/Mozilla/Add-ons/WebExtensions/manifest.json
Goolge Developers
https://web.dev/add-manifest/
2. 설치 가능하게 만들기
3) 바로가기 추가 - Manifest(shortcuts)
manifest.json
2. 설치 가능하게 만들기
4) 공유 대상 되기 - Manifest(share_target)
설치된 PWA가
시스템의 share dialog에
서
share target이 되도록 설정
manifest.json
2. 설치 가능하게 만들기
5) 커스텀 설치 버튼 만들기
기본 설치 버튼
InApp 커스텀 설치 버튼
2. 설치 가능하게 만들기
5) 커스텀 설치 버튼 만들기
any.js
beforeInstallPrompt 이벤트
설치 prompt 표시 전 감지
설치 prompt 표시안되도록 지
연
하고
변수에 BeforeInstallPromptEvent를 저장
BeforeInstallPromptEvent.prompt()
설치 prompt 표시
6) 예외 - iOS에
서
설치
2. 설치 가능하게 만들기
iOS에
서
는 설치 prompt가
아직 지원되지 않음
1) 별도의 워커 스레드에
서
동작하는 특징
3. 서비스 워커
서비스워커
워커스레드
푸시서비스
캐시
백그라운드
오프라인
페이지가 닫혔더라도 또는 오프라인이어도 서비스워커는 계속 동작
웹페이지
메인스레드
User Agent
(웹브라우저)
푸시 알림 표시
Fetch 응답
2) 서비스 워커 등록
3. 서비스 워커
navigator.serviceWorker.register()
서비스워커의 scriptURL을 전달하여
서비스 워커 등록
index.js
3) 생명주기
3. 서비스 워커
Installing
Installed/
waiting
Activating Activated Redundant
register된 서비스워커는 위와 같은 생명주기를 거친다
Activated
3) 생명주기
3. 서비스 워커
Installed/
waiting
Activating Redundant
Installing
서비스 워커의 업데이트가 발견되는 경우 설치
(업데이트 여부는 기존 서비스 워커 파일과의 바이트 단위 비교
결
과에 따름)
Installing
Activating
Installing Activated
3) 생명주기
3. 서비스 워커
Redundant
Installed/
waiting
installed되도
기존 서비스워커가 제어하는 웹페이지가 켜져 있으면
waiting 상태가 유지됨
Installed /
waiting
Installing Activated
3) 생명주기
3. 서비스 워커
Redundant
대기중인 서비스워커
활성화하는 방
법
Activating
Installed/
waiting
1. 기존 서비스워커가 제어하는 웹페이지 닫기
2. 개발자도구에
서
skipWaiting 직접 누르기
3. install 이벤트 내 self.skipWaiting() 호출
Activated
Installed/
waiting
Installing
3) 생명주기
3. 서비스 워커
Redundant
Activating
기존 웹페이지가 모두 닫혀서
Activating 단계가 되더라도,
페이지를 새로고침하기 전까지 클라이언트를 제어할 수가 없음
Activating
Installed/
waiting
Installing
3) 생명주기
3. 서비스 워커
Redundant
클라이언트 제어권 부여 방
법
1. 사용자가 페이지를 새로고침
2. activate 이벤트 내 self.clients.claim() 호출
Activating Activated
3) 생명주기
3. 서비스 워커
Installing
Installed/
waiting
Activating Redundant
Activated
Activated
Acitvated되어 클라이언트를 제어하게 되면
fetch, sync, push 등의 기능 이벤트 제어 가능
Activated
3) 생명주기
3. 서비스 워커
Installing
Installed/
waiting
Activating
Redundant
새로운 서비스 워커로 대체되었을 때
곧 소
멸
될 서비스 워커의 상태
Redundant
4) 서비스 워커를 통해 처리할 수 있는 이벤트
3. 서비스 워커
푸시 알림 관
련
이벤트
push
pushsubscriptionchange
notificationclick
notificationclose
서비스 워커 설치 관
련
이벤트
install
activate
네트워크 요청 관
련
이벤트
fetch
백그라운드 동기화 관
련
이벤트
sync
클라이언트와 통신 관
련
이벤트
message
1) 백그라운드에
서
도 알림 수신
4. Web Push Notification
사용자의 재참여를
유도하는 데 유용한
built-in 자바스크립트만으로도 구현 가능
푸시 알림
2) Web Push의 브라우저 호환성 - 2022년 현재
4. Web Push Notification
iOS의 웹 푸시 지원 계획
4. Web Push Notification
출처 : https://www.apple.com/ios/ios-16-preview/features/
2023년 iOS 16 safari에
서
Web Push Notification 지원 예정
2) Web Push와 브라우저 호환성 - 2023년 예정
4. Web Push Notification
Linux
W
indow
s
m
acO
S
Android
iO
S
3) Web Push Protocol 개요
4. Web Push Notification
클라이언트
푸시 서비스
서버 서비스워커 User Agent
(웹브라우저)
푸시 알림 표시
(백그라운드)
4) 푸시 서비스 - FCM
4. Web Push Notification
푸시 메시지를 클라이언트(브라우저)로 전달하는 기능을 담당
Firebase 클라우드 메시징(FCM)
메시지를 안정적으로 무료 전송할 수 있는
크로스 플랫폼 메시징 솔루션
5) 알림 구독 과정
4. Web Push Notification
클라이언트
푸시 서비스
서버
3
.
구
독
정
보
를
응
답
P
u
s
h
S
u
b
s
c
r
i
p
t
i
o
n
공개키 암호화 방식 사용
(VAPID 인증 방식)
(브라우저)
4. 구독 정보 전달
POST API 요청
public
private
1. 공개키 전달 public
2
.
구
독
요
청
공
개
키
를
담
아
서
p
u
s
h
M
a
n
a
g
e
r
.
s
u
b
s
c
r
i
b
e
(
)
p
u
b
l
i
c
public
private
PushManager.subscribe() - "알림 구독하기"
4. Web Push Notification
index.js
PushSubscription
객
체 (구독정보)
4. Web Push Notification
endpoint: 푸시서비스에 구독된 특정 서비스워커 인스턴스에
푸시메세지를 전송하기 위해 사용되는 푸시서비스의 URL
6) 푸시 메시지 전송 과정
4. Web Push Notification
클라이언트
푸시 서비스
서버
(브라우저)
A
.
푸
시
메
시
지
전
송
메시지를 비공개 키로 암호화 후 전송
private
B
.
푸
시
메
시
지
전
송
public
공개키로 검증 후 메시지 전송
public
private
public
private
Push Event / showNotification() - "똑똑똑. 알림 왔어요"
4. Web Push Notification - Push API
registration.showNotification()
서비스워커가 알림 표시
백그라운드에
서
푸시서비스로부터
오는 푸시메시지 감지
notificationClick 이벤트
푸시 알림이 클릭되었을 때
clients.openWindow()
전달된 url의 새 윈도우 열기
•push 이벤트
serviceWorker.js
7) 백엔드용 라이브러리 소개
4. Web Push Notification
https://github.com/web-push-libs/web-push
https://github.com/web-push-libs/webpush-java
Java Node.js
Cache Storage API
5. 오프라인 실행 지원
•- 코드 기반 접근 방식으로서 개발자가 캐시 내용을 완벽하게 제어 가능
•- 서비스워커를 통해 제어할 수 있어 오프라인에
서
도 해당 캐시 사용 가능
•- 웹페이지 구성을 위한 기본적이며 정적인 구성 요소인 App Shell 캐싱
• 하는데 주로 사용 (html, css, js)
리소스 캐싱, 캐시 응답, 캐시 삭제
1) 리소스 캐싱하기
5. 오프라인 실행 지원 - Cache Storage
•caches.open()
• Cache.addAll()
•install 이벤트
• 서비스워커 등록되어
설치될 때
한번만 발생
• caches.open()
• - 첫 번째 인자로 문자
열
로 된 캐시 이름을 전달하여
해당되는 캐시를 열거나
존
재하지 않는 경우 새로운 캐시를 생성
• - Cache
객
체를 resolve하는 프로미스를 반환
• Cache.addAll()
• - 리소스 요청 문자
열
값으로 구성된 배열을 인자로 받아 모든 리소스를 캐시 스토리지에 캐싱
•
1) 리소스 캐싱하기
5. 오프라인 실행 지원 - Cache Storage
캐싱
결
과
2) 캐시에
서
응답하기
5. 오프라인 실행 지원 - Cache Storage
• event.respondWith()
• - 브라우저의 기본 요청을 막고 서비스 워커에
서
리소스를 대신 응답하는 메소드
• caches.match()
• - 인자로 전달된 URL 문자
열
이나 Request가 캐시된 Response의 key와 일치하는지 확인
• - 캐시에
서
리소스를 찾으면 Response에 대한 프로미스를 반환
•caches.match()
•fetch 이벤트
• event.respondWith()
• Cache First 전략
•
먼
저 캐시에
서
응답하고
• 없으면 네트워크 요청하여 응답
• 웹페이지에
서
네트워크
요청을 수행할 때 발생
serviceWorker.js
2) 캐시에
서
응답하기
5. 오프라인 실행 지원 - Cache Storage
3) 불필요한 캐시 삭제하기
5. 오프라인 실행 지원 - Cache Storage
•caches.keys()
•activate 이벤트
•caches.delete()
• 캐시 스토리지의 모든 캐시 목록 배열을
resolve하는 프로미스를 반환
• 메소드의 첫 인자로 캐시 이름을 전달하여
지정한 캐시를 제거
• 새로운 서비스 워커가 활성화될 때 발생
serviceWorker.js
Lighthouse / PWABuilder
PWA 감사(audit)
•캐싱을 편리하게 돕는 구글의 WorkBox Library
•동적 게시물 캐싱에 적합한 IndexedDB API
•백그라운드 동기화를 위한 sync 이벤트
•앱 아이콘의 배지 숫자 변경을 위한 Badging API
•다른 앱에 공유하기 위한 Share API
•멀티스레드 간 통신하기 위한 Broadcast Channel API
•위치정보를 얻기 위한 Geolocation API
•블루투스 연결을 위한 Web Bluetooth API
•모바일 연락처 접근을 위한 Contact Picker API
•사용자의 유휴 상태 감지를 위한 Idle Detection API
•다바이스의 파일을 읽고 쓰기 위한 File System Access API
•안드로이드앱 등으로 변환하여 스토어에 배포
웹 앱을 위한 점진적으로 향상되는 다양한 기술들
더 살펴보면 좋을 내용
Google - Learn PWA
(https://web.dev/learn/pwa/)
MDN - 프로그레시브 웹 앱
(https://developer.mozilla.org/ko/docs/Web/Progressive_web_apps)
[도서] SNS 앱 예제로 배우는 프로그레시브 웹 앱
iOS 16 preview feature
(https://www.apple.com/ios/ios-16/features/)
Firebase 클라우드 메시징
(https://firebase.google.com/docs/cloud-messaging?hl=ko)
MDN - 점진적 향상
(https://developer.mozilla.org/ko/docs/Glossary/Progressive_Enhancement)
Reference
감사합니다
•1. PWA 개요
•2. 설치 가능하게 만들기
•3. 서비스 워커
•4. Web Push Notification
•5. 오프라인 실행 지원

Weitere ähnliche Inhalte

Was ist angesagt?

Postman: An Introduction for Developers
Postman: An Introduction for DevelopersPostman: An Introduction for Developers
Postman: An Introduction for DevelopersPostman
 
Arquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaArquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaElias Nogueira
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)Heungsub Lee
 
모바일 SNG 비동기 네트워크 통신 사례
모바일 SNG 비동기 네트워크 통신 사례모바일 SNG 비동기 네트워크 통신 사례
모바일 SNG 비동기 네트워크 통신 사례성수 이
 
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf정민 안
 
[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리
[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리
[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리강 민우
 
Karate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testingKarate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testingRoman Liubun
 
Karate for Complex Web-Service API Testing by Peter Thomas
Karate for Complex Web-Service API Testing by Peter ThomasKarate for Complex Web-Service API Testing by Peter Thomas
Karate for Complex Web-Service API Testing by Peter Thomasintuit_india
 
20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POPChiwon Song
 
Postman Webinar: Postman 101
Postman Webinar: Postman 101Postman Webinar: Postman 101
Postman Webinar: Postman 101Nikita Sharma
 
Front end 웹사이트 성능 측정 및 개선
Front end 웹사이트 성능 측정 및 개선Front end 웹사이트 성능 측정 및 개선
Front end 웹사이트 성능 측정 및 개선기동 이
 
Hexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shellHexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shellThomas Pierrain
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐Terry Cho
 
BDD Approach with Karate Framework in Service Tests
BDD Approach with Karate Framework in Service TestsBDD Approach with Karate Framework in Service Tests
BDD Approach with Karate Framework in Service Testskloia
 
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론Terry Cho
 
카카오뱅크 모바일앱 개발 이야기
카카오뱅크 모바일앱 개발 이야기카카오뱅크 모바일앱 개발 이야기
카카오뱅크 모바일앱 개발 이야기if kakao
 
Uber mobility - Build & Release
Uber mobility - Build & ReleaseUber mobility - Build & Release
Uber mobility - Build & ReleaseDhaval Patel
 
Postman Introduction
Postman IntroductionPostman Introduction
Postman IntroductionRahul Agarwal
 
Getting started with karate dsl
Getting started with karate dslGetting started with karate dsl
Getting started with karate dslKnoldus Inc.
 

Was ist angesagt? (20)

Postman: An Introduction for Developers
Postman: An Introduction for DevelopersPostman: An Introduction for Developers
Postman: An Introduction for Developers
 
Arquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaArquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto Java
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
모바일 SNG 비동기 네트워크 통신 사례
모바일 SNG 비동기 네트워크 통신 사례모바일 SNG 비동기 네트워크 통신 사례
모바일 SNG 비동기 네트워크 통신 사례
 
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
 
Running AWS Locally
Running AWS LocallyRunning AWS Locally
Running AWS Locally
 
[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리
[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리
[IGC 2017] 블루홀 최준혁 - '플레이어언노운스 배틀그라운드' DEV 스토리
 
Karate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testingKarate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testing
 
Karate for Complex Web-Service API Testing by Peter Thomas
Karate for Complex Web-Service API Testing by Peter ThomasKarate for Complex Web-Service API Testing by Peter Thomas
Karate for Complex Web-Service API Testing by Peter Thomas
 
20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP
 
Postman Webinar: Postman 101
Postman Webinar: Postman 101Postman Webinar: Postman 101
Postman Webinar: Postman 101
 
Front end 웹사이트 성능 측정 및 개선
Front end 웹사이트 성능 측정 및 개선Front end 웹사이트 성능 측정 및 개선
Front end 웹사이트 성능 측정 및 개선
 
Hexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shellHexagonal architecture vs Functional core / Imperative shell
Hexagonal architecture vs Functional core / Imperative shell
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐
 
BDD Approach with Karate Framework in Service Tests
BDD Approach with Karate Framework in Service TestsBDD Approach with Karate Framework in Service Tests
BDD Approach with Karate Framework in Service Tests
 
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
 
카카오뱅크 모바일앱 개발 이야기
카카오뱅크 모바일앱 개발 이야기카카오뱅크 모바일앱 개발 이야기
카카오뱅크 모바일앱 개발 이야기
 
Uber mobility - Build & Release
Uber mobility - Build & ReleaseUber mobility - Build & Release
Uber mobility - Build & Release
 
Postman Introduction
Postman IntroductionPostman Introduction
Postman Introduction
 
Getting started with karate dsl
Getting started with karate dslGetting started with karate dsl
Getting started with karate dsl
 

Ähnlich wie Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)

[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석Tommy Lee
 
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현Hong Min Kim
 
Internship backend
Internship backendInternship backend
Internship backendYein Sim
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017Amazon Web Services Korea
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos uEngine Solutions
 
안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API
안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API 안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API
안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API Gosu Ok
 
Node.js
Node.jsNode.js
Node.jsymtech
 
효율적 모바일 서비스를 위한 AWS 빌딩블럭 - API Gateway 및 Device Farm을 중심으로 (윤석찬, AWS 테크에반젤리스트)
효율적 모바일 서비스를 위한 AWS 빌딩블럭 - API Gateway 및 Device Farm을 중심으로 (윤석찬, AWS 테크에반젤리스트)효율적 모바일 서비스를 위한 AWS 빌딩블럭 - API Gateway 및 Device Farm을 중심으로 (윤석찬, AWS 테크에반젤리스트)
효율적 모바일 서비스를 위한 AWS 빌딩블럭 - API Gateway 및 Device Farm을 중심으로 (윤석찬, AWS 테크에반젤리스트)Amazon Web Services Korea
 
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)Software in Life
 
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)Amazon Web Services Korea
 
Androidpn guide-0.5.0-ko
Androidpn guide-0.5.0-koAndroidpn guide-0.5.0-ko
Androidpn guide-0.5.0-kosandeepreddyp42
 
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략Kris Jeong
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.xTerry Cho
 
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!SangHoon Han
 
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현NAVER Engineering
 
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST APIWooyoung Ko
 
9월 웨비나 - AWS에서의 네트워크 보안 (이경수 솔루션즈 아키텍트)
9월 웨비나 - AWS에서의 네트워크 보안 (이경수 솔루션즈 아키텍트)9월 웨비나 - AWS에서의 네트워크 보안 (이경수 솔루션즈 아키텍트)
9월 웨비나 - AWS에서의 네트워크 보안 (이경수 솔루션즈 아키텍트)Amazon Web Services Korea
 
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning 클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning Ji-Woong Choi
 
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdf
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdfletswift22_우당탕탕 확장 프로그램(이다혜 light).pdf
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdfLee Dahae
 

Ähnlich wie Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석) (20)

[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
 
Internship backend
Internship backendInternship backend
Internship backend
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos
 
안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API
안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API 안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API
안드로이드 OAuth 1.0a, 2.0 구현 - Naver, Google API
 
Node.js
Node.jsNode.js
Node.js
 
효율적 모바일 서비스를 위한 AWS 빌딩블럭 - API Gateway 및 Device Farm을 중심으로 (윤석찬, AWS 테크에반젤리스트)
효율적 모바일 서비스를 위한 AWS 빌딩블럭 - API Gateway 및 Device Farm을 중심으로 (윤석찬, AWS 테크에반젤리스트)효율적 모바일 서비스를 위한 AWS 빌딩블럭 - API Gateway 및 Device Farm을 중심으로 (윤석찬, AWS 테크에반젤리스트)
효율적 모바일 서비스를 위한 AWS 빌딩블럭 - API Gateway 및 Device Farm을 중심으로 (윤석찬, AWS 테크에반젤리스트)
 
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)
 
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
 
Androidpn guide-0.5.0-ko
Androidpn guide-0.5.0-koAndroidpn guide-0.5.0-ko
Androidpn guide-0.5.0-ko
 
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
 
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
 
2015 oce garuda
2015 oce garuda2015 oce garuda
2015 oce garuda
 
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
 
9월 웨비나 - AWS에서의 네트워크 보안 (이경수 솔루션즈 아키텍트)
9월 웨비나 - AWS에서의 네트워크 보안 (이경수 솔루션즈 아키텍트)9월 웨비나 - AWS에서의 네트워크 보안 (이경수 솔루션즈 아키텍트)
9월 웨비나 - AWS에서의 네트워크 보안 (이경수 솔루션즈 아키텍트)
 
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning 클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
 
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdf
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdfletswift22_우당탕탕 확장 프로그램(이다혜 light).pdf
letswift22_우당탕탕 확장 프로그램(이다혜 light).pdf
 

Kürzlich hochgeladen

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Wonjun Hwang
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and AdoptionSeung-chan Baeg
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'Hyundai Motor Group
 

Kürzlich hochgeladen (7)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 

Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)

  • 1. 마르코(장원석), 우아한테크코스 4기, 2022. 10. 27. Progressive Web App 점진적으로 향상되는 웹 앱
  • 2. 목차 •1. PWA 개요 •2. 설치 가능하게 만들기 •3. 서비스 워커 •4. Web Push Notification •5. 오프라인 실행 지원
  • 3. • 프로그레시브 웹 앱(PWA)은 새롭게 떠오르는 웹 브라우저 API를 전통적인 점진적 향상(progressive enhancement) 기법과 함께 사용해서 네이티브 앱에 필적하는 사용자 경험을 제공하는 크로스 플랫폼 웹 애플리케이션을 말합니다. - MDN - 1. PWA 개요 1) PWA 정의 네이티브 앱에 서 만 구현할 수 있던 기능을 점진적으로 웹 기술로 구현 •점진적 향상(progressive enhancement)
  • 4. 모든 코드를 실행할 수 있는 최신 브라우저 사용자에게는 가능한 최고의 경험을 제공하면서 이전 브라우저를 포함한 가능한 많은 사용자들에게도 필수 기능과 콘텐츠를 제공하려는 디자인 철학 크로스 브라우징 지원 progressive enhancement 기능 탐지 및 폴리필 progressive enhancement란
  • 5. 크로스 브라우징 확인 progressive enhancement https://www.browserstack.com/ 브라우저 호환성 표 확인 https://caniuse.com/ CanIUse BrowserStack 기기별, 브라우저별 크로스 브라우징 원격 시뮬레이팅하는 테스트 도구 (1분씩 무료, 로컬 가능)
  • 7. 3) 활용 사례(Twitter Lite) 1. PWA 개요 mobile.twitter.com 구글플레이스토어 앱 설치 빠른 속도 데이터를 덜 사용 저장공간도 덜 차지 푸시 알림 오프라인 실행 지원 세션당 페이지 수 65% 증가 보 낸 트윗 75% 증가 이탈률 20% 감소 출처: https://web.dev/twitter/
  • 8. 3) 활용 사례(많은 앱들이 네이티브 앱 외에도 PWA를 추가 지원) 1. PWA 개요 https://appsco.pe https://www.pwastats.com PWA 예시 확인
  • 9. 1) Manifest 설정 2. 설치 가능하게 만들기 Web App Manifest는 브라우저에게 데스크톱이나 모바일 기기에 설치할 때 어떻게 작동해야 하는지 알려주는 JSON 형식의 파일 macOS iOS
  • 10. 1) Manifest 설정 2. 설치 가능하게 만들기 manifest.json 파일을 최상위 디렉터리에 만든다. index.html의 head 태그 내에 다음과 같은 링크 태그를 추가한다. <link rel="manifest" href="manifest.json" />
  • 11. 2) manifest.json의 구성요소 2. 설치 가능하게 만들기 background_color theme_color icons name short_name description orientation display display_override scope start_url categories screenshots prefer_related_applications related_applications protocol_handlers share_target shortcuts https://developer.mozilla.org/en-US/docs/Web/Manifest
  • 12. 2. 설치 가능하게 만들기 MDN https://developer.mozilla.org/ko/docs/Mozilla/Add-ons/WebExtensions/manifest.json Goolge Developers https://web.dev/add-manifest/
  • 13. 2. 설치 가능하게 만들기 3) 바로가기 추가 - Manifest(shortcuts) manifest.json
  • 14. 2. 설치 가능하게 만들기 4) 공유 대상 되기 - Manifest(share_target) 설치된 PWA가 시스템의 share dialog에 서 share target이 되도록 설정 manifest.json
  • 15. 2. 설치 가능하게 만들기 5) 커스텀 설치 버튼 만들기 기본 설치 버튼 InApp 커스텀 설치 버튼
  • 16. 2. 설치 가능하게 만들기 5) 커스텀 설치 버튼 만들기 any.js beforeInstallPrompt 이벤트 설치 prompt 표시 전 감지 설치 prompt 표시안되도록 지 연 하고 변수에 BeforeInstallPromptEvent를 저장 BeforeInstallPromptEvent.prompt() 설치 prompt 표시
  • 17. 6) 예외 - iOS에 서 설치 2. 설치 가능하게 만들기 iOS에 서 는 설치 prompt가 아직 지원되지 않음
  • 18. 1) 별도의 워커 스레드에 서 동작하는 특징 3. 서비스 워커 서비스워커 워커스레드 푸시서비스 캐시 백그라운드 오프라인 페이지가 닫혔더라도 또는 오프라인이어도 서비스워커는 계속 동작 웹페이지 메인스레드 User Agent (웹브라우저) 푸시 알림 표시 Fetch 응답
  • 19. 2) 서비스 워커 등록 3. 서비스 워커 navigator.serviceWorker.register() 서비스워커의 scriptURL을 전달하여 서비스 워커 등록 index.js
  • 20. 3) 생명주기 3. 서비스 워커 Installing Installed/ waiting Activating Activated Redundant register된 서비스워커는 위와 같은 생명주기를 거친다
  • 21. Activated 3) 생명주기 3. 서비스 워커 Installed/ waiting Activating Redundant Installing 서비스 워커의 업데이트가 발견되는 경우 설치 (업데이트 여부는 기존 서비스 워커 파일과의 바이트 단위 비교 결 과에 따름) Installing
  • 22. Activating Installing Activated 3) 생명주기 3. 서비스 워커 Redundant Installed/ waiting installed되도 기존 서비스워커가 제어하는 웹페이지가 켜져 있으면 waiting 상태가 유지됨 Installed / waiting
  • 23. Installing Activated 3) 생명주기 3. 서비스 워커 Redundant 대기중인 서비스워커 활성화하는 방 법 Activating Installed/ waiting 1. 기존 서비스워커가 제어하는 웹페이지 닫기 2. 개발자도구에 서 skipWaiting 직접 누르기 3. install 이벤트 내 self.skipWaiting() 호출
  • 24. Activated Installed/ waiting Installing 3) 생명주기 3. 서비스 워커 Redundant Activating 기존 웹페이지가 모두 닫혀서 Activating 단계가 되더라도, 페이지를 새로고침하기 전까지 클라이언트를 제어할 수가 없음 Activating
  • 25. Installed/ waiting Installing 3) 생명주기 3. 서비스 워커 Redundant 클라이언트 제어권 부여 방 법 1. 사용자가 페이지를 새로고침 2. activate 이벤트 내 self.clients.claim() 호출 Activating Activated
  • 26. 3) 생명주기 3. 서비스 워커 Installing Installed/ waiting Activating Redundant Activated Activated Acitvated되어 클라이언트를 제어하게 되면 fetch, sync, push 등의 기능 이벤트 제어 가능
  • 27. Activated 3) 생명주기 3. 서비스 워커 Installing Installed/ waiting Activating Redundant 새로운 서비스 워커로 대체되었을 때 곧 소 멸 될 서비스 워커의 상태 Redundant
  • 28. 4) 서비스 워커를 통해 처리할 수 있는 이벤트 3. 서비스 워커 푸시 알림 관 련 이벤트 push pushsubscriptionchange notificationclick notificationclose 서비스 워커 설치 관 련 이벤트 install activate 네트워크 요청 관 련 이벤트 fetch 백그라운드 동기화 관 련 이벤트 sync 클라이언트와 통신 관 련 이벤트 message
  • 29. 1) 백그라운드에 서 도 알림 수신 4. Web Push Notification 사용자의 재참여를 유도하는 데 유용한 built-in 자바스크립트만으로도 구현 가능 푸시 알림
  • 30. 2) Web Push의 브라우저 호환성 - 2022년 현재 4. Web Push Notification
  • 31. iOS의 웹 푸시 지원 계획 4. Web Push Notification 출처 : https://www.apple.com/ios/ios-16-preview/features/ 2023년 iOS 16 safari에 서 Web Push Notification 지원 예정
  • 32. 2) Web Push와 브라우저 호환성 - 2023년 예정 4. Web Push Notification Linux W indow s m acO S Android iO S
  • 33. 3) Web Push Protocol 개요 4. Web Push Notification 클라이언트 푸시 서비스 서버 서비스워커 User Agent (웹브라우저) 푸시 알림 표시 (백그라운드)
  • 34. 4) 푸시 서비스 - FCM 4. Web Push Notification 푸시 메시지를 클라이언트(브라우저)로 전달하는 기능을 담당 Firebase 클라우드 메시징(FCM) 메시지를 안정적으로 무료 전송할 수 있는 크로스 플랫폼 메시징 솔루션
  • 35. 5) 알림 구독 과정 4. Web Push Notification 클라이언트 푸시 서비스 서버 3 . 구 독 정 보 를 응 답 P u s h S u b s c r i p t i o n 공개키 암호화 방식 사용 (VAPID 인증 방식) (브라우저) 4. 구독 정보 전달 POST API 요청 public private 1. 공개키 전달 public 2 . 구 독 요 청 공 개 키 를 담 아 서 p u s h M a n a g e r . s u b s c r i b e ( ) p u b l i c public private
  • 36. PushManager.subscribe() - "알림 구독하기" 4. Web Push Notification index.js
  • 37. PushSubscription 객 체 (구독정보) 4. Web Push Notification endpoint: 푸시서비스에 구독된 특정 서비스워커 인스턴스에 푸시메세지를 전송하기 위해 사용되는 푸시서비스의 URL
  • 38. 6) 푸시 메시지 전송 과정 4. Web Push Notification 클라이언트 푸시 서비스 서버 (브라우저) A . 푸 시 메 시 지 전 송 메시지를 비공개 키로 암호화 후 전송 private B . 푸 시 메 시 지 전 송 public 공개키로 검증 후 메시지 전송 public private public private
  • 39. Push Event / showNotification() - "똑똑똑. 알림 왔어요" 4. Web Push Notification - Push API registration.showNotification() 서비스워커가 알림 표시 백그라운드에 서 푸시서비스로부터 오는 푸시메시지 감지 notificationClick 이벤트 푸시 알림이 클릭되었을 때 clients.openWindow() 전달된 url의 새 윈도우 열기 •push 이벤트 serviceWorker.js
  • 40. 7) 백엔드용 라이브러리 소개 4. Web Push Notification https://github.com/web-push-libs/web-push https://github.com/web-push-libs/webpush-java Java Node.js
  • 41. Cache Storage API 5. 오프라인 실행 지원 •- 코드 기반 접근 방식으로서 개발자가 캐시 내용을 완벽하게 제어 가능 •- 서비스워커를 통해 제어할 수 있어 오프라인에 서 도 해당 캐시 사용 가능 •- 웹페이지 구성을 위한 기본적이며 정적인 구성 요소인 App Shell 캐싱 • 하는데 주로 사용 (html, css, js) 리소스 캐싱, 캐시 응답, 캐시 삭제
  • 42. 1) 리소스 캐싱하기 5. 오프라인 실행 지원 - Cache Storage •caches.open() • Cache.addAll() •install 이벤트 • 서비스워커 등록되어 설치될 때 한번만 발생 • caches.open() • - 첫 번째 인자로 문자 열 로 된 캐시 이름을 전달하여 해당되는 캐시를 열거나 존 재하지 않는 경우 새로운 캐시를 생성 • - Cache 객 체를 resolve하는 프로미스를 반환 • Cache.addAll() • - 리소스 요청 문자 열 값으로 구성된 배열을 인자로 받아 모든 리소스를 캐시 스토리지에 캐싱 •
  • 43. 1) 리소스 캐싱하기 5. 오프라인 실행 지원 - Cache Storage 캐싱 결 과
  • 44. 2) 캐시에 서 응답하기 5. 오프라인 실행 지원 - Cache Storage • event.respondWith() • - 브라우저의 기본 요청을 막고 서비스 워커에 서 리소스를 대신 응답하는 메소드 • caches.match() • - 인자로 전달된 URL 문자 열 이나 Request가 캐시된 Response의 key와 일치하는지 확인 • - 캐시에 서 리소스를 찾으면 Response에 대한 프로미스를 반환 •caches.match() •fetch 이벤트 • event.respondWith() • Cache First 전략 • 먼 저 캐시에 서 응답하고 • 없으면 네트워크 요청하여 응답 • 웹페이지에 서 네트워크 요청을 수행할 때 발생 serviceWorker.js
  • 45. 2) 캐시에 서 응답하기 5. 오프라인 실행 지원 - Cache Storage
  • 46. 3) 불필요한 캐시 삭제하기 5. 오프라인 실행 지원 - Cache Storage •caches.keys() •activate 이벤트 •caches.delete() • 캐시 스토리지의 모든 캐시 목록 배열을 resolve하는 프로미스를 반환 • 메소드의 첫 인자로 캐시 이름을 전달하여 지정한 캐시를 제거 • 새로운 서비스 워커가 활성화될 때 발생 serviceWorker.js
  • 48. •캐싱을 편리하게 돕는 구글의 WorkBox Library •동적 게시물 캐싱에 적합한 IndexedDB API •백그라운드 동기화를 위한 sync 이벤트 •앱 아이콘의 배지 숫자 변경을 위한 Badging API •다른 앱에 공유하기 위한 Share API •멀티스레드 간 통신하기 위한 Broadcast Channel API •위치정보를 얻기 위한 Geolocation API •블루투스 연결을 위한 Web Bluetooth API •모바일 연락처 접근을 위한 Contact Picker API •사용자의 유휴 상태 감지를 위한 Idle Detection API •다바이스의 파일을 읽고 쓰기 위한 File System Access API •안드로이드앱 등으로 변환하여 스토어에 배포 웹 앱을 위한 점진적으로 향상되는 다양한 기술들 더 살펴보면 좋을 내용
  • 49. Google - Learn PWA (https://web.dev/learn/pwa/) MDN - 프로그레시브 웹 앱 (https://developer.mozilla.org/ko/docs/Web/Progressive_web_apps) [도서] SNS 앱 예제로 배우는 프로그레시브 웹 앱 iOS 16 preview feature (https://www.apple.com/ios/ios-16/features/) Firebase 클라우드 메시징 (https://firebase.google.com/docs/cloud-messaging?hl=ko) MDN - 점진적 향상 (https://developer.mozilla.org/ko/docs/Glossary/Progressive_Enhancement) Reference
  • 50. 감사합니다 •1. PWA 개요 •2. 설치 가능하게 만들기 •3. 서비스 워커 •4. Web Push Notification •5. 오프라인 실행 지원