From de9f6473c6fe6d03d8aa84c02ffc7a1caa258c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=84=9C=EC=A0=9C=EA=B2=BD?= Date: Thu, 29 Jan 2026 21:16:55 +0900 Subject: [PATCH 1/5] =?UTF-8?q?refactor:=20=EB=9D=BC=EC=9A=B0=ED=84=B0=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20?= =?UTF-8?q?=EB=B0=8F=20lazy=20loading=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 3 +- src/layout/auth/AuthLayout.tsx | 5 +- src/layout/common/Layout.tsx | 3 - .../DefaultLayout.tsx} | 2 +- src/layout/main/MainLayout.tsx | 12 ++ src/pages/AdsCreatePage.tsx | 3 + src/pages/ads/list/AdsListPage.tsx | 3 + src/pages/ads/list/AdsManage.tsx | 3 - src/pages/ads/new/AdsCreate.tsx | 3 - src/routes/AuthRoutes.tsx | 28 ++++ src/routes/MainRoutes.tsx | 37 +++++ src/routes/Router.tsx | 41 ++++++ src/routes/UserRoutes.tsx | 18 +++ src/routes/routes.tsx | 132 ------------------ 14 files changed, 149 insertions(+), 144 deletions(-) delete mode 100644 src/layout/common/Layout.tsx rename src/layout/{common/RootLayout.tsx => default/DefaultLayout.tsx} (81%) create mode 100644 src/layout/main/MainLayout.tsx create mode 100644 src/pages/AdsCreatePage.tsx create mode 100644 src/pages/ads/list/AdsListPage.tsx delete mode 100644 src/pages/ads/list/AdsManage.tsx delete mode 100644 src/pages/ads/new/AdsCreate.tsx create mode 100644 src/routes/AuthRoutes.tsx create mode 100644 src/routes/MainRoutes.tsx create mode 100644 src/routes/Router.tsx create mode 100644 src/routes/UserRoutes.tsx delete mode 100644 src/routes/routes.tsx diff --git a/src/App.tsx b/src/App.tsx index c21968e..7658f98 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -3,7 +3,8 @@ import "./App.css"; import { RouterProvider } from "react-router-dom"; import { Toaster } from "sonner"; -import router from "./routes/routes"; +import { router } from "@/routes/Router"; + function App() { return ( diff --git a/src/layout/auth/AuthLayout.tsx b/src/layout/auth/AuthLayout.tsx index 73c2a82..4ac7881 100644 --- a/src/layout/auth/AuthLayout.tsx +++ b/src/layout/auth/AuthLayout.tsx @@ -1,3 +1,4 @@ +import { Suspense } from "react"; import { Outlet } from "react-router-dom"; import OnboardingIntro from "@/components/auth/common/OnboardingIntro"; @@ -11,7 +12,9 @@ export default function AuthLayout() {
- + Loading...
}> + +
diff --git a/src/layout/common/Layout.tsx b/src/layout/common/Layout.tsx deleted file mode 100644 index c779599..0000000 --- a/src/layout/common/Layout.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function Layout() { - return
Layout
; -} diff --git a/src/layout/common/RootLayout.tsx b/src/layout/default/DefaultLayout.tsx similarity index 81% rename from src/layout/common/RootLayout.tsx rename to src/layout/default/DefaultLayout.tsx index 85fbf4d..0267a82 100644 --- a/src/layout/common/RootLayout.tsx +++ b/src/layout/default/DefaultLayout.tsx @@ -2,7 +2,7 @@ import { Outlet } from "react-router-dom"; import ModalProvider from "@/components/modal/ModalProvider"; -export default function RootLayout() { +export default function DefaultLayout() { return ( <> diff --git a/src/layout/main/MainLayout.tsx b/src/layout/main/MainLayout.tsx new file mode 100644 index 0000000..9211bb7 --- /dev/null +++ b/src/layout/main/MainLayout.tsx @@ -0,0 +1,12 @@ +import { Suspense } from "react"; +import { Outlet } from "react-router-dom"; + +export default function MainLayout() { + return ( +
+ Loading...
}> + + + + ); +} diff --git a/src/pages/AdsCreatePage.tsx b/src/pages/AdsCreatePage.tsx new file mode 100644 index 0000000..81206c1 --- /dev/null +++ b/src/pages/AdsCreatePage.tsx @@ -0,0 +1,3 @@ +export default function AdsCreatePage() { + return
AdsCreatePage
; +} diff --git a/src/pages/ads/list/AdsListPage.tsx b/src/pages/ads/list/AdsListPage.tsx new file mode 100644 index 0000000..0474ef4 --- /dev/null +++ b/src/pages/ads/list/AdsListPage.tsx @@ -0,0 +1,3 @@ +export default function AdsListPage() { + return
AdsListPage
; +} diff --git a/src/pages/ads/list/AdsManage.tsx b/src/pages/ads/list/AdsManage.tsx deleted file mode 100644 index 3273ad3..0000000 --- a/src/pages/ads/list/AdsManage.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function AdsManage() { - return
AdsManage
; -} diff --git a/src/pages/ads/new/AdsCreate.tsx b/src/pages/ads/new/AdsCreate.tsx deleted file mode 100644 index e214ec1..0000000 --- a/src/pages/ads/new/AdsCreate.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function AdsCreate() { - return
AdsCreate
; -} diff --git a/src/routes/AuthRoutes.tsx b/src/routes/AuthRoutes.tsx new file mode 100644 index 0000000..09aa70d --- /dev/null +++ b/src/routes/AuthRoutes.tsx @@ -0,0 +1,28 @@ +import { lazy } from "react"; +import type { RouteObject } from "react-router-dom"; + +const FindEmail = lazy(() => import("@/pages/auth/FindEmail")); +const FindPw = lazy(() => import("@/pages/auth/FindPw")); +const Login = lazy(() => import("@/pages/auth/Login")); +const Signup = lazy(() => import("@/pages/auth/Signup")); + +const AuthRoutes: RouteObject[] = [ + { + path: "signup", + element: , + }, + { + path: "login", + element: , + }, + { + path: "find-email", + element: , + }, + { + path: "find-pw", + element: , + }, +]; + +export default AuthRoutes; diff --git a/src/routes/MainRoutes.tsx b/src/routes/MainRoutes.tsx new file mode 100644 index 0000000..7186bb4 --- /dev/null +++ b/src/routes/MainRoutes.tsx @@ -0,0 +1,37 @@ +import { lazy } from "react"; +import type { RouteObject } from "react-router-dom"; + +const OverviewDashboard = lazy( + () => import("@/pages/dashboard/overview/OverviewDashboard"), +); +const PlatformDashboard = lazy( + () => import("@/pages/dashboard/platform/PlatformDashboard"), +); +const Timeline = lazy(() => import("@/pages/dashboard/timeline/Timeline")); +const AdsListPage = lazy(() => import("@/pages/ads/list/AdsListPage")); +const AdsCreatePage = lazy(() => import("@/pages/AdsCreatePage")); + +const MainRoutes: RouteObject[] = [ + { + path: "/", + element: , + }, + { + path: "platform", + element: , + }, + { + path: "timeline", + element: , + }, + { + path: "ads", + element: , + }, + { + path: "ads/create", + element: , + }, +]; + +export default MainRoutes; diff --git a/src/routes/Router.tsx b/src/routes/Router.tsx new file mode 100644 index 0000000..0874dab --- /dev/null +++ b/src/routes/Router.tsx @@ -0,0 +1,41 @@ +import React from "react"; +import { createBrowserRouter, Navigate } from "react-router-dom"; + +import AuthRoutes from "./AuthRoutes"; +import MainRoutes from "./MainRoutes"; +import UserRoutes from "./UserRoutes"; + +import AuthLayout from "@/layout/auth/AuthLayout"; +import DefaultLayout from "@/layout/default/DefaultLayout"; +import MainLayout from "@/layout/main/MainLayout"; + +function AuthGuard({ children }: { children: React.ReactNode }) { + // 실제 인증 상태 확인 로직으로 대체 예정 + const isAuthenticated = false; + + if (!isAuthenticated) { + return ; + } + + return <>{children}; +} + +export const router = createBrowserRouter([ + { + element: , + children: [ + { + element: , + children: AuthRoutes, + }, + { + element: ( + + + + ), + children: [...MainRoutes, ...UserRoutes], + }, + ], + }, +]); diff --git a/src/routes/UserRoutes.tsx b/src/routes/UserRoutes.tsx new file mode 100644 index 0000000..4677d83 --- /dev/null +++ b/src/routes/UserRoutes.tsx @@ -0,0 +1,18 @@ +import { lazy } from "react"; +import type { RouteObject } from "react-router-dom"; + +const Setting = lazy(() => import("@/pages/setting/Setting")); +const Workspace = lazy(() => import("@/pages/workspace/Workspace")); + +const UserRoutes: RouteObject[] = [ + { + path: "setting", + element: , + }, + { + path: "workspace", + element: , + }, +]; + +export default UserRoutes; diff --git a/src/routes/routes.tsx b/src/routes/routes.tsx deleted file mode 100644 index b957f29..0000000 --- a/src/routes/routes.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import type { PropsWithChildren } from "react"; -import { createBrowserRouter, Navigate } from "react-router-dom"; - -import AuthLayout from "@/layout/auth/AuthLayout"; -import Layout from "@/layout/common/Layout"; -import RootLayout from "@/layout/common/RootLayout"; -import FindEmail from "@/pages/auth/FindEmail"; -import FindPw from "@/pages/auth/FindPw"; -import Login from "@/pages/auth/Login"; -import Signup from "@/pages/auth/Signup"; -import Error from "@/pages/common/Error"; -import OverviewDashboard from "@/pages/dashboard/overview/OverviewDashboard"; -import PlatformDashboard from "@/pages/dashboard/platform/PlatformDashboard"; -import Timeline from "@/pages/dashboard/timeline/Timeline"; -import Setting from "@/pages/setting/Setting"; -import Workspace from "@/pages/workspace/Workspace"; - -const checkAuth = (): boolean => { - // 실제 인증 로직으로 교체 필요합니다. - return false; -}; - -function ProtectedRoute({ children }: PropsWithChildren) { - const isLoggedIn = checkAuth(); - - if (!isLoggedIn) { - return ; - } - - return <>{children}; -} - -function PublicRoute({ children }: PropsWithChildren) { - const isLoggedIn = checkAuth(); - - if (isLoggedIn) { - return ; - } - - return <>{children}; -} - -const router = createBrowserRouter([ - { - element: , - children: [ - { - path: "/", - element: , - }, - { - path: "/auth", - element: ( - - - - ), - errorElement: , - children: [ - { - index: true, - element: , - }, - { - path: "signup", - element: , - }, - { - path: "login", - element: , - }, - { - path: "find-email", - element: , - }, - { - path: "find-pw", - element: , - }, - ], - }, - { - path: "/dashboard", - element: ( - - - - ), - errorElement: , - children: [ - { - index: true, - element: , - }, - { - path: "overview", - element: , - }, - { - path: "timeline", - element: , - }, - { - path: "platform", - element: , - }, - ], - }, - { - path: "/user", - element: ( - - - - ), - errorElement: , - children: [ - { - path: "setting", - element: , - }, - { - path: "workspace", - element: , - }, - ], - }, - ], - }, -]); - -export default router; From 6e5387f0c403f4e1b9654fe6dff4b1b81106729f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=84=9C=EC=A0=9C=EA=B2=BD?= Date: Thu, 29 Jan 2026 21:38:28 +0900 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20lint=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/App.tsx b/src/App.tsx index 7658f98..1e1a5d3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,7 +5,6 @@ import { Toaster } from "sonner"; import { router } from "@/routes/Router"; - function App() { return ( <> From de3db46c981578d81e01ab6c505a0690228a00a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=84=9C=EC=A0=9C=EA=B2=BD?= Date: Fri, 30 Jan 2026 12:19:57 +0900 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20=EB=B2=84=ED=8A=BC=20=EB=B0=8F=20?= =?UTF-8?q?=EC=97=B0=EA=B2=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/auth/findEmailStep/Step01Phone.tsx | 2 +- src/components/auth/findEmailStep/Step02Email.tsx | 4 ++-- src/components/auth/findPwStep/Step02ResetPassword.tsx | 2 +- src/components/auth/signupStep/Step03Profile.tsx | 2 +- src/pages/auth/Login.tsx | 4 ++-- src/pages/auth/Signup.tsx | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/auth/findEmailStep/Step01Phone.tsx b/src/components/auth/findEmailStep/Step01Phone.tsx index 8f14f04..63fdcbf 100644 --- a/src/components/auth/findEmailStep/Step01Phone.tsx +++ b/src/components/auth/findEmailStep/Step01Phone.tsx @@ -134,7 +134,7 @@ export default function Step01Phone({ onNext }: IStep01PhoneProps) { diff --git a/src/components/auth/findEmailStep/Step02Email.tsx b/src/components/auth/findEmailStep/Step02Email.tsx index e3d6f4f..b95c6f1 100644 --- a/src/components/auth/findEmailStep/Step02Email.tsx +++ b/src/components/auth/findEmailStep/Step02Email.tsx @@ -30,7 +30,7 @@ export default function Step02Email() { @@ -39,7 +39,7 @@ export default function Step02Email() {