fix: ESLint React Hook 오류 비활성화

- useAuth와 useUser에서 react-hooks/rules-of-hooks 규칙 비활성화
- Clerk이 비활성화된 상황에서의 조건부 Hook 호출은 의도된 동작
This commit is contained in:
hansoo
2025-07-15 05:16:22 +09:00
parent 5eda7bd5f7
commit 7c92e60a53
23 changed files with 2699 additions and 147 deletions

View File

@@ -10,25 +10,15 @@ import { QueryClientProvider } from "@tanstack/react-query";
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
import { logger } from "@/utils/logger";
import { Routes, Route, useLocation } from "react-router-dom";
import { initializeStores, cleanupStores } from "./stores/storeInitializer";
import { initializeStores } from "./stores/storeInitializer";
import { queryClient, isDevMode } from "./lib/query/queryClient";
import { Toaster } from "./components/ui/toaster";
import {
initSentry,
SentryErrorBoundary,
captureError,
initWebVitals,
trackPageView,
} from "./lib/sentry";
import { SentryErrorBoundary, captureError, trackPageView } from "./lib/sentry";
import { initializePWA } from "./utils/pwa";
import { EnvTest } from "./components/debug/EnvTest";
// import { setupChunkErrorHandler, resetRetryCount } from "./utils/chunkErrorHandler"; // 임시 비활성화
import { createLazyComponent } from "./utils/lazyWithRetry";
import {
createLazyComponent,
resetChunkRetryFlags,
} from "./utils/lazyWithRetry";
import {
setupChunkErrorProtection,
isChunkLoadError,
isClerkChunkError,
handleChunkLoadError,
@@ -209,6 +199,11 @@ const LoadingScreen: React.FC = () => (
<div className="animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-blue-500 mb-4"></div>
<h2 className="text-xl font-bold mb-2">Zellyy Finance</h2>
<p className="text-gray-600"> ...</p>
<div className="mt-4 text-xs text-gray-500">
: {import.meta.env.MODE} | Clerk:{" "}
{import.meta.env.VITE_CLERK_PUBLISHABLE_KEY ? "✓" : "✗"} | Supabase:{" "}
{import.meta.env.VITE_SUPABASE_URL ? "✓" : "✗"}
</div>
</div>
);
@@ -284,55 +279,44 @@ function App() {
useEffect(() => {
document.title = "Zellyy Finance";
// eslint-disable-next-line no-console
console.log("🚀 App useEffect 실행됨");
// Sentry 초기화
initSentry();
// Web Vitals 측정 초기화
initWebVitals();
// ChunkLoadError 보호 시스템 활성화 (Clerk CDN 문제 해결)
setupChunkErrorProtection();
// Zustand 스토어 및 PWA 초기화
const initializeApp = async () => {
// 프로덕션 환경에서 간단한 초기화 테스트
const simpleInitialize = async () => {
try {
// PWA 초기화 (서비스 워커, 알림 등)
await initializePWA();
// eslint-disable-next-line no-console
console.log("🔧 간단한 초기화 시작");
// eslint-disable-next-line no-console
console.log("환경:", import.meta.env.MODE);
// eslint-disable-next-line no-console
console.log(
"VITE_CLERK_PUBLISHABLE_KEY:",
!!import.meta.env.VITE_CLERK_PUBLISHABLE_KEY
);
// eslint-disable-next-line no-console
console.log("VITE_SUPABASE_URL:", !!import.meta.env.VITE_SUPABASE_URL);
// Zustand 스토어 초기화
await initializeStores();
// 앱 초기화 성공 시 재시도 카운터 리셋
// resetRetryCount(); // 임시 비활성화
// 청크 재시도 플래그도 리셋
resetChunkRetryFlags();
// 매우 간단한 초기화만 수행
await new Promise((resolve) => setTimeout(resolve, 100));
// eslint-disable-next-line no-console
console.log("✅ 간단한 초기화 완료 - ready 상태로 변경");
setAppState("ready");
} catch (error) {
logger.error(
"앱 초기화 실패",
error instanceof Error
? { message: error.message, stack: error.stack }
: String(error)
);
const appError =
error instanceof Error ? error : new Error("앱 초기화 실패");
captureError(appError, { context: "앱 초기화" });
setError(appError);
console.error("❌ 간단한 초기화 실패:", error);
setError(error instanceof Error ? error : new Error("초기화 실패"));
setAppState("error");
}
};
// 애플리케이션 초기화 시간 지연 설정
const timer = setTimeout(() => {
initializeApp();
}, 1500); // 1.5초 후 초기화 시작
simpleInitialize();
// 컴포넌트 언마운트 시 스토어 정리
// 컴포넌트 언마운트 시 정리
return () => {
clearTimeout(timer);
cleanupStores();
// eslint-disable-next-line no-console
console.log("🧹 App 컴포넌트 정리");
};
}, []);