browser · medium priority
Advanced Web APIs
Notification, Geolocation, Payment Request, Permissions API
intermediate 난이도4시간토스당근배민카카오
시작 전
이해도
매우 낮음
학습 개요
쉬운 설명
복잡한 개념을 실생활 비유로 설명합니다.
“스마트폰 앱이 "위치/알림/카메라 접근 허용하시겠습니까?"라고 묻는 것과 동일하다. 웹도 이제 같은 수준의 기능을 사용할 수 있다.”
브라우저 내장 API들은 OS 수준의 기능을 안전하게 웹에서 사용하게 해준다. 사용자 동의(권한)를 항상 먼저 받아야 하고, HTTPS에서만 동작한다.
핵심 개념
웹 푸시 알림 구현 흐름
1
권한 요청
Notification.requestPermission()으로 알림 권한 요청
2
Service Worker 등록
Push 이벤트를 수신하려면 Service Worker가 필요
3
Push 구독
PushManager.subscribe()로 구독, endpoint를 서버에 저장
4
서버에서 Push 전송
web-push 라이브러리로 VAPID 인증 후 알림 전송
Web Push 구독 — 클라이언트typescript
1async function subscribePushNotification() {2 const permission = await Notification.requestPermission();3 if (permission !== 'granted') return;45 const registration = await navigator.serviceWorker.ready;6 const subscription = await registration.pushManager.subscribe({7 userVisibleOnly: true,8 applicationServerKey: urlBase64ToUint8Array(process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY!),9 });1011 // 서버에 구독 정보 저장12 await fetch('/api/push/subscribe', {13 method: 'POST',14 headers: { 'Content-Type': 'application/json' },15 body: JSON.stringify(subscription),16 });17}
실무 적용
어떤 상황에서 사용하는가
배민 같은 배달 앱에서 현재 위치로 주소 자동 입력 + 주문 완료 후 알림을 구현할 때
어떻게 적용하는가
1) Permissions API로 현재 권한 상태 확인, 2) 주소 입력 버튼 클릭 시 Geolocation으로 위치 가져오기, 3) 주문 완료 후 Service Worker + Push API로 배달 상태 알림 구독
흔한 실수와 안티패턴
- 페이지 로드 즉시 위치/알림 권한 요청 (사용자 거부율 90% 이상)
- HTTPS 미적용으로 API 동작 안 함
- watchPosition 사용 후 clearWatch 안 해서 메모리 누수
- Push 구독 정보를 서버에 저장 안 해서 알림 못 받는 문제
면접 질문
중급배민당근토스
답변 방향 힌트
Service Worker, Push API, VAPID 키의 역할
반드시 언급할 키워드
- 권한 요청
- Service Worker 등록
- PushManager.subscribe()
- VAPID 인증
- 서버에서 web-push 전송
예상 꼬리 질문
- Service Worker의 라이프사이클은?
- VAPID가 무엇인가요?