자바스크립트를 이용한 푸시 알림과 데이터베이스 연동 방법

푸시 알림은 웹 브라우저나 모바일 앱을 통해 사용자에게 중요한 메시지나 알림을 전달하는 기능입니다. 이번 포스트에서는 자바스크립트를 사용하여 푸시 알림을 구현하는 방법에 대해 알아보겠습니다.

웹 푸시 알림

웹 푸시 알림은 사용자가 웹 페이지를 닫거나 최소화한 상태에서도 알림을 받을 수 있는 기능입니다. 이를 구현하기 위해서는 다음과 같은 단계를 따릅니다.

  1. Service Worker 등록: 웹 앱에 Service Worker를 등록하여 푸시 알림을 처리할 수 있는 환경을 구성합니다.
  2. Push API 사용: Push API를 사용하여 푸시 알림 요청을 보내고, 사용자의 허가를 받습니다.
  3. 푸시 알림 수신: 사용자로부터 허가를 받으면, 푸시 알림을 수신하고 사용자에게 알림을 보여줍니다.

아래는 웹 푸시 알림을 구현하는 예제 코드입니다.

// 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 함수를 통해 데이터를 추가할 수 있습니다.

이 외에도 서버 사이드 데이터베이스를 사용하여 푸시 알림과 데이터베이스를 연동할 수 있습니다. 이 경우에는 서버에서 푸시 알림 요청을 받아 처리하고, 필요한 데이터를 데이터베이스에 저장하면 됩니다.

자바스크립트를 이용한 푸시 알림과 데이터베이스 연동 방법에 대해 알아보았습니다. 이를 통해 사용자에게 중요한 정보를 신속하게 전달하고 관리할 수 있습니다.

참고 자료