0Pricing
Vue Academy · 강의

Vue PWA의 푸시 알림

Push API, Notification API, VAPID 키, 사용자 구독과 서버에서 알림을 보내는 방법을 다룹니다.

Vue PWA의 푸시 알림은(는) CoddyKit의 무료 Vue Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Vue Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

PWA의 푸시 알림

웹 푸시를 사용하면 앱이 닫혀 있어도 서버에서 사용자에게 알림을 보낼 수 있습니다. 웹 푸시는 알림 API, 푸시 API, 서비스 워커를 결합하며, 이 모든 기능은 사용자의 명시적인 권한을 기반으로 합니다.

권한 요청하기

구독하기 전에 반드시 권한을 요청해야 합니다. Notification.requestPermission()은 "허용됨", "거부됨" 또는 "기본값"으로 결정되는 프라미스를 반환합니다.

const permission = await Notification.requestPermission();
if (permission === "granted") {
  // proceed to subscribe
}

사용자 동작으로 실행하기

브라우저는 권한 요청 창이 버튼 클릭과 같은 사용자 동작 직후에 표시되도록 요구합니다. 페이지가 로드될 때 권한을 요청하지 마십시오. 요청이 무시되거나 사용자를 불편하게 만들 수 있습니다.

<button @click="enableNotifications">
  Enable notifications
</button>

서비스 워커 등록 가져오기

푸시 구독은 활성 서비스 워커 등록에 저장됩니다. navigator.serviceWorker.ready를 기다려 등록을 가져오십시오.

const registration = await navigator.serviceWorker.ready;

applicationServerKey

푸시는 VAPID 키를 사용합니다. 서버는 개인 키를 보관하고, 클라이언트는 공개 키를 Uint8Array로 변환하여 구독합니다.

function urlBase64ToUint8Array(base64) {
  const padding = "=".repeat((4 - base64.length % 4) % 4);
  const raw = atob((base64 + padding).replace(/-/g, "+").replace(/_/g, "/"));
  return Uint8Array.from([...raw].map((c) => c.charCodeAt(0)));
}

pushManager.subscribe

등록 객체의 pushManager를 통해 구독하십시오. userVisibleOnly: true로 설정하고 변환한 applicationServerKey를 전달해야 합니다.

const subscription = await registration.pushManager.subscribe({
  userVisibleOnly: true,
  applicationServerKey: urlBase64ToUint8Array(VAPID_PUBLIC_KEY)
});

userVisibleOnly가 필요한 이유

userVisibleOnly: true는 모든 푸시가 사용자에게 보이는 알림으로 표시되도록 보장합니다. 브라우저는 조용한 백그라운드 추적을 막기 위해 이 설정을 요구합니다.

서버로 구독 보내기

구독 객체에는 서버가 필요한 엔드포인트와 키가 들어 있습니다. 나중에 전송할 수 있도록 이를 백엔드에 POST하여 저장하십시오.

await fetch("/api/subscribe", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(subscription)
});

서버에서 푸시 보내기

백엔드는 웹 푸시 라이브러리와 VAPID 개인 키를 사용하여 저장된 엔드포인트로 페이로드를 푸시합니다.

// Node backend (web-push library)
webpush.sendNotification(
  subscription,
  JSON.stringify({ title: "Hello", body: "New message" })
);

서비스 워커에서 푸시 받기

서비스 워커는 push 이벤트를 처리하고 showNotification을 호출하여 알림을 표시합니다.

// service worker
self.addEventListener("push", (event) => {
  const data = event.data.json();
  event.waitUntil(
    self.registration.showNotification(data.title, {
      body: data.body,
      icon: "/pwa-192.png"
    })
  );
});

알림 클릭 처리

notificationclick 이벤트로 클릭에 응답하여 올바른 페이지에서 앱에 초점을 맞추거나 앱을 여십시오.

self.addEventListener("notificationclick", (event) => {
  event.notification.close();
  event.waitUntil(clients.openWindow("/inbox"));
});

빠른 확인

푸시를 구독할 때 userVisibleOnly: true가 필요한 이유는 무엇입니까?

요약

웹 푸시는 사용자 동작으로 실행한 Notification.requestPermission()에서 시작한 다음, userVisibleOnly: true와 applicationServerKey를 사용하여 registration.pushManager.subscribe를 호출합니다. 구독을 서버로 보내면 서버는 페이로드를 푸시하고, 서비스 워커는 push 이벤트에서 이를 받아 showNotification으로 표시합니다.

자주 묻는 질문

“Vue PWA의 푸시 알림” 강의는 무료인가요?

네 — “Vue PWA의 푸시 알림” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Vue Academy 강의 전체를 잠금 해제할 수 있습니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Vue PWA의 푸시 알림”에서 뭘 배우나요?

Push API, Notification API, VAPID 키, 사용자 구독과 서버에서 알림을 보내는 방법을 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Vue Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Vue Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Vue Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“Vue PWA의 푸시 알림” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Vue Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Vue Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. vite-plugin-pwa 설정
  2. Service Worker 전략
  3. 오프라인 지원과 백그라운드 동기화
  4. Vue PWA의 푸시 알림
← Vue Academy(으)로 돌아가기