본문 바로가기

IT/기타

서비스 워커(Service Worker)

반응형

서비스 워커(Service Worker)는 웹 애플리케이션의 백그라운드 스크립트로, 브라우저와 네트워크 요청을 가로채거나 캐싱하여 오프라인 경험을 개선하고, 푸시 알림, 백그라운드 동기화 등의 기능을 제공하는 웹 API입니다.


서비스 워커의 특징

• JavaScript 기반의 독립 실행 프로세스
• 브라우저와 웹 애플리케이션 사이에서 프록시(Proxy) 역할 수행.
• 네트워크 요청을 가로채 캐싱, 수정, 응답 가능.
• 웹 애플리케이션을 오프라인 환경에서도 동작하게 지원.
• 보안 강화를 위해 HTTPS 환경에서만 동작.

서비스 워커 주요 기능

• 캐싱 관리(Cache Management) : Cache API로 리소스 캐싱 → 오프라인 접근성 제공
• 푸시 알림(Push Notification) : 웹 푸시 API와 연동 → 실시간 알림 제공
• 백그라운드 동기화(Background Sync) : 네트워크 복구 시 자동 데이터 동기화
• 프로그레시브 웹 앱(PWA)의 핵심 기술로 활용


서비스 워커의 구현 기술

서비스 워커는 JavaScript 기반의 웹 API를 통해 구현
• ES6 표준 JavaScript 및 웹 API 사용
• Cache API, Fetch API, Push API와 함께 작동
• HTTPS 프로토콜 환경에서만 서비스 워커 등록 가능(로컬 테스트는 localhost 허용)
1) 서비스 워커 등록(Register)
• 웹 애플리케이션에 서비스 워커 파일을 등록
• 메인 스레드(UI 스레드)에서 등록 코드 작성

코드 예제:

// service-worker.js 등록
if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/service-worker.js')
    .then((registration) => {
        console.log('✅ Service Worker 등록 성공:', registration);
    }).catch((error) => {
        console.error('❌ Service Worker 등록 실패:', error);
    });
}

 

2) 캐싱 및 오프라인 지원(Cache API)
• Cache API로 자원(HTML, CSS, JS, 이미지)을 캐싱
• 네트워크 연결 없이도 웹 애플리케이션 실행 가능

코드 예제: (service-worker.js)

// 설치 및 캐싱
const CACHE_NAME = 'my-cache-v1';
const CACHE_URLS = [
    '/',
    '/index.html',
    '/styles.css',
    '/app.js',
    '/offline.html'
];

self.addEventListener('install', (event) => {
    event.waitUntil(
        caches.open(CACHE_NAME).then((cache) => {
            return cache.addAll(CACHE_URLS);
        })
    );
    console.log('✅ Service Worker 설치 완료');
});

// 네트워크 요청 가로채기(fetch 이벤트)
self.addEventListener('fetch', (event) => {
    event.respondWith(
        caches.match(event.request).then((response) => {
            return response || fetch(event.request);
        }).catch(() => caches.match('/offline.html'))
    );
});


3) 푸시 알림(Push API)
• 브라우저 푸시 서비스를 통해 알림 메시지 전송
• 웹 푸시 서비스 서버와 서비스 워커가 비동기 통신

코드 예제:

// 푸시 알림 이벤트
self.addEventListener('push', (event) => {
    const data = event.data.json();
    self.registration.showNotification(data.title, {
        body: data.body,
        icon: '/icon.png'
    });
});

 

4) 백그라운드 동기화(Background Sync)
• 네트워크 연결이 끊긴 상태에서도 작업을 예약하여, 네트워크 복구 시 데이터 전송

코드 예제:

// 백그라운드 동기화 이벤트
self.addEventListener('sync', (event) => {
    if (event.tag === 'sync-data') {
        event.waitUntil(sendDataToServer());
    }
});

// 데이터 전송 함수
function sendDataToServer() {
    return fetch('/api/sync', {
        method: 'POST',
        body: JSON.stringify({message: '백그라운드 동기화 메시지'}),
        headers: {'Content-Type': 'application/json'}
    });
}


서비스 워커의 수명 주기(Lifecycle)


서비스 워커는 다음 5단계 수명 주기를 거칩니다
1. 등록(Register) : navigator.serviceWorker.register() 서비스 워커를 등록하여 브라우저에 제어 권한 부여.
2. 설치(Install) :  install 이벤트 자원 캐싱(Cache API) 수행 및 초기 설정.
3. 활성화(Activate) :  activate 이벤트 이전 캐시 정리 및 새 캐시 활성화.
4. 대기(Idle) :  대기 상태 이벤트가 없을 때 유휴 상태(Idle) 유지.
5. 종료(Terminate) :  자동 종료 리소스 절약을 위해 필요 시 자동 종료.



서비스 워커의 활용 분야

1) 오프라인 웹 애플리케이션(Offline Web App)
• 네트워크 연결 없이도 웹 애플리케이션 사용 가능.
• Cache API로 중요 리소스 캐싱.

사례 :
• 구글 독스(Google Docs): 오프라인 문서 편집 기능.
• 트위터 라이트(Twitter Lite): 네트워크 불안정 환경에서도 원활한 서비스 제공.

2) 프로그레시브 웹 앱(PWA)
• 서비스 워커는 PWA의 핵심 기술.
• 앱과 유사한 경험을 제공하며, 푸시 알림, 오프라인 기능 지원.
 사례 : 스타벅스 웹앱: 모바일 웹앱을 PWA로 변환하여 오프라인 주문 기능 구현.

3) 웹 푸시 알림(Web Push Notification)
• 서비스 워커와 Push API를 이용하여 브라우저 기반 푸시 알림 제공.
 사례 : 페이스북, 유튜브: 서비스 워커로 알림 수신 및 표시.

4) 백그라운드 동기화(Background Sync)
• 네트워크 연결이 끊어졌을 때 작업을 예약하여, 연결 복구 시 작업 완료.
 사례 : 인스타그램 : 사진 업로드 중 연결 끊김 시 → 연결 복구 후 업로드 완료.

5) 성능 개선 및 트래픽 최적화(Performance Optimization)
• 리소스 캐싱으로 로드 시간 단축 및 서버 부하 감소.
 사례 : BBC 웹사이트 : 서비스 워커 적용 후 페이지 로딩 속도 30% 개선



서비스 워커의 장단점


장점
1. 오프라인 지원 : Cache API로 네트워크 불안정 환경에서도 웹 서비스 제공.
2. PWA 구현 필수 요소 : 네이티브 앱 경험을 제공.
3. 백그라운드 기능 지원 : 푸시 알림 및 백그라운드 동기화 가능.
4. 성능 개선 : 리소스 캐싱으로 로딩 속도 및 사용자 경험(UX) 개선.

단점 
1. HTTPS 환경 필수 : 보안 강제 적용 → 로컬 환경에서는 localhost만 허용.
2. 복잡한 캐싱 관리 : 캐시 정책 및 버전 관리가 복잡할 수 있음.
3. 브라우저 지원 제한 : 일부 브라우저는 서비스 워커 API 일부 기능을 완벽히 지원하지 않음.
4. 백그라운드 프로세스 제약 : 브라우저 정책에 따라 백그라운드 작업 종료 가능성

반응형

'IT > 기타' 카테고리의 다른 글

가상 메모리와 상주 메모리  (0) 2025.02.20
융합형 IT 아웃소싱  (2) 2025.02.20
FIDO(Fast Identity Online)  (1) 2025.02.19
NPU(Neural Processing Unit, 신경망 처리 장치)  (2) 2025.02.19
오픈 플랫폼(Open Platform)  (6) 2025.02.18