Promise를 사용한 웹 앱의 오프라인 모드 처리 방법

웹 앱은 오프라인 환경에서도 작동할 수 있도록 처리해야 합니다. 이를 위해 Promise를 사용하여 오프라인 모드에서 웹 앱의 동작을 제어할 수 있습니다.

1. 오프라인 상태 확인

웹 앱의 오프라인 상태를 확인하기 위해 navigator.onLine 속성을 사용할 수 있습니다. 이 속성은 브라우저가 현재 온라인인지 오프라인인지를 나타냅니다.

if (navigator.onLine) {
    // 온라인 상태 처리
} else {
    // 오프라인 상태 처리
}

2. Promise를 사용한 네트워크 요청 처리

오프라인 상태에서 네트워크 요청을 처리하기 위해 Promise를 사용할 수 있습니다. Promise는 비동기적인 작업을 처리하는데 도움을 주는 자바스크립트 객체입니다.

function makeRequest(url) {
    return new Promise(function(resolve, reject) {
        if (navigator.onLine) {
            // 온라인 상태에서 네트워크 요청 처리
            fetch(url)
                .then(function(response) {
                    resolve(response);
                })
                .catch(function(error) {
                    reject(error);
                });
        } else {
            // 오프라인 상태에서 네트워크 요청 처리
            reject(new Error('오프라인 상태입니다.'));
        }
    });
}

// 사용 예시
makeRequest('https://api.example.com/data')
    .then(function(response) {
        // 요청 성공시 처리
        console.log(response);
    })
    .catch(function(error) {
        // 요청 실패시 처리
        console.error(error);
    });

위 코드에서 makeRequest() 함수는 fetch()를 사용하여 네트워크 요청을 처리합니다. 온라인 상태에서는 네트워크 요청이 정상적으로 처리되고, 오프라인 상태에서는 Promise가 에러를 반환합니다.

3. Service Worker를 사용한 오프라인 캐싱

더 나아가, Service Worker를 사용하여 웹 앱의 리소스를 오프라인 상태에서도 캐싱할 수 있습니다. Service Worker는 백그라운드에서 실행되는 스크립트로서, 네트워크 요청을 가로채고 캐시된 리소스를 반환하는 역할을 수행합니다.

```javascript // Service Worker 등록 if (‘serviceWorker’ in navigator) { navigator.serviceWorker.register(‘/service-worker.js’) .then(function(registration) { console.log(‘Service Worker 등록 성공:’, registration); }) .catch(function(error) { console.err