푸시 알림은 웹 브라우저나 모바일 앱을 통해 사용자에게 중요한 메시지나 알림을 전달하는 기능입니다. 이번 포스트에서는 자바스크립트를 사용하여 푸시 알림을 구현하는 방법에 대해 알아보겠습니다.
웹 푸시 알림
웹 푸시 알림은 사용자가 웹 페이지를 닫거나 최소화한 상태에서도 알림을 받을 수 있는 기능입니다. 이를 구현하기 위해서는 다음과 같은 단계를 따릅니다.
- Service Worker 등록: 웹 앱에 Service Worker를 등록하여 푸시 알림을 처리할 수 있는 환경을 구성합니다.
- Push API 사용: Push API를 사용하여 푸시 알림 요청을 보내고, 사용자의 허가를 받습니다.
- 푸시 알림 수신: 사용자로부터 허가를 받으면, 푸시 알림을 수신하고 사용자에게 알림을 보여줍니다.
아래는 웹 푸시 알림을 구현하는 예제 코드입니다.
// Service Worker 등록
navigator.serviceWorker.register('service-worker.js')
.then(function(registration) {
console.log('Service Worker 등록 성공');
})
.catch(function(error) {
console.log('Service Worker 등록 실패', error);
});
// Push API 사용
navigator.serviceWorker.ready
.then(function(registration) {
return registration.pushManager.getSubscription()
.then(function(subscription) {
if (subscription) {
return subscription;
} else {
return registration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: 'YOUR_PUBLIC_KEY'
});
}
});
})
.then(function(subscription) {
console.log('푸시 알림 구독 성공');
console.log(subscription.toJSON());
})
.catch(function(error) {
console.log('푸시 알림 구독 실패', error);
});
위 예제 코드에서 YOUR_PUBLIC_KEY
는 푸시 알림을 보낼 서버의 공개키로 바꿔야 합니다. 또한, Service Worker 파일 service-worker.js
도 별도로 작성해야 합니다.
데이터베이스 연동 방법
푸시 알림을 통해 보낸 정보를 저장하고 관리하기 위해서는 데이터베이스와 연동해야 합니다. 웹 앱의 경우에는 주로 클라이언트 사이드 데이터베이스인 IndexedDB를 사용하거나, 서버 사이드 데이터베이스에 데이터를 저장하는 방식을 사용합니다.
IndexedDB를 사용하는 예제 코드를 살펴보겠습니다.
const DB_NAME = 'push_notifications';
const DB_VERSION = 1;
const DB_STORE_NAME = 'notifications';
// 데이터베이스 연결
let request = indexedDB.open(DB_NAME, DB_VERSION);
let db;
request.onerror = function(event) {
console.log('데이터베이스 연결 실패', event.target.error);
};
request.onsuccess = function(event) {
console.log('데이터베이스 연결 성공');
db = event.target.result;
};
request.onupgradeneeded = function(event) {
console.log('데이터베이스 업그레이드');
db = event.target.result;
let objectStore;
if (!db.objectStoreNames.contains(DB_STORE_NAME)) {
objectStore = db.createObjectStore(DB_STORE_NAME, { keyPath: 'id', autoIncrement: true });
objectStore.createIndex('title', 'title', { unique: false });
objectStore.createIndex('message', 'message', { unique: false });
}
};
// 데이터 추가
function addNotification(notification) {
let transaction = db.transaction([DB_STORE_NAME], 'readwrite');
let store = transaction.objectStore(DB_STORE_NAME);
let request = store.add(notification);
request.onsuccess = function(event) {
console.log('데이터 추가 성공');
};
request.onerror = function(event) {
console.log('데이터 추가 실패', event.target.error);
};
}
위 예제 코드에서 IndexedDB를 사용하여 push_notifications
라는 이름의 데이터베이스에 notifications
라는 이름의 오브젝트 스토어를 생성합니다. 그리고 addNotification
함수를 통해 데이터를 추가할 수 있습니다.
이 외에도 서버 사이드 데이터베이스를 사용하여 푸시 알림과 데이터베이스를 연동할 수 있습니다. 이 경우에는 서버에서 푸시 알림 요청을 받아 처리하고, 필요한 데이터를 데이터베이스에 저장하면 됩니다.
자바스크립트를 이용한 푸시 알림과 데이터베이스 연동 방법에 대해 알아보았습니다. 이를 통해 사용자에게 중요한 정보를 신속하게 전달하고 관리할 수 있습니다.
참고 자료
-
[Using the Push API - Web APIs MDN](https://developer.mozilla.org/en-US/docs/Web/API/Push_API) -
[IndexedDB API - Web APIs MDN](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API)