웹 푸시 알림 전달 과정에는 애플리케이션 서버(Rails 앱), 사용자, 그리고 푸시 서버라는 세 가지 주요 주체가 관여합니다. Rails 애플리케이션은 구독된 사용자에게 알림을 보내기 위해 푸시 서버에 HTTP 요청을 보내고, 이 푸시 서버가 실제 알림을 사용자에게 전달하는 역할을 수행합니다. 개발자는 사용자가 웹 푸시에 구독할 수 있는 사용자 경험을 제공하고, 프론트엔드에서 구독 데이터를 Rails 백엔드로 전송하며, web-push
Ruby 젬을 사용하여 푸시 서버에 요청을 보내야 합니다. 또한, 서비스 워커에서 ‘push’ 이벤트를 수신하여 사용자에게 알림을 표시하는 로직을 구현해야 합니다.
보안 측면에서는 VAPID(Voluntary Application server Identification) 프로토콜이 사용되며, web-push
젬이 이 프로토콜의 복잡한 세부 사항을 추상화하여 개발자가 VAPID 키 쌍을 생성하고 안전하게 저장하도록 돕습니다. 웹 푸시 메시지 전달을 위한 필수 조건으로는 Progressive Web App(PWA)의 manifest.json
파일 연결, 사용자 웹 브라우저에 서비스 워커 설치 및 활성화, VAPID 키 생성, 사용자 알림 권한 허용, 푸시 알림 구독, 그리고 Rails에서 web-push
젬을 사용한 알림 트리거 및 서비스 워커의 ‘push’ 이벤트 리스너 설정이 있습니다.
Rails 7.2부터는 PWA 매니페스트 JSON 및 서비스 워커 JavaScript 파일에 대한 기본값이 제공되어 설정이 더욱 용이해졌습니다. VAPID 공개 키는 클라이언트에 제공되어 pushManager.subscribe()
를 통해 푸시 알림을 구독하는 데 사용되며, 이 구독 정보(엔드포인트, p256dh, auth 키)는 Rails 백엔드에 저장되어 관리됩니다. Rails 앱에서 알림을 트리거하기 위해 WebPushJob
과 같은 ActiveJob을 사용하여 WebPush.payload_send
메서드를 호출합니다. 이 메서드는 메시지 페이로드, 엔드포인트, VAPID 키 등을 필요로 합니다. 최종적으로, 서비스 워커는 백그라운드에서 실행되며 ‘push’ 이벤트를 수신하여 self.registration.showNotification
을 통해 사용자에게 알림을 표시함으로써 전체 웹 푸시 흐름이 완성됩니다.