diff --git a/src/utils/networkUtils.ts b/src/utils/networkUtils.ts index a546125..5e450fb 100644 --- a/src/utils/networkUtils.ts +++ b/src/utils/networkUtils.ts @@ -43,23 +43,34 @@ interface ExtendedWindow extends Window { __networkHandlers?: NetworkEventHandlers; } +// 메모리에 네트워크 상태 저장 +let networkStatus: NetworkStatus | null = null; + /** - * 현재 네트워크 상태 확인 + * 현재 네트워크 상태 확인 (개선 버전) */ export const checkNetworkStatus = async (): Promise => { try { - // 간단한 네트워크 연결 테스트 + // 더 빠른 타임아웃 설정 (2초) const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), 5000); // 5초 타임아웃 + const timeoutId = setTimeout(() => controller.abort(), 2000); - const response = await fetch('https://www.google.com', { - method: 'HEAD', - signal: controller.signal - }); + // 여러 엔드포인트로 확인하여 신뢰성 향상 + const endpoints = [ + 'https://www.google.com', + 'https://www.cloudflare.com', + 'https://www.apple.com' + ]; + + // 첫 번째 성공 응답 시 온라인으로 판단 + const isOnline = await Promise.any( + endpoints.map(url => + fetch(url, { method: 'HEAD', signal: controller.signal }) + .then(res => res.ok) + ) + ); clearTimeout(timeoutId); - - const isOnline = response.ok; setNetworkStatus(isOnline ? 'online' : 'offline'); return isOnline; } catch (error) { @@ -70,30 +81,22 @@ export const checkNetworkStatus = async (): Promise => { }; /** - * 네트워크 상태 저장 + * 네트워크 상태 저장 (메모리 기반) */ export const setNetworkStatus = (status: NetworkStatus): void => { - try { - localStorage.setItem(NETWORK_STATUS_KEY, status); - // 상태 변경 이벤트 발생 - window.dispatchEvent(new CustomEvent('networkStatusChange', { detail: status })); - console.log(`[네트워크] 상태 변경: ${status}`); - } catch (error) { - console.error('[네트워크] 상태 저장 실패:', error); - } + // 메모리에 상태 저장 + networkStatus = status; + + // 상태 변경 이벤트 발생 + window.dispatchEvent(new CustomEvent('networkStatusChange', { detail: status })); + console.log(`[네트워크] 상태 변경: ${status}`); }; /** - * 저장된 네트워크 상태 가져오기 + * 네트워크 상태 가져오기 (메모리 기반) */ export const getNetworkStatus = (): NetworkStatus => { - try { - const status = localStorage.getItem(NETWORK_STATUS_KEY) as NetworkStatus; - return status || 'online'; // 기본값은 온라인으로 설정 - } catch (error) { - console.error('[네트워크] 상태 조회 실패:', error); - return 'online'; // 오류 시 기본값 - } + return networkStatus || 'online'; }; /**