
FCM 구현 중, 서비스 워커가 동적으로 환경 변수 값을 읽지 못하는 현상이 발생,
도대체 서비스 워커가 정확히 무슨 이유로 필요하고, 어떤 일을 하길래 필요한거지?
이런 근본적인 의문이 들어 조사하게 되었고, 왜 서비스 워커가 동적으로 값을 읽지 못하는지 이해하게 되었다.
서비스 워커(Service Worker)는 브라우저에서 동작하는 백그라운드 스크립트로, 웹 애플리케이션이 사용자와 상호작용하지 않는 상태에서도 특정 작업(푸시 알림, 네트워크 요청 캐싱 등)을 수행할 수 있도록 설계되었습니다.
Firebase Cloud Messaging(FCM)과 같은 푸시 알림을 구현할 때, 서비스 워커는 브라우저가 실행 중이든 백그라운드에 있든 상관없이 알림을 처리하는 역할을 합니다. 브라우저의 제한으로 인해, 일반적인 JavaScript 코드로는 이 기능을 구현할 수 없습니다.
FCM은 클라이언트(브라우저)가 메시지를 받을 준비가 되어 있어야 알림을 보낼 수 있습니다. 서비스 워커는 브라우저가 열려 있지 않더라도 Firebase 서버와 통신하여 푸시 메시지 수신을 가능하게 합니다.
firebase-messaging-sw.js 파일이 하는 일서비스 워커는 푸시 메시지를 받을 준비를 하도록 Firebase의 메소드를 초기화합니다. 아래는 그 역할을 설명합니다:
javascript
코드 복사
// firebase-messaging-sw.js
// Firebase 초기화
importScripts('https://www.gstatic.com/firebasejs/9.0.0/firebase-app-compat.js');
importScripts('https://www.gstatic.com/firebasejs/9.0.0/firebase-messaging-compat.js');
firebase.initializeApp({
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_AUTH_DOMAIN",
projectId: "YOUR_PROJECT_ID",
storageBucket: "YOUR_STORAGE_BUCKET",
messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
appId: "YOUR_APP_ID",
});
// 메시징 초기화
const messaging = firebase.messaging();
// 백그라운드 메시지 처리
messaging.onBackgroundMessage((payload) => {
console.log('백그라운드 메시지:', payload);
self.registration.showNotification(payload.notification.title, {
body: payload.notification.body,
icon: payload.notification.icon,
});
});
위 코드가 없다면 FCM이 푸시 메시지를 전송하더라도 브라우저는 이를 처리할 수 없습니다.
/firebase-messaging-sw.js)를 등록합니다.firebase/messaging)가 처리합니다.서비스 워커는 우체국 사서함처럼 동작합니다.