OneSignalSDKWorker.js 파일을 설정하고 구성하여 웹사이트가 OneSignal을 통해 웹 푸시 알림을 수신하고 표시할 수 있도록 합니다.
OneSignal service worker(OneSignalSDKWorker.js)는 웹 푸시 알림에 필요한 서버에 호스팅된 JavaScript 파일입니다. 사용자가 페이지를 벗어난 경우에도 사이트가 알림을 수신하고 표시할 수 있게 해줍니다.
OneSignal service worker가 푸시 알림을 처리하는 방식
WordPress 플러그인을 사용하는 경우 이 가이드를 건너뛰세요. 플러그인은 sdk_files 디렉토리에 OneSignalSDKWorker.js를 호스팅하고 경로를 자동으로 구성합니다. 파일을 사이트 루트에 업로드하거나 대시보드 또는 코드에서 사용자 지정 경로를 설정하지 마세요. WordPress 설정을 참조하세요. Shopify도 워커를 자동으로 배포합니다. Shopify 설정을 참조하세요.
필요한 경우 파일 이름을 변경할 수 있습니다(예: onesignalsdkworker.js, ossw.js). 변경하는 경우 이 가이드의 OneSignalSDKWorker.js를 해당 파일 이름으로 교체하세요.
2
웹 서버에 업로드
OneSignalSDKWorker.js를 서버에 배치하여 HTTPS를 통해 공개적으로 접근할 수 있게 합니다. 파일 접근에 인증이나 로그인이 필요하지 않아야 합니다.권장: 페이지를 제공하지 않는 전용 하위 디렉토리(예: /push/onesignal/)에 파일을 호스팅하세요. 이렇게 하면 사이트의 다른 service worker(예: PWA 또는 AMP service worker)와의 충돌을 방지하고 URL 경로를 안정적으로 유지할 수 있습니다.
대안: OneSignal Web SDK는 기본적으로 사이트 루트(https://yoursite.com/OneSignalSDKWorker.js)에서 파일을 찾습니다. 루트 디렉토리에 파일을 업로드할 수 있지만, 루트 범위가 필요한 다른 service worker와 충돌할 수 있습니다. PWA를 사용하는 경우 OneSignalSDKWorker.js를 하위 디렉토리에 배치하세요.
영구적인 URL 경로를 선택하세요. 브라우저가 특정 URL에 service worker를 등록하면 해당 URL 변경 시 마이그레이션이 필요합니다.
3
파일 접근 가능 여부 확인
브라우저에서 파일 URL로 이동하세요(예: https://yoursite.com/push/onesignal/OneSignalSDKWorker.js). 1단계의 importScripts 줄이 표시되어야 합니다:
브라우저에서 예상되는 service worker 파일 내용
404 오류, 빈 페이지 또는 로그인 프롬프트가 표시되면 파일이 올바르게 업로드되지 않았거나 인증 뒤에 있는 것입니다.
4
SDK에 파일 위치 알려주기
Web SDK는 다른 위치를 알려주지 않는 한 사이트 루트(https://yoursite.com/OneSignalSDKWorker.js)에서 OneSignalSDKWorker.js를 찾습니다. 알려주는 방법은 통합 유형에 따라 다릅니다.파일을 사이트 루트에 배치한 경우 추가 구성이 필요하지 않습니다. 다음 단계로 건너뛰세요.파일을 하위 디렉토리에 배치한 경우 경로를 설정해야 합니다. 일반 사이트는 대시보드에서 설정합니다. 사용자 지정 코드는 OneSignal.init()에서 설정합니다. 둘을 혼합하면 작동하지 않습니다: 대시보드 경로 필드는 사용자 지정 코드에 적용되지 않고, serviceWorkerPath는 일반 사이트에 적용되지 않습니다.
사이트의 각 service worker 파일은 범위—어떤 페이지를 제어할지를 결정하는 URL 경로—에 등록됩니다. 주어진 범위에서 하나의 service worker만 활성화될 수 있습니다. 이미 service worker(예: PWA 또는 캐싱 워커)가 있고 OneSignal이 동일한 파일을 공유하게 하려면 결합할 수 있습니다.
별도의 범위를 가진 별도의 파일에 service worker를 유지하는 것이 유지 관리가 더 쉽고 충돌을 방지합니다. 설정에 단일 service worker 파일이 필요한 경우에만 결합하세요.
결합하려면 OneSignal importScripts 줄을 기존 service worker 파일에 추가하세요:
이 섹션은 service worker 파일 경로, 파일 이름 또는 범위를 변경해야 하는 기존 OneSignal 고객을 위한 것입니다. 현재 구성을 변경할 특별한 이유가 없다면 이 단계를 따르지 마세요.
service worker를 마이그레이션하는 시기와 방법
마이그레이션 이유:
루트 범위 OneSignal service worker가 프로그레시브 웹 앱(PWA)과 충돌
Service worker가 AMP 또는 다른 캐싱 service worker와 충돌
보안 정책이 루트 범위에서 타사 service worker 코드를 금지
옵션 1: 범위만 변경 (권장)범위만 변경하는 것이 가장 안전한 마이그레이션입니다. 파일이 현재 URL에 유지되므로 기존 구독자는 중단 없이 알림을 계속 받습니다.파일에 OneSignal 코드만 포함된 경우OneSignalSDKWorker.js에 다음만 포함되어 있는지 확인하세요:
SDK에 파일 위치 알려주기에 설명된 대로 대시보드(일반 사이트) 또는 serviceWorkerParam(사용자 지정 코드)을 사용하여 범위를 업데이트하세요. 다른 변경은 필요하지 않습니다.
OneSignalSDKWorker.js가 현재 도메인 루트에 호스팅되어 있지 않다면, 최소 1년 동안 Service-Worker-Allowed 헤더와 함께 현재 URL에서 계속 호스팅해야 합니다. 파일이 실수로 제거되지 않도록 백엔드 코드나 내부 문서에 주석을 추가하세요.
파일에 OneSignal + 다른 코드가 포함된 경우Service worker에 추가적인 importScripts 호출이 포함되어 있을 수 있습니다(예: 여러 service worker 결합 가이드를 따른 경우). 현재 설정이 여전히 작동한다면 그대로 유지하세요—병합된 service worker 분리는 2단계 롤아웃이 필요합니다.분리해야 하는 경우:
1
기존 파일에 보존 주석 추가
현재 service worker의 OneSignal importScripts 줄 위에 추가하세요:
// KEEP until YYYY-MM-DD: Required for push delivery to subscribers who have not revisited.importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
날짜를 최소 1년 후로 설정하세요.
2
새로운 전용 OneSignal service worker 생성
하위 디렉토리(예: /push/onesignal/)에 다음만 포함하는 OneSignalSDKWorker.js를 생성하세요:
SDK에 파일 위치 알려주기에 설명된 대로 대시보드(일반 사이트) 또는 OneSignal.init()(사용자 지정 코드)을 사용하여 새 경로와 범위를 설정하세요.
4
구독자 마이그레이션 대기
신규 방문자와 재방문자는 자동으로 새 service worker에 등록됩니다. 기존 구독자 대부분이 사이트를 재방문할 때까지 최소 1년을 기다리세요.
5
정리
선택한 보존 기간보다 오래된 비활성 사용자를 삭제하고, 원래 service worker 파일에서 OneSignal importScripts 줄을 제거하세요.
옵션 2: 파일 이름 또는 파일 위치 변경파일 이름이나 디렉토리 변경은 더 복잡합니다. 브라우저가 원래 등록된 URL에서 service worker를 가져오기 때문입니다. 사이트를 재방문하지 않은 구독자는 여전히 이전 URL을 참조합니다.
최소 1년 동안 원래 파일을 이전 URL에서 계속 호스팅해야 합니다. 제거하면 브라우저가 service worker를 업데이트하려 할 때 404 오류가 발생하고, 영향받는 구독자는 알림을 받지 못합니다.
파일에 OneSignal 코드만 포함된 경우
1
이전 파일에 보존 주석 추가
// KEEP until YYYY-MM-DD: Required for push delivery to subscribers still on the old service worker URL.importScripts("https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js");
2
새 위치에 새 파일 생성
새 디렉토리에 OneSignalSDKWorker.js(또는 선택한 파일 이름)를 배치하고 다음을 작성하세요:
Web SDK는 사용자 지정 경로를 설정하지 않는 한 사이트 루트에서 OneSignalSDKWorker.js를 찾습니다. 일반 사이트는 대시보드의 Customize service worker paths and filenames에서 해당 경로를 설정합니다. 사용자 지정 코드는 OneSignal.init()의 serviceWorkerPath 및 serviceWorkerParam으로 코드에서 설정합니다. 대시보드 경로 필드는 사용자 지정 코드에 적용되지 않습니다. SDK에 파일 위치 알려주기를 참조하세요.
파일이 SDK가 예상하는 URL에 없습니다. 브라우저에서 전체 파일 URL로 이동하여 접근 가능한지 확인하세요. 파일을 하위 디렉토리에 배치한 경우 구성된 경로가 디렉토리와 파일 이름을 포함하여 실제 파일 위치와 일치해야 합니다. 일반 사이트: 대시보드 경로 설정을 확인하세요. 사용자 지정 코드: OneSignal.init()의 serviceWorkerPath를 확인하세요.
기존 구독자는 여전히 이전 service worker URL을 참조합니다. 브라우저는 푸시가 도착할 때마다 등록된 URL을 가져옵니다(최대 24시간 캐시). 이전 URL이 404를 반환하면 해당 구독자는 알림을 받지 못합니다. 구독자가 사이트를 재방문하여 자연스럽게 마이그레이션할 때까지 최소 1년 동안 이전 파일 호스팅을 계속하세요. 마이그레이션 가이드 및 웹 푸시 알림이 표시되지 않음 가이드를 참조하세요.
둘 다 루트 범위(/)에 등록되어 있을 가능성이 높으며, 특정 범위에는 하나의 service worker만 활성화될 수 있습니다. OneSignal service worker를 하위 디렉토리 범위(예: /push/onesignal/)로 이동하여 PWA가 루트 범위를 유지하도록 하거나, 여러 service worker 결합에 설명된 대로 service worker를 결합하세요.
예. 서버에 특정 명명 규칙(예: 모두 소문자)이 필요한 경우 onesignalsdkworker.js와 같은 이름으로 파일을 변경하세요. 일반 사이트: 대시보드의 Service worker filename 필드를 업데이트하세요. 사용자 지정 코드: OneSignal.init() 호출의 serviceWorkerPath를 업데이트하세요. SDK에 파일 위치 알려주기를 참조하세요.
서버는 Content-Type: application/javascript; charset=utf-8을 반환해야 합니다. 일부 서버 또는 CDN 구성은 잘못된 MIME 유형을 반환할 수 있으며, 이로 인해 브라우저가 service worker 등록을 거부합니다.
이 페이지가 도움이 되었나요?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OneSignal Documentation","description":"OneSignal is a platform for sending push notifications, emails, in-app messages, and SMS campaigns via a single API, Journey Builder, and a dashboard.","colors":{"primary":"#3A3DB3","light":"#E54B4D","dark":"#3A3DB3"},"logo":{"light":"https://mintcdn.com/onesignal/yJcueeDCO7UpHnnY/logo/OneSignal-Logo.svg?fit=max\u0026auto=format\u0026n=yJcueeDCO7UpHnnY\u0026q=85\u0026s=1fcfb6fef6d820fd9d99c74850711107","dark":"https://mintcdn.com/onesignal/s4WC_KzLxf8ornqq/logo/OneSignal-Logo-White.svg?fit=max\u0026auto=format\u0026n=s4WC_KzLxf8ornqq\u0026q=85\u0026s=2573a53b5aea961e18c82b3af8f31925"},"favicon":"https://mintcdn.com/onesignal/SGduBFHpiRdg5l6h/favicon.ico?fit=max\u0026auto=format\u0026n=SGduBFHpiRdg5l6h\u0026q=85\u0026s=c0a99fadc0553c658a83741c5611cef4","api":{"examples":{"languages":["curl","typescript","python","php","go","ruby","java","csharp","rust"],"autogenerate":true}},"navbar":{"links":[{"href":"mailto:support@onesignal.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.onesignal.com"}},"footer":{"socials":{"github":"https://github.com/OneSignal","linkedin":"https://linkedin.com/company/onesignal","youtube":"https://www.youtube.com/@onesignalofficial/playlists"}},"seo":{"metatags":{"apple-mobile-web-app-title":"OneSignal Docs"}},"fonts":{"family":"Nunito Sans"},"styling":{"eyebrows":"breadcrumbs","latex":true},"integrations":{"ga4":{"measurementId":"G-2DGWL0VYP5"},"posthog":{"apiKey":"phc_vZpvE0f5eyzcOt30FHer34yddVmNdo9kmlMVRBzLMtn","apiHost":"https://eu.i.posthog.com","sessionRecording":true}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"languages":[{"language":"en","href":"docs/en/home"},{"language":"cn","href":"docs/cn/home"},{"language":"ko","href":"docs/ko/home"},{"language":"ja","href":"docs/ja/home"},{"language":"tr","href":"docs/tr/home"},{"language":"pt-BR","href":"docs/pt-BR/home"},{"language":"es","href":"docs/es/home"},{"language":"fr","href":"docs/fr/home"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"onesignal","hasAudioNarration":false,"actualSubdomain":"onesignal","customDomains":["documentation.onesignal.com"],"gitSource":{"type":"github","owner":"onesignal","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af3b762ba298f9b99480a99","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"en","tag":"User Guides","count":204},{"language":"es","tag":"Guías del Usuario","count":178},{"language":"fr","tag":"Guides utilisateur","count":178},{"language":"ja","tag":"ユーザーガイド","count":178},{"language":"ko","tag":"사용자 가이드","count":178},{"language":"pt-BR","tag":"Guia do Usuário","count":178},{"language":"tr","tag":"Kullanıcı Kılavuzları","count":178},{"language":"cn","tag":"用户指南","count":176},{"language":"en","tag":"Message channels","count":90},{"language":"es","tag":"Canales de mensajería","count":84},{"language":"fr","tag":"Canaux de messagerie","count":84},{"language":"ja","tag":"メッセージングチャネル","count":84},{"language":"ko","tag":"메시지 채널","count":84},{"language":"pt-BR","tag":"Canais de mensagem","count":84},{"language":"tr","tag":"Mesaj kanalları","count":84},{"language":"cn","tag":"消息渠道","count":83},{"language":"default","tag":"API Reference","count":68},{"language":"default","tag":"API reference","count":64},{"language":"en","tag":"Analytics \u0026 Integrations","count":53},{"language":"es","tag":"Analítica \u0026 Integraciones","count":52},{"language":"fr","tag":"Analyses et intégrations","count":52},{"language":"ja","tag":"分析 \u0026 統合","count":52},{"language":"ko","tag":"분석 \u0026 통합","count":52},{"language":"pt-BR","tag":"Análises \u0026 Integrações","count":52},{"language":"tr","tag":"Analitik ve Entegrasyonlar","count":52},{"language":"cn","tag":"分析和集成","count":51},{"language":"cn","tag":"开发者指南","count":48},{"language":"es","tag":"Guías del desarrollador","count":48},{"language":"fr","tag":"Guides développeur","count":48},{"language":"ja","tag":"開発者ガイド","count":48},{"language":"ko","tag":"개발자 가이드","count":48},{"language":"tr","tag":"Geliştirici Kılavuzları","count":48},{"language":"en","tag":"Developer Guides","count":47},{"language":"pt-BR","tag":"Guia de desenvolvedor","count":47},{"language":"en","tag":"Integrations","count":37},{"language":"es","tag":"Integraciones","count":37},{"language":"fr","tag":"Intégrations","count":37},{"language":"ja","tag":"統合","count":37},{"language":"ko","tag":"통합","count":37},{"language":"pt-BR","tag":"Integrações","count":37},{"language":"tr","tag":"Entegrasyonlar","count":37},{"language":"cn","tag":"集成","count":36},{"language":"en","tag":"Tutorials","count":35},{"language":"cn","tag":"推送通知","count":31},{"language":"cn","tag":"OneSignal 作为目的地","count":31},{"language":"en","tag":"Push","count":31},{"language":"en","tag":"OneSignal as destination","count":31},{"language":"es","tag":"Push notificaciones","count":31},{"language":"es","tag":"OneSignal como destino","count":31},{"language":"fr","tag":"Push","count":31},{"language":"fr","tag":"OneSignal comme destination","count":31},{"language":"ja","tag":"プッシュ通知","count":31},{"language":"ja","tag":"OneSignal as 宛先","count":31},{"language":"ko","tag":"푸시","count":31},{"language":"ko","tag":"OneSignal을 데이터 목적지로 사용","count":31},{"language":"pt-BR","tag":"Push notificações","count":31},{"language":"pt-BR","tag":"OneSignal como destino","count":31},{"language":"tr","tag":"Anlık bildirimler","count":31},{"language":"tr","tag":"OneSignal hedef","count":31},{"language":"en","tag":"Mobile SDKs","count":26},{"language":"cn","tag":"移动SDK","count":25},{"language":"es","tag":"SDKs móviles","count":25},{"language":"fr","tag":"SDK mobiles","count":25},{"language":"ja","tag":"モバイルSDK","count":25},{"language":"ko","tag":"모바일 SDKs","count":25},{"language":"pt-BR","tag":"SDKs móveis","count":25},{"language":"tr","tag":"Mobil SDK'lar","count":25},{"language":"cn","tag":"教程","count":24},{"language":"es","tag":"Tutoriales","count":24},{"language":"fr","tag":"Tutoriels","count":24},{"language":"ja","tag":"チュートリアル","count":24},{"language":"ko","tag":"튜토리얼","count":24},{"language":"pt-BR","tag":"Tutoriais","count":24},{"language":"tr","tag":"Eğitimler","count":24},{"language":"en","tag":"Mobile SDK setup","count":19},{"language":"cn","tag":"移动SDK设置","count":18},{"language":"es","tag":"Configuración del SDK móvil","count":18},{"language":"fr","tag":"Configuration SDK mobile","count":18},{"language":"ja","tag":"モバイルSDKセットアップ","count":18},{"language":"ko","tag":"모바일 SDK 설정","count":18},{"language":"pt-BR","tag":"Configuração do SDK móvel","count":18},{"language":"tr","tag":"Mobil SDK kurulumu","count":18},{"language":"default","tag":"Messages","count":9},{"language":"default","tag":"Users","count":9},{"language":"default","tag":"Organization","count":9},{"language":"default","tag":"Journeys","count":8},{"language":"default","tag":"Deprecated","count":6},{"language":"default","tag":"Templates","count":6},{"language":"default","tag":"Subscriptions","count":6},{"language":"default","tag":"Segments","count":5}]},"assistantConfig":{"enableStarterQuestions":false,"deflection":{"enabled":true,"email":"support@onesignal.com","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"docs/ko/onesignal-service-worker","slug":"/docs/ko/onesignal-service-worker","pageMetadata":{"title":"OneSignal service worker","description":"OneSignalSDKWorker.js 파일을 설정하고 구성하여 웹사이트가 OneSignal을 통해 웹 푸시 알림을 수신하고 표시할 수 있도록 합니다.","keywords":["service worker","OneSignalSDKWorker.js","웹 푸시","범위","PWA"],"href":"/docs/ko/onesignal-service-worker"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"OneSignalSDKWorker.js 파일을 설정하고 구성하여 웹사이트가 OneSignal을 통해 웹 푸시 알림을 수신하고 표시할 수 있도록 합니다.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,Card,Check,CodeBlock,Frame,Heading,Note,OptimizedImage,Step,Steps,Table,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!Card)_missingMdxReference(`Card`,true);if(!Check)_missingMdxReference(`Check`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`OneSignal service worker(`,_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`)는 웹 푸시 알림에 필요한 서버에 호스팅된 JavaScript 파일입니다. 사용자가 페이지를 벗어난 경우에도 사이트가 알림을 수신하고 표시할 수 있게 해줍니다.`]}),`\n`,_jsx(Frame,{caption:`OneSignal service worker가 푸시 알림을 처리하는 방식`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/onesignal/MUgio66t0sYhGEvj/images/docs/67882a5-onesignsal-service-worker.jpg?fit=max\u0026auto=format\u0026n=MUgio66t0sYhGEvj\u0026q=85\u0026s=e0b50cfe6ccc36c1b2b6d36219b6e3ad`,alt:`Diagram showing the OneSignal service worker receiving a push event and displaying a notification`,\"data-og-width\":`2016`,width:`2016`,\"data-og-height\":`949`,height:`949`,\"data-path\":`images/docs/67882a5-onesignsal-service-worker.jpg`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/onesignal/MUgio66t0sYhGEvj/images/docs/67882a5-onesignsal-service-worker.jpg?w=280\u0026fit=max\u0026auto=format\u0026n=MUgio66t0sYhGEvj\u0026q=85\u0026s=0f9c359ca82b78c0b9f38471405330b4 280w, https://mintcdn.com/onesignal/MUgio66t0sYhGEvj/images/docs/67882a5-onesignsal-service-worker.jpg?w=560\u0026fit=max\u0026auto=format\u0026n=MUgio66t0sYhGEvj\u0026q=85\u0026s=e5b7f78f864206ff3e2de4f6c1f6e228 560w, https://mintcdn.com/onesignal/MUgio66t0sYhGEvj/images/docs/67882a5-onesignsal-service-worker.jpg?w=840\u0026fit=max\u0026auto=format\u0026n=MUgio66t0sYhGEvj\u0026q=85\u0026s=90b6ab1047cb66a8bc228a034b110c1a 840w, https://mintcdn.com/onesignal/MUgio66t0sYhGEvj/images/docs/67882a5-onesignsal-service-worker.jpg?w=1100\u0026fit=max\u0026auto=format\u0026n=MUgio66t0sYhGEvj\u0026q=85\u0026s=b9486e6fdaab0c18d6abbeea68ab4734 1100w, https://mintcdn.com/onesignal/MUgio66t0sYhGEvj/images/docs/67882a5-onesignsal-service-worker.jpg?w=1650\u0026fit=max\u0026auto=format\u0026n=MUgio66t0sYhGEvj\u0026q=85\u0026s=1562fa23a68e80e372299581fd0aaa6c 1650w, https://mintcdn.com/onesignal/MUgio66t0sYhGEvj/images/docs/67882a5-onesignsal-service-worker.jpg?w=2500\u0026fit=max\u0026auto=format\u0026n=MUgio66t0sYhGEvj\u0026q=85\u0026s=994e867e17b1127712ddc341e7690452 2500w`})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`WordPress 플러그인을 사용하는 경우 이 가이드를 건너뛰세요. 플러그인은 `,_jsx(_components.code,{children:`sdk_files`}),` 디렉토리에 `,_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`를 호스팅하고 경로를 자동으로 구성합니다. 파일을 사이트 루트에 업로드하거나 대시보드 또는 코드에서 사용자 지정 경로를 설정하지 마세요. `,_jsx(_components.a,{href:`/docs/ko/wordpress#service-worker`,children:`WordPress 설정`}),`을 참조하세요. Shopify도 워커를 자동으로 배포합니다. `,_jsx(_components.a,{href:`/docs/ko/shopify`,children:`Shopify 설정`}),`을 참조하세요.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`service-worker-설정`,children:`Service worker 설정`}),`\n`,_jsxs(_components.p,{children:[`OneSignal 푸시 알림을 위한 전용 `,_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),` 파일을 생성합니다. 사이트에 이미 service worker가 있고 단일 파일을 사용하려면 대신 `,_jsx(_components.a,{href:`#combining-multiple-service-workers`,children:`여러 service worker 결합`}),`을 참조하세요.`]}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`OneSignalSDKWorker.js 다운로드 또는 생성`,children:[_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/docs/ko/web-sdk-setup`,children:`Web SDK 설정`}),` 중에 OneSignal 대시보드에서 파일을 다운로드하거나 `,_jsx(_components.a,{href:`https://github.com/OneSignal/OneSignal-Website-SDK/files/11480764/OneSignalSDK-v16-ServiceWorker.zip`,children:`GitHub에서 다운로드`}),`하세요.`]}),_jsxs(_components.p,{children:[`또는 `,_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`라는 파일을 만들고 다음 한 줄의 코드를 작성하세요:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`importScripts`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),_jsx(Note,{children:_jsxs(_components.p,{children:[`필요한 경우 파일 이름을 변경할 수 있습니다(예: `,_jsx(_components.code,{children:`onesignalsdkworker.js`}),`, `,_jsx(_components.code,{children:`ossw.js`}),`). 변경하는 경우 이 가이드의 `,_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`를 해당 파일 이름으로 교체하세요.`]})})]}),_jsxs(Step,{title:`웹 서버에 업로드`,children:[_jsxs(_components.p,{children:[_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`를 서버에 배치하여 HTTPS를 통해 공개적으로 접근할 수 있게 합니다. 파일 접근에 인증이나 로그인이 필요하지 않아야 합니다.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`권장:`}),` 페이지를 제공하지 않는 전용 하위 디렉토리(예: `,_jsx(_components.code,{children:`/push/onesignal/`}),`)에 파일을 호스팅하세요. 이렇게 하면 사이트의 다른 service worker(예: PWA 또는 AMP service worker)와의 충돌을 방지하고 URL 경로를 안정적으로 유지할 수 있습니다.`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`예: `,_jsx(_components.code,{children:`https://yoursite.com/push/onesignal/OneSignalSDKWorker.js`})]}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`대안:`}),` OneSignal Web SDK는 기본적으로 사이트 루트(`,_jsx(_components.code,{children:`https://yoursite.com/OneSignalSDKWorker.js`}),`)에서 파일을 찾습니다. 루트 디렉토리에 파일을 업로드할 수 있지만, 루트 범위가 필요한 다른 service worker와 충돌할 수 있습니다. PWA를 사용하는 경우 `,_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`를 하위 디렉토리에 배치하세요.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`영구적인`}),` URL 경로를 선택하세요. 브라우저가 특정 URL에 service worker를 등록하면 해당 URL 변경 시 `,_jsx(_components.a,{href:`#migration-guide`,children:`마이그레이션`}),`이 필요합니다.`]})})]}),_jsxs(Step,{title:`파일 접근 가능 여부 확인`,children:[_jsxs(_components.p,{children:[`브라우저에서 파일 URL로 이동하세요(예: `,_jsx(_components.code,{children:`https://yoursite.com/push/onesignal/OneSignalSDKWorker.js`}),`). 1단계의 `,_jsx(_components.code,{children:`importScripts`}),` 줄이 표시되어야 합니다:`]}),_jsx(Frame,{caption:`브라우저에서 예상되는 service worker 파일 내용`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/onesignal/eSOC1PsvyAo3Gten/images/push/service-worker-code-example.png?fit=max\u0026auto=format\u0026n=eSOC1PsvyAo3Gten\u0026q=85\u0026s=3add122d37c9f12a39f1d7e3d40eeaba`,alt:`Browser displaying the single importScripts line inside OneSignalSDKWorker.js`,\"data-og-width\":`1678`,width:`1678`,\"data-og-height\":`322`,height:`322`,\"data-path\":`images/push/service-worker-code-example.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/onesignal/eSOC1PsvyAo3Gten/images/push/service-worker-code-example.png?w=280\u0026fit=max\u0026auto=format\u0026n=eSOC1PsvyAo3Gten\u0026q=85\u0026s=a36ff6beea8e4adfe44427bd54414b37 280w, https://mintcdn.com/onesignal/eSOC1PsvyAo3Gten/images/push/service-worker-code-example.png?w=560\u0026fit=max\u0026auto=format\u0026n=eSOC1PsvyAo3Gten\u0026q=85\u0026s=6824645ff7018f21b2f28bc046ecf8a0 560w, https://mintcdn.com/onesignal/eSOC1PsvyAo3Gten/images/push/service-worker-code-example.png?w=840\u0026fit=max\u0026auto=format\u0026n=eSOC1PsvyAo3Gten\u0026q=85\u0026s=b4d3a81ce01b7c6aae9594d659af9968 840w, https://mintcdn.com/onesignal/eSOC1PsvyAo3Gten/images/push/service-worker-code-example.png?w=1100\u0026fit=max\u0026auto=format\u0026n=eSOC1PsvyAo3Gten\u0026q=85\u0026s=b6965fa570e3dd123fe29f3b48155854 1100w, https://mintcdn.com/onesignal/eSOC1PsvyAo3Gten/images/push/service-worker-code-example.png?w=1650\u0026fit=max\u0026auto=format\u0026n=eSOC1PsvyAo3Gten\u0026q=85\u0026s=e827be7d9144c32a7716d83dddd673f9 1650w, https://mintcdn.com/onesignal/eSOC1PsvyAo3Gten/images/push/service-worker-code-example.png?w=2500\u0026fit=max\u0026auto=format\u0026n=eSOC1PsvyAo3Gten\u0026q=85\u0026s=fb289f6bfa690bd04aabcf153f2fbefa 2500w`})}),_jsx(_components.p,{children:`404 오류, 빈 페이지 또는 로그인 프롬프트가 표시되면 파일이 올바르게 업로드되지 않았거나 인증 뒤에 있는 것입니다.`})]}),_jsxs(Step,{title:`SDK에 파일 위치 알려주기`,children:[_jsxs(_components.p,{children:[`Web SDK는 다른 위치를 알려주지 않는 한 사이트 루트(`,_jsx(_components.code,{children:`https://yoursite.com/OneSignalSDKWorker.js`}),`)에서 `,_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`를 찾습니다. 알려주는 방법은 통합 유형에 따라 다릅니다.`]}),_jsx(_components.p,{children:`파일을 사이트 루트에 배치한 경우 추가 구성이 필요하지 않습니다. 다음 단계로 건너뛰세요.`}),_jsxs(_components.p,{children:[`파일을 하위 디렉토리에 배치한 경우 경로를 설정해야 합니다. 일반 사이트는 대시보드에서 설정합니다. 사용자 지정 코드는 `,_jsx(_components.code,{children:`OneSignal.init()`}),`에서 설정합니다. 둘을 혼합하면 작동하지 않습니다: 대시보드 경로 필드는 사용자 지정 코드에 적용되지 않고, `,_jsx(_components.code,{children:`serviceWorkerPath`}),`는 일반 사이트에 적용되지 않습니다.`]}),_jsx(Heading,{level:`4`,id:`일반-사이트`,children:`일반 사이트`}),_jsxs(_components.p,{children:[`OneSignal 대시보드에서 경로를 설정하세요. 코드에서 `,_jsx(_components.code,{children:`serviceWorkerPath`}),`를 전달하지 마세요.`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Settings > Push \u0026 In-App > Web`}),`으로 이동합니다.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Advanced Push Settings`}),`에서 `,_jsx(_components.strong,{children:`Customize service worker paths and filenames`}),`를 활성화합니다.`]}),`\n`]}),_jsx(Frame,{caption:`대시보드의 service worker 경로 구성`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/onesignal/npQH4TNAoIbyiAie/images/dashboard/service-worker-configuration-typical-site-setup.png?fit=max\u0026auto=format\u0026n=npQH4TNAoIbyiAie\u0026q=85\u0026s=0bc69998eea5273d287af408c6e925b3`,alt:`OneSignal dashboard fields for service worker path, filename, and registration scope`,\"data-og-width\":`1840`,width:`1840`,\"data-og-height\":`794`,height:`794`,\"data-path\":`images/dashboard/service-worker-configuration-typical-site-setup.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/onesignal/npQH4TNAoIbyiAie/images/dashboard/service-worker-configuration-typical-site-setup.png?w=280\u0026fit=max\u0026auto=format\u0026n=npQH4TNAoIbyiAie\u0026q=85\u0026s=46c198c37fcfff6d549471822396a6f5 280w, https://mintcdn.com/onesignal/npQH4TNAoIbyiAie/images/dashboard/service-worker-configuration-typical-site-setup.png?w=560\u0026fit=max\u0026auto=format\u0026n=npQH4TNAoIbyiAie\u0026q=85\u0026s=50fd95e8b69c6b4804f8ff49af7a01c9 560w, https://mintcdn.com/onesignal/npQH4TNAoIbyiAie/images/dashboard/service-worker-configuration-typical-site-setup.png?w=840\u0026fit=max\u0026auto=format\u0026n=npQH4TNAoIbyiAie\u0026q=85\u0026s=8ab764732a5170bfcf1c851552987309 840w, https://mintcdn.com/onesignal/npQH4TNAoIbyiAie/images/dashboard/service-worker-configuration-typical-site-setup.png?w=1100\u0026fit=max\u0026auto=format\u0026n=npQH4TNAoIbyiAie\u0026q=85\u0026s=4796747320900d10f5577c107a12fd80 1100w, https://mintcdn.com/onesignal/npQH4TNAoIbyiAie/images/dashboard/service-worker-configuration-typical-site-setup.png?w=1650\u0026fit=max\u0026auto=format\u0026n=npQH4TNAoIbyiAie\u0026q=85\u0026s=f5bc6751ba599a97995829c3e5c8525f 1650w, https://mintcdn.com/onesignal/npQH4TNAoIbyiAie/images/dashboard/service-worker-configuration-typical-site-setup.png?w=2500\u0026fit=max\u0026auto=format\u0026n=npQH4TNAoIbyiAie\u0026q=85\u0026s=bed107a1fb545a315200121681519c41 2500w`})}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`필드`}),_jsx(_components.th,{children:`설명`}),_jsx(_components.th,{children:`예시`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Path to service worker files`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`가 호스팅된 디렉토리.`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`/push/onesignal/`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Service worker filename`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`.js`}),` 파일 이름.`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`OneSignalSDKWorker.js`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Service worker registration scope`})}),_jsx(_components.td,{children:`service worker가 제어하는 URL 경로. 파일이 호스팅된 디렉토리 이하에 있어야 합니다. 사용자 대면 페이지를 제공하지 않는 경로를 사용하세요.`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`/push/onesignal/`})})]})]})]}),_jsxs(_components.p,{children:[`일반 사이트 절차는 `,_jsx(_components.a,{href:`/docs/ko/web-sdk-setup#service-workers`,children:`Web SDK 설정`}),`을 참조하세요.`]}),_jsx(Heading,{level:`4`,id:`사용자-지정-코드`,children:`사용자 지정 코드`}),_jsxs(_components.p,{children:[_jsx(_components.code,{children:`OneSignal.init()`}),` 호출에서 `,_jsx(_components.code,{children:`serviceWorkerPath`}),`와 `,_jsx(_components.code,{children:`serviceWorkerParam`}),`을 전달하세요. 사용자 지정 코드는 대시보드의 `,_jsx(_components.strong,{children:`Customize service worker paths and filenames`}),` 필드를 사용하지 않습니다.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`script`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` src`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` defer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`script`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`script`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` window`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`OneSignalDeferred`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` window`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`OneSignalDeferred`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ||`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [];`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` window`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`OneSignalDeferred`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`push`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`OneSignal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` OneSignal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`init`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` appId:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"YOUR_ONESIGNAL_APP_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` serviceWorkerPath:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"push/onesignal/OneSignalSDKWorker.js\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` serviceWorkerParam:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`scope:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"/push/onesignal/\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`\u003c/`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`script`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:`>`})]}),`\n`]})})}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`매개변수`}),_jsx(_components.th,{children:`설명`}),_jsx(_components.th,{children:`예시`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`serviceWorkerPath`})}),_jsxs(_components.td,{children:[`사이트 루트에서 `,_jsx(_components.code,{children:`.js`}),` 파일까지의 상대 경로(앞에 슬래시 없음).`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`\"push/onesignal/OneSignalSDKWorker.js\"`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`serviceWorkerParam.scope`})}),_jsx(_components.td,{children:`service worker가 제어하는 URL 경로. 파일이 호스팅된 디렉토리 이하에 있어야 합니다. 사용자 대면 페이지를 제공하지 않는 경로를 사용하세요.`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`\"/push/onesignal/\"`})})]})]})]}),_jsxs(_components.p,{children:[`파일이 사이트 루트에 없고 이러한 옵션을 생략하면 SDK는 여전히 `,_jsx(_components.code,{children:`https://yoursite.com/OneSignalSDKWorker.js`}),`를 가져오고 등록에 실패합니다.`]}),_jsxs(_components.p,{children:[`전체 init 스니펫에 이러한 옵션을 추가하려면 `,_jsx(_components.a,{href:`/docs/ko/web-push-custom-code-setup#upload-service-worker-file`,children:`사용자 지정 코드 설정`}),`을 참조하세요.`]})]}),_jsxs(Step,{title:`Service worker 요구 사항 검토`,children:[_jsxs(_components.p,{children:[`푸시 알림이 작동하려면 `,_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),` 파일이 다음 모든 요구 사항을 충족해야 합니다.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`요구 사항`}),_jsx(_components.th,{children:`세부 정보`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`공개 접근 가능`})}),_jsx(_components.td,{children:`브라우저에서 파일 URL로 이동하여 JavaScript 코드가 표시되는지 확인하세요.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`올바른 콘텐츠 유형`})}),_jsxs(_components.td,{children:[`서버는 `,_jsx(_components.code,{children:`Content-Type: application/javascript; charset=utf-8`}),`을 반환해야 합니다.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`동일 출처`})}),_jsxs(_components.td,{children:[`파일은 사이트와 동일한 도메인에 호스팅되어야 합니다. CDN과 하위 도메인은 허용되지 않습니다. `,_jsx(_components.a,{href:`https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Registering_your_worker`,children:`MDN: 워커 등록`}),`을 참조하세요.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`HTTPS`})}),_jsxs(_components.td,{children:[`Service worker는 보안 컨텍스트가 필요합니다. `,_jsx(_components.code,{children:`localhost`}),`는 개발 중 유일한 예외입니다.`]})]})]})]}),_jsx(Check,{children:_jsx(_components.p,{children:`Service worker 설정이 완료되었습니다.`})}),_jsx(Card,{title:`Web SDK 설정`,icon:`browsers`,href:`/docs/ko/web-sdk-setup`,children:_jsx(_components.p,{children:`다음 단계는 Web SDK 설정 가이드를 계속 따르세요.`})})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`여러-service-worker-결합`,children:`여러 service worker 결합`}),`\n`,_jsxs(_components.p,{children:[`사이트의 각 service worker 파일은 `,_jsx(_components.strong,{children:`범위`}),`—어떤 페이지를 제어할지를 결정하는 URL 경로—에 등록됩니다. 주어진 범위에서 하나의 service worker만 활성화될 수 있습니다. 이미 service worker(예: PWA 또는 캐싱 워커)가 있고 OneSignal이 동일한 파일을 공유하게 하려면 결합할 수 있습니다.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`별도의 범위를 가진 별도의 파일에 service worker를 유지하는 것이 유지 관리가 더 쉽고 충돌을 방지합니다. 설정에 단일 service worker 파일이 필요한 경우에만 결합하세요.`})}),`\n`,_jsxs(_components.p,{children:[`결합하려면 OneSignal `,_jsx(_components.code,{children:`importScripts`}),` 줄을 `,_jsx(_components.strong,{children:`기존`}),` service worker 파일에 추가하세요:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`importScripts`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`importScripts`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://yoursite.com/your-other-service-worker.js\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`결합 후, OneSignal 구성이 기존 service worker 파일을 가리키도록 업데이트하세요. 결합된 파일의 경로와 파일 이름을 사용하여 `,_jsx(_components.a,{href:`#step-4-tell-the-sdk-where-to-find-the-file`,children:`SDK에 파일 위치 알려주기`}),`를 따르세요.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`마이그레이션-가이드`,children:`마이그레이션 가이드`}),`\n`,_jsx(_components.p,{children:`이 섹션은 service worker 파일 경로, 파일 이름 또는 범위를 변경해야 하는 기존 OneSignal 고객을 위한 것입니다. 현재 구성을 변경할 특별한 이유가 없다면 이 단계를 따르지 마세요.`}),`\n`,_jsxs(Accordion,{title:`service worker를 마이그레이션하는 시기와 방법`,id:`service-worker`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`마이그레이션 이유:`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`루트 범위 OneSignal service worker가 프로그레시브 웹 앱(PWA)과 충돌`}),`\n`,_jsx(_components.li,{children:`Service worker가 AMP 또는 다른 캐싱 service worker와 충돌`}),`\n`,_jsx(_components.li,{children:`보안 정책이 루트 범위에서 타사 service worker 코드를 금지`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`옵션 1: 범위만 변경 (권장)`})}),_jsx(_components.p,{children:`범위만 변경하는 것이 가장 안전한 마이그레이션입니다. 파일이 현재 URL에 유지되므로 기존 구독자는 중단 없이 알림을 계속 받습니다.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`파일에 OneSignal 코드만 포함된 경우`})}),_jsxs(_components.p,{children:[_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`에 다음만 포함되어 있는지 확인하세요:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`importScripts`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.a,{href:`#step-4-tell-the-sdk-where-to-find-the-file`,children:`SDK에 파일 위치 알려주기`}),`에 설명된 대로 대시보드(일반 사이트) 또는 `,_jsx(_components.code,{children:`serviceWorkerParam`}),`(사용자 지정 코드)을 사용하여 범위를 업데이트하세요. 다른 변경은 필요하지 않습니다.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`가 현재 도메인 루트에 호스팅되어 `,_jsx(_components.strong,{children:`있지 않다면`}),`, 최소 1년 동안 `,_jsx(_components.code,{children:`Service-Worker-Allowed`}),` 헤더와 함께 현재 URL에서 계속 호스팅해야 합니다. 파일이 실수로 제거되지 않도록 백엔드 코드나 내부 문서에 주석을 추가하세요.`]})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`파일에 OneSignal + 다른 코드가 포함된 경우`})}),_jsxs(_components.p,{children:[`Service worker에 추가적인 `,_jsx(_components.code,{children:`importScripts`}),` 호출이 포함되어 있을 수 있습니다(예: `,_jsx(_components.a,{href:`#combining-multiple-service-workers`,children:`여러 service worker 결합`}),` 가이드를 따른 경우). 현재 설정이 여전히 작동한다면 `,_jsx(_components.strong,{children:`그대로 유지하세요`}),`—병합된 service worker 분리는 2단계 롤아웃이 필요합니다.`]}),_jsx(_components.p,{children:`분리해야 하는 경우:`}),_jsxs(Steps,{children:[_jsxs(Step,{title:`기존 파일에 보존 주석 추가`,children:[_jsxs(_components.p,{children:[`현재 service worker의 OneSignal `,_jsx(_components.code,{children:`importScripts`}),` 줄 위에 추가하세요:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// KEEP until YYYY-MM-DD: Required for push delivery to subscribers who have not revisited.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`importScripts`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`날짜를 최소 `,_jsx(_components.strong,{children:`1년`}),` 후로 설정하세요.`]})]}),_jsxs(Step,{title:`새로운 전용 OneSignal service worker 생성`,children:[_jsxs(_components.p,{children:[`하위 디렉토리(예: `,_jsx(_components.code,{children:`/push/onesignal/`}),`)에 다음만 포함하는 `,_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`를 생성하세요:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`importScripts`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})})]}),_jsx(Step,{title:`OneSignal 구성 업데이트`,children:_jsxs(_components.p,{children:[_jsx(_components.a,{href:`#step-4-tell-the-sdk-where-to-find-the-file`,children:`SDK에 파일 위치 알려주기`}),`에 설명된 대로 대시보드(일반 사이트) 또는 `,_jsx(_components.code,{children:`OneSignal.init()`}),`(사용자 지정 코드)을 사용하여 새 경로와 범위를 설정하세요.`]})}),_jsx(Step,{title:`구독자 마이그레이션 대기`,children:_jsx(_components.p,{children:`신규 방문자와 재방문자는 자동으로 새 service worker에 등록됩니다. 기존 구독자 대부분이 사이트를 재방문할 때까지 최소 1년을 기다리세요.`})}),_jsx(Step,{title:`정리`,children:_jsxs(_components.p,{children:[`선택한 보존 기간보다 오래된 `,_jsx(_components.a,{href:`/docs/ko/delete-users`,children:`비활성 사용자를 삭제`}),`하고, 원래 service worker 파일에서 OneSignal `,_jsx(_components.code,{children:`importScripts`}),` 줄을 제거하세요.`]})})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`옵션 2: 파일 이름 또는 파일 위치 변경`})}),_jsx(_components.p,{children:`파일 이름이나 디렉토리 변경은 더 복잡합니다. 브라우저가 원래 등록된 URL에서 service worker를 가져오기 때문입니다. 사이트를 재방문하지 않은 구독자는 여전히 이전 URL을 참조합니다.`}),_jsx(Warning,{children:_jsx(_components.p,{children:`최소 1년 동안 원래 파일을 이전 URL에서 계속 호스팅해야 합니다. 제거하면 브라우저가 service worker를 업데이트하려 할 때 404 오류가 발생하고, 영향받는 구독자는 알림을 받지 못합니다.`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`파일에 OneSignal 코드만 포함된 경우`})}),_jsxs(Steps,{children:[_jsx(Step,{title:`이전 파일에 보존 주석 추가`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// KEEP until YYYY-MM-DD: Required for push delivery to subscribers still on the old service worker URL.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`importScripts`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})})}),_jsxs(Step,{title:`새 위치에 새 파일 생성`,children:[_jsxs(_components.p,{children:[`새 디렉토리에 `,_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`(또는 선택한 파일 이름)를 배치하고 다음을 작성하세요:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`importScripts`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.sw.js\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})})]}),_jsx(Step,{title:`OneSignal 구성 업데이트`,children:_jsxs(_components.p,{children:[_jsx(_components.a,{href:`#step-4-tell-the-sdk-where-to-find-the-file`,children:`SDK에 파일 위치 알려주기`}),`에 설명된 대로 새 경로, 파일 이름 및 범위를 설정하세요.`]})}),_jsx(Step,{title:`구독자 마이그레이션 대기`,children:_jsx(_components.p,{children:`신규 방문자와 재방문자는 자동으로 새 파일에 등록됩니다. 최소 1년을 기다리세요.`})}),_jsx(Step,{title:`정리`,children:_jsxs(_components.p,{children:[`보존 기간보다 오래된 `,_jsx(_components.a,{href:`/docs/ko/delete-users`,children:`비활성 사용자를 삭제`}),`하고, 이전 파일을 제거하세요.`]})})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`파일에 OneSignal + 다른 코드가 포함된 경우`})}),_jsxs(_components.p,{children:[`위의 `,_jsx(_components.strong,{children:`옵션 1: 범위만 변경`}),` 단계를 따르세요. 프로세스는 동일합니다.`]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`자주-묻는-질문`,children:`자주 묻는 질문`}),`\n`,_jsx(Heading,{level:`3`,id:`이-가이드가-wordpress에-적용되나요`,children:`이 가이드가 WordPress에 적용되나요?`}),`\n`,_jsxs(_components.p,{children:[`아니요. WordPress 플러그인은 `,_jsx(_components.code,{children:`sdk_files`}),` 디렉토리에 `,_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`를 호스팅하고 등록합니다. 워커를 사이트 루트에 업로드하거나 코드에서 `,_jsx(_components.code,{children:`serviceWorkerPath`}),`를 설정하지 마세요. `,_jsx(_components.a,{href:`/docs/ko/wordpress#service-worker`,children:`WordPress 설정`}),`을 참조하세요.`]}),`\n`,_jsx(Heading,{level:`3`,id:`일반-사이트와-사용자-지정-코드에서-service-worker-경로를-어떻게-설정하나요`,children:`일반 사이트와 사용자 지정 코드에서 service worker 경로를 어떻게 설정하나요?`}),`\n`,_jsxs(_components.p,{children:[`Web SDK는 사용자 지정 경로를 설정하지 않는 한 사이트 루트에서 `,_jsx(_components.code,{children:`OneSignalSDKWorker.js`}),`를 찾습니다. 일반 사이트는 대시보드의 `,_jsx(_components.strong,{children:`Customize service worker paths and filenames`}),`에서 해당 경로를 설정합니다. 사용자 지정 코드는 `,_jsx(_components.code,{children:`OneSignal.init()`}),`의 `,_jsx(_components.code,{children:`serviceWorkerPath`}),` 및 `,_jsx(_components.code,{children:`serviceWorkerParam`}),`으로 코드에서 설정합니다. 대시보드 경로 필드는 사용자 지정 코드에 적용되지 않습니다. `,_jsx(_components.a,{href:`#step-4-tell-the-sdk-where-to-find-the-file`,children:`SDK에 파일 위치 알려주기`}),`를 참조하세요.`]}),`\n`,_jsx(Heading,{level:`3`,id:`service-worker가-404를-반환하는-이유는-무엇인가요`,children:`service worker가 404를 반환하는 이유는 무엇인가요?`}),`\n`,_jsxs(_components.p,{children:[`파일이 SDK가 예상하는 URL에 없습니다. 브라우저에서 전체 파일 URL로 이동하여 접근 가능한지 확인하세요. 파일을 하위 디렉토리에 배치한 경우 구성된 경로가 디렉토리와 파일 이름을 포함하여 실제 파일 위치와 일치해야 합니다. 일반 사이트: 대시보드 경로 설정을 확인하세요. 사용자 지정 코드: `,_jsx(_components.code,{children:`OneSignal.init()`}),`의 `,_jsx(_components.code,{children:`serviceWorkerPath`}),`를 확인하세요.`]}),`\n`,_jsx(Heading,{level:`3`,id:`service-worker-파일을-이동한-후-알림이-표시되지-않는-이유는-무엇인가요`,children:`service worker 파일을 이동한 후 알림이 표시되지 않는 이유는 무엇인가요?`}),`\n`,_jsxs(_components.p,{children:[`기존 구독자는 여전히 이전 service worker URL을 참조합니다. 브라우저는 푸시가 도착할 때마다 등록된 URL을 가져옵니다(최대 24시간 캐시). 이전 URL이 404를 반환하면 해당 구독자는 알림을 받지 못합니다. 구독자가 사이트를 재방문하여 자연스럽게 마이그레이션할 때까지 최소 1년 동안 이전 파일 호스팅을 계속하세요. `,_jsx(_components.a,{href:`#migration-guide`,children:`마이그레이션 가이드`}),` 및 `,_jsx(_components.a,{href:`/docs/ko/notifications-not-shown-web-push`,children:`웹 푸시 알림이 표시되지 않음`}),` 가이드를 참조하세요.`]}),`\n`,_jsx(Heading,{level:`3`,id:`cdn-또는-하위-도메인에서-service-worker를-호스팅할-수-있나요`,children:`CDN 또는 하위 도메인에서 service worker를 호스팅할 수 있나요?`}),`\n`,_jsx(_components.p,{children:`아니요. 브라우저는 service worker가 등록하는 페이지와 동일한 출처에서 제공되어야 한다고 요구합니다. 파일은 기본 도메인에 있어야 합니다—CDN, 하위 도메인 또는 다른 도메인은 안됩니다.`}),`\n`,_jsx(Heading,{level:`3`,id:`pwa가-onesignal-service-worker와-충돌하는-이유는-무엇인가요`,children:`PWA가 OneSignal service worker와 충돌하는 이유는 무엇인가요?`}),`\n`,_jsxs(_components.p,{children:[`둘 다 루트 범위(`,_jsx(_components.code,{children:`/`}),`)에 등록되어 있을 가능성이 높으며, 특정 범위에는 하나의 service worker만 활성화될 수 있습니다. OneSignal service worker를 하위 디렉토리 범위(예: `,_jsx(_components.code,{children:`/push/onesignal/`}),`)로 이동하여 PWA가 루트 범위를 유지하도록 하거나, `,_jsx(_components.a,{href:`#combining-multiple-service-workers`,children:`여러 service worker 결합`}),`에 설명된 대로 service worker를 결합하세요.`]}),`\n`,_jsx(Heading,{level:`3`,id:`onesignalsdkworker-js-파일-이름을-변경할-수-있나요`,children:`OneSignalSDKWorker.js 파일 이름을 변경할 수 있나요?`}),`\n`,_jsxs(_components.p,{children:[`예. 서버에 특정 명명 규칙(예: 모두 소문자)이 필요한 경우 `,_jsx(_components.code,{children:`onesignalsdkworker.js`}),`와 같은 이름으로 파일을 변경하세요. 일반 사이트: 대시보드의 `,_jsx(_components.strong,{children:`Service worker filename`}),` 필드를 업데이트하세요. 사용자 지정 코드: `,_jsx(_components.code,{children:`OneSignal.init()`}),` 호출의 `,_jsx(_components.code,{children:`serviceWorkerPath`}),`를 업데이트하세요. `,_jsx(_components.a,{href:`#step-4-tell-the-sdk-where-to-find-the-file`,children:`SDK에 파일 위치 알려주기`}),`를 참조하세요.`]}),`\n`,_jsx(Heading,{level:`3`,id:`서버가-service-worker-파일에-반환해야-하는-콘텐츠-유형은-무엇인가요`,children:`서버가 service worker 파일에 반환해야 하는 콘텐츠 유형은 무엇인가요?`}),`\n`,_jsxs(_components.p,{children:[`서버는 `,_jsx(_components.code,{children:`Content-Type: application/javascript; charset=utf-8`}),`을 반환해야 합니다. 일부 서버 또는 CDN 구성은 잘못된 MIME 유형을 반환할 수 있으며, 이로 인해 브라우저가 service worker 등록을 거부합니다.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"OneSignal service worker","description":"OneSignalSDKWorker.js 파일을 설정하고 구성하여 웹사이트가 OneSignal을 통해 웹 푸시 알림을 수신하고 표시할 수 있도록 합니다.","keywords":["service worker","OneSignalSDKWorker.js","웹 푸시","범위","PWA"],"href":"/docs/ko/onesignal-service-worker"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Service worker 설정","slug":"service-worker-설정","depth":2,"children":[{"title":"일반 사이트","slug":"일반-사이트","depth":4,"children":[]},{"title":"사용자 지정 코드","slug":"사용자-지정-코드","depth":4,"children":[]}]},{"title":"여러 service worker 결합","slug":"여러-service-worker-결합","depth":2,"children":[]},{"title":"마이그레이션 가이드","slug":"마이그레이션-가이드","depth":2,"children":[]},{"title":"자주 묻는 질문","slug":"자주-묻는-질문","depth":2,"children":[{"title":"이 가이드가 WordPress에 적용되나요?","slug":"이-가이드가-wordpress에-적용되나요","depth":3,"children":[]},{"title":"일반 사이트와 사용자 지정 코드에서 service worker 경로를 어떻게 설정하나요?","slug":"일반-사이트와-사용자-지정-코드에서-service-worker-경로를-어떻게-설정하나요","depth":3,"children":[]},{"title":"service worker가 404를 반환하는 이유는 무엇인가요?","slug":"service-worker가-404를-반환하는-이유는-무엇인가요","depth":3,"children":[]},{"title":"service worker 파일을 이동한 후 알림이 표시되지 않는 이유는 무엇인가요?","slug":"service-worker-파일을-이동한-후-알림이-표시되지-않는-이유는-무엇인가요","depth":3,"children":[]},{"title":"CDN 또는 하위 도메인에서 service worker를 호스팅할 수 있나요?","slug":"cdn-또는-하위-도메인에서-service-worker를-호스팅할-수-있나요","depth":3,"children":[]},{"title":"PWA가 OneSignal service worker와 충돌하는 이유는 무엇인가요?","slug":"pwa가-onesignal-service-worker와-충돌하는-이유는-무엇인가요","depth":3,"children":[]},{"title":"OneSignalSDKWorker.js 파일 이름을 변경할 수 있나요?","slug":"onesignalsdkworker-js-파일-이름을-변경할-수-있나요","depth":3,"children":[]},{"title":"서버가 service worker 파일에 반환해야 하는 콘텐츠 유형은 무엇인가요?","slug":"서버가-service-worker-파일에-반환해야-하는-콘텐츠-유형은-무엇인가요","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/onesignal/e069c1b9f3157e14/hotjar-koala.js","/_mintlify/custom/onesignal/3e5d03885ab32f49/intercom.js","/_mintlify/custom/onesignal/dbb7af4794d1b586/munchkin-marketo.js"],"subdomain":"onesignal","siteName":"OneSignal Documentation","title":"OneSignal service worker - OneSignal Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/docs/en/onesignal-service-worker","matchLevel":1},"cn":{"href":"/docs/cn/onesignal-service-worker","matchLevel":1},"ko":{"href":"/docs/ko/onesignal-service-worker","matchLevel":0},"ja":{"href":"/docs/ja/onesignal-service-worker","matchLevel":1},"tr":{"href":"/docs/tr/onesignal-service-worker","matchLevel":1},"pt-BR":{"href":"/docs/pt-BR/onesignal-service-worker","matchLevel":1},"es":{"href":"/docs/es/onesignal-service-worker","matchLevel":1},"fr":{"href":"/docs/fr/onesignal-service-worker","matchLevel":1}}},"lastModified":"2026-08-27T16:31:15.857Z","originalFileLocation":"docs/ko/onesignal-service-worker.mdx","locale":"ko"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"OneSignalSDKWorker.js 파일을 설정하고 구성하여 웹사이트가 OneSignal을 통해 웹 푸시 알림을 수신하고 표시할 수 있도록 합니다.\">\u003cmeta data-mint-head name=\"application-name\" content=\"OneSignal Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"OneSignal service worker - OneSignal Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"OneSignalSDKWorker.js 파일을 설정하고 구성하여 웹사이트가 OneSignal을 통해 웹 푸시 알림을 수신하고 표시할 수 있도록 합니다.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OneSignal Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://documentation.onesignal.com/docs/ko/onesignal-service-worker\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://onesignal.mintlify.site/_mintlify/api/og/v2?division=%EC%9B%B9+SDK+%EC%84%A4%EC%A0%95\u0026amp;title=OneSignal+service+worker\u0026amp;description=OneSignalSDKWorker.js+%ED%8C%8C%EC%9D%BC%EC%9D%84+%EC%84%A4%EC%A0%95%ED%95%98%EA%B3%A0+%EA%B5%AC%EC%84%B1%ED%95%98%EC%97%AC+%EC%9B%B9%EC%82%AC%EC%9D%B4%ED%8A%B8%EA%B0%80+OneSignal%EC%9D%84+%ED%86%B5%ED%95%B4+%EC%9B%B9+%ED%91%B8%EC%8B%9C+%EC%95%8C%EB%A6%BC%EC%9D%84+%EC%88%98%EC%8B%A0%ED%95%98%EA%B3%A0+%ED%91%9C%EC%8B%9C%ED%95%A0+%EC%88%98+%EC%9E%88%EB%8F%84%EB%A1%9D+%ED%95%A9%EB%8B%88%EB%8B%A4.\u0026amp;theme=12e705baa88dc8cc6d7a9877\u0026amp;signature=6391c78e405d14582e6f4cafe0ca24aa13f4620ddbfdcdb5fd88066aa987d4ee\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"OneSignal service worker - OneSignal Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"OneSignalSDKWorker.js 파일을 설정하고 구성하여 웹사이트가 OneSignal을 통해 웹 푸시 알림을 수신하고 표시할 수 있도록 합니다.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://onesignal.mintlify.site/_mintlify/api/og/v2?division=%EC%9B%B9+SDK+%EC%84%A4%EC%A0%95\u0026amp;title=OneSignal+service+worker\u0026amp;description=OneSignalSDKWorker.js+%ED%8C%8C%EC%9D%BC%EC%9D%84+%EC%84%A4%EC%A0%95%ED%95%98%EA%B3%A0+%EA%B5%AC%EC%84%B1%ED%95%98%EC%97%AC+%EC%9B%B9%EC%82%AC%EC%9D%B4%ED%8A%B8%EA%B0%80+OneSignal%EC%9D%84+%ED%86%B5%ED%95%B4+%EC%9B%B9+%ED%91%B8%EC%8B%9C+%EC%95%8C%EB%A6%BC%EC%9D%84+%EC%88%98%EC%8B%A0%ED%95%98%EA%B3%A0+%ED%91%9C%EC%8B%9C%ED%95%A0+%EC%88%98+%EC%9E%88%EB%8F%84%EB%A1%9D+%ED%95%A9%EB%8B%88%EB%8B%A4.\u0026amp;theme=12e705baa88dc8cc6d7a9877\u0026amp;signature=6391c78e405d14582e6f4cafe0ca24aa13f4620ddbfdcdb5fd88066aa987d4ee\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OneSignal Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3A3DB3\">\u003clink data-mint-head rel=\"canonical\" href=\"https://documentation.onesignal.com/docs/ko/onesignal-service-worker\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/ko/onesignal-service-worker.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://documentation.onesignal.com/docs/ko/onesignal-service-worker\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://documentation.onesignal.com/docs/en/onesignal-service-worker\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://documentation.onesignal.com/docs/cn/onesignal-service-worker\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://documentation.onesignal.com/docs/ja/onesignal-service-worker\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"tr\" href=\"https://documentation.onesignal.com/docs/tr/onesignal-service-worker\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://documentation.onesignal.com/docs/pt-BR/onesignal-service-worker\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://documentation.onesignal.com/docs/es/onesignal-service-worker\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr\" href=\"https://documentation.onesignal.com/docs/fr/onesignal-service-worker\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://documentation.onesignal.com/docs/en/onesignal-service-worker\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://documentation.onesignal.com/#organization\",\"name\":\"OneSignal Documentation\",\"url\":\"https://documentation.onesignal.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/onesignal/yJcueeDCO7UpHnnY/logo/OneSignal-Logo.svg?fit=max\u0026auto=format\u0026n=yJcueeDCO7UpHnnY\u0026q=85\u0026s=1fcfb6fef6d820fd9d99c74850711107\"}},{\"@type\":\"WebSite\",\"@id\":\"https://documentation.onesignal.com#website\",\"name\":\"OneSignal Documentation\",\"url\":\"https://documentation.onesignal.com\",\"publisher\":{\"@id\":\"https://documentation.onesignal.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://documentation.onesignal.com/docs/ko/onesignal-service-worker#webpage\",\"url\":\"https://documentation.onesignal.com/docs/ko/onesignal-service-worker\",\"name\":\"OneSignal service worker\",\"description\":\"OneSignalSDKWorker.js 파일을 설정하고 구성하여 웹사이트가 OneSignal을 통해 웹 푸시 알림을 수신하고 표시할 수 있도록 합니다.\",\"dateModified\":\"2026-08-27T16:31:15.857Z\",\"isPartOf\":{\"@id\":\"https://documentation.onesignal.com#website\"},\"breadcrumb\":{\"@id\":\"https://documentation.onesignal.com/docs/ko/onesignal-service-worker#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://documentation.onesignal.com/docs/ko/onesignal-service-worker#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"웹 SDKs\",\"item\":\"https://documentation.onesignal.com/docs/ko/web-sdk-setup\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"웹 SDK 설정\",\"item\":\"https://documentation.onesignal.com/docs/ko/web-sdk-setup\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"OneSignal service worker\",\"item\":\"https://documentation.onesignal.com/docs/ko/onesignal-service-worker\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://documentation.onesignal.com/docs/ko/onesignal-service-worker#article\",\"headline\":\"OneSignal service worker\",\"name\":\"OneSignal service worker\",\"description\":\"OneSignalSDKWorker.js 파일을 설정하고 구성하여 웹사이트가 OneSignal을 통해 웹 푸시 알림을 수신하고 표시할 수 있도록 합니다.\",\"url\":\"https://documentation.onesignal.com/docs/ko/onesignal-service-worker\",\"mainEntityOfPage\":{\"@id\":\"https://documentation.onesignal.com/docs/ko/onesignal-service-worker#webpage\"},\"dateModified\":\"2026-08-27T16:31:15.857Z\",\"keywords\":\"service worker, OneSignalSDKWorker.js, 웹 푸시, 범위, PWA\",\"publisher\":{\"@id\":\"https://documentation.onesignal.com/#organization\"},\"isPartOf\":{\"@id\":\"https://documentation.onesignal.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OneSignal Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"OneSignal Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/ko/onesignal-service-worker.md","siteName":"OneSignal Documentation","nav":{"global":null,"languages":[{"language":"en","pages":[{"title":"en","href":"/docs/en/onesignal-service-worker"}]},{"language":"cn","pages":[{"title":"cn","href":"/docs/cn/onesignal-service-worker"}]},{"language":"ko","tabs":[{"tab":"홈","pages":[{"title":"홈","href":"/docs/ko/home"}]},{"tab":"사용자 가이드","pages":[{"title":"사용자 가이드","href":"/docs/ko/quickstart-guide"}]},{"tab":"개발자 가이드","groups":[{"group":"개발자 문서","pages":[{"title":"개발자","href":"/docs/ko/developers"},{"title":"신원 확인","href":"/docs/ko/identity-verification"},{"group":"사용자 모델","pages":[{"title":"사용자 모델 및 마이그레이션 가이드","href":"/docs/ko/user-model-migration-guide"},{"title":"모바일 SDK 매핑","href":"/docs/ko/device-user-model-mobile-sdk-mapping"},{"title":"웹 SDK 매핑","href":"/docs/ko/device-user-model-web-sdk-mapping"}]}]},{"group":"모바일 SDKs","pages":[{"group":"모바일 SDK 설정","pages":[{"title":"모바일 SDK 설정","href":"/docs/ko/mobile-sdk-setup"},{"group":"플랫폼 자격 증명 설정","pages":[{"title":"Android Firebase 자격 증명","href":"/docs/ko/android-firebase-credentials"},{"title":"iOS p8 토큰 기반 APNs 연결","href":"/docs/ko/ios-p8-token-based-connection-to-apns"},{"title":"iOS p12 인증서 생성","href":"/docs/ko/ios-p12-generate-certificates"},{"title":"Amazon API 키 생성","href":"/docs/ko/generate-an-amazon-api-key"},{"title":"Huawei 승인","href":"/docs/ko/authorize-onesignal-to-send-huawei-push"}]},{"title":"iOS SDK 설정","href":"/docs/ko/ios-sdk-setup"},{"title":"Android SDK 설정","href":"/docs/ko/android-sdk-setup"},{"title":"Unity SDK 설정","href":"/docs/ko/unity-sdk-setup"},{"title":"React Native SDK 설정","href":"/docs/ko/react-native-sdk-setup"},{"title":"Expo SDK 설정","href":"/docs/ko/react-native-expo-sdk-setup"},{"title":"Flutter SDK 설정","href":"/docs/ko/flutter-sdk-setup"},{"title":"Flutterflow SDK 설정","href":"/docs/ko/flutterflow-sdk-setup"},{"title":"Cordova SDK 설정","href":"/docs/ko/cordova-sdk-setup"},{"title":"Capacitor SDK 설정","href":"/docs/ko/capacitor-sdk-setup"},{"title":".NET MAUI SDK 설정","href":"/docs/ko/net-sdk-setup"},{"title":"Amazon SDK 설정","href":"/docs/ko/amazon-sdk-setup"},{"title":"Huawei SDK 설정","href":"/docs/ko/huawei-sdk-setup"}]},{"group":"모바일 SDK 참조","pages":[{"title":"모바일 SDK 레퍼런스","href":"/docs/ko/mobile-sdk-reference"},{"title":"Mobile Service Extensions","href":"/docs/ko/service-extensions"},{"title":"알림 트레이 관리","href":"/docs/ko/managing-the-notification-tray"},{"title":"OSNotification payload","href":"/docs/ko/osnotification-payload"},{"title":"iOS: App Clip 지원","href":"/docs/ko/app-clip-support"}]},{"group":"모바일 SDK 문제 해결","pages":[{"title":"Mobile SDK 문제 해결","href":"/docs/ko/mobile-troubleshooting"},{"title":"디버그 로그 가져오기","href":"/docs/ko/capturing-a-debug-log"}]}]},{"group":"웹 SDKs","pages":[{"group":"웹 SDK 설정","pages":[{"title":"웹 SDK 설정","href":"/docs/ko/web-sdk-setup"},{"title":"iOS 웹 푸시 설정","description":"Safari, Chrome 및 Edge 브라우저에 대한 manifest 파일 설정, 사용자 온보딩 전략 및 구현 모범 사례를 포함하여 iOS 및 iPadOS 기기에서 웹 푸시 알림을 활성화하는 완벽한 가이드입니다.","href":"/docs/ko/web-push-for-ios"},{"title":"OneSignal service worker","href":"/docs/ko/onesignal-service-worker"},{"title":"OneSignal Web SDK를 사용한 사용자 지정 코드 웹 푸시 설정","description":"사용자 지정 코드로 OneSignal 웹 푸시 알림을 설정하세요. JavaScript SDK를 추가하고, 서비스 워커를 구성하고, 사이트에서 OneSignal을 초기화하세요.","href":"/docs/ko/web-push-custom-code-setup"},{"title":"Google Tag Manager 설정","href":"/docs/ko/google-tag-manager"},{"title":"Angular 웹 SDK 설정","href":"/docs/ko/angular-setup"},{"title":"ReactJS 및 NextJS 설정","href":"/docs/ko/react-js-setup"},{"title":"Vue JS Web SDK 설정","href":"/docs/ko/vue-js-setup"}]},{"title":"웹 SDK 참조","href":"/docs/ko/web-sdk-reference"},{"group":"웹 SDK 문제 해결","pages":[{"title":"Web SDK 문제 해결","href":"/docs/ko/troubleshooting-web-push"},{"title":"캐시 지우기 및 푸시 권한 재설정","href":"/docs/ko/clearing-cache-and-resetting-push-permissions"},{"title":"웹 푸시 Webhook","href":"/docs/ko/webhooks"}]}]},{"group":"실시간 현황","pages":[{"title":"Live Activities 개발자 설정","href":"/docs/ko/live-activities-developer-setup"},{"title":"크로스 플랫폼 Live Activity SDK 설정","href":"/docs/ko/cross-platform-live-activity-setup"},{"title":"Android Live Update 알림","href":"/docs/ko/android-live-notifications"}]},{"group":"데스크탑 \u0026 워치 설정","pages":[{"title":"macOS 앱 설정","href":"/docs/ko/macos-app-setup"},{"title":"Windows 앱 설정","href":"/docs/ko/windows-app-setup"},{"title":"watchOS 및 Wear OS 지원","href":"/docs/ko/watchos-and-wear-os-support"}]}]},{"tab":"튜토리얼","pages":[{"title":"튜토리얼","href":"/docs/ko/tutorials"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/reference/rest-api-overview"}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/changelog"}]}],"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://onesignal.com/blog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/OneSignal"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@onesignalofficial/playlists"}]}},{"language":"ja","pages":[{"title":"ja","href":"/docs/ja/onesignal-service-worker"}]},{"language":"tr","pages":[{"title":"tr","href":"/docs/tr/onesignal-service-worker"}]},{"language":"pt-BR","pages":[{"title":"pt-BR","href":"/docs/pt-BR/onesignal-service-worker"}]},{"language":"es","pages":[{"title":"es","href":"/docs/es/onesignal-service-worker"}]},{"language":"fr","pages":[{"title":"fr","href":"/docs/fr/onesignal-service-worker"}]}]},"basePath":"","title":"OneSignal service worker - OneSignal Documentation","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-BXrZabKK.js","DynamicMarkdown-CtasenyM.js","zoom-image-lightbox-C5F0mVLH.js","lightbox-handle-r17bVUz3.js"]}