diff --git a/web-app/README.md b/web-app/README.md
index c476cee..28758a4 100644
--- a/web-app/README.md
+++ b/web-app/README.md
@@ -49,10 +49,39 @@ web-app/
│ ├── app.css # Tailwind 글로벌 스타일
│ ├── routes.ts # 라우트 정의
│ ├── routes/
-│ │ ├── home.tsx # 메인 페이지 (/)
-│ │ ├── users.tsx # 유저 목록 (/users)
-│ │ └── catch-all.tsx # 404 처리
-│ └── welcome/ # Welcome 컴포넌트
+│ │ ├── catch-all.tsx # 404 처리
+│ │ ├── code/
+│ │ │ └── page.tsx # 공통코드 관리
+│ │ ├── hyper-parameter/
+│ │ │ └── page.tsx # 하이퍼파라미터 설정
+│ │ ├── imagery/
+│ │ │ ├── page.tsx # 영상 목록
+│ │ │ └── [id]/
+│ │ │ └── page.tsx # 영상 상세
+│ │ ├── inference/
+│ │ │ ├── page.tsx # 추론 목록
+│ │ │ └── [id]/
+│ │ │ └── page.tsx # 추론 상세
+│ │ ├── labeling/
+│ │ │ ├── label/
+│ │ │ │ └── page.tsx # 라벨링 작업
+│ │ │ └── review/
+│ │ │ └── page.tsx # 라벨링 검수
+│ │ ├── model/
+│ │ │ ├── page.tsx # 모델 목록
+│ │ │ └── [id]/
+│ │ │ └── page.tsx # 모델 상세
+│ │ ├── log/
+│ │ │ ├── audit/
+│ │ │ │ └── page.tsx # 감사 로그
+│ │ │ └── system/
+│ │ │ └── page.tsx # 시스템 로그
+│ │ ├── login/
+│ │ │ └── page.tsx # 로그인
+│ │ ├── schedule/
+│ │ │ └── page.tsx # 스케줄 관리
+│ │ └── user/
+│ │ └── page.tsx # 사용자 관리
├── public/ # 정적 파일
├── Dockerfile # 프로덕션 빌드 (multi-stage)
├── docker-compose.yml # 개발 환경
diff --git a/web-app/app/routes.ts b/web-app/app/routes.ts
index 20c8899..396d5b1 100644
--- a/web-app/app/routes.ts
+++ b/web-app/app/routes.ts
@@ -1,9 +1,39 @@
import type { RouteConfig } from '@react-router/dev/routes';
-import { index, route } from '@react-router/dev/routes';
+import { index, route, layout, prefix } from '@react-router/dev/routes';
export default [
- index('routes/home.tsx'),
- route('users', './routes/users.tsx'),
+ layout('./routes/login/layout.tsx', [
+ route('login', './routes/login/page.tsx'),
+ ]),
+ layout('./routes/layout.tsx', [
+ ...prefix('imagery', [
+ index('./routes/imagery/page.tsx'),
+ route(':imageryId', './routes/imagery/[id]/page.tsx'),
+ ]),
+ ...prefix('inference', [
+ index('./routes/inference/page.tsx'),
+ route(':inferenceId', './routes/inference/[id]/page.tsx'),
+ ]),
+ ...prefix('model', [
+ index('./routes/model/page.tsx'),
+ route(':modelId', './routes/model/[id]/page.tsx'),
+ ]),
+ ...prefix('labeling', [
+ route('label', './routes/labeling/label/page.tsx'),
+ route('review', './routes/labeling/review/page.tsx'),
+ ]),
+ ...prefix('log', [
+ route('audit', './routes/log/audit/page.tsx'),
+ route('system', './routes/log/system/page.tsx'),
+ ]),
+ ...prefix('schedule', [
+ index('./routes/schedule/page.tsx'),
+ ]),
+ route('code', './routes/code/page.tsx'),
+ route('hyper-parameter', './routes/hyper-parameter/page.tsx'),
+ route('user', './routes/user/page.tsx'),
+ ]),
+
route('*', './routes/catch-all.tsx'),
] satisfies RouteConfig;
diff --git a/web-app/app/routes/code/page.tsx b/web-app/app/routes/code/page.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/web-app/app/routes/home.tsx b/web-app/app/routes/home.tsx
deleted file mode 100644
index 5d6f1d4..0000000
--- a/web-app/app/routes/home.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-export default function Home() {
- return (
-
- Home
-
- );
-}
diff --git a/web-app/app/routes/hyper-parameter/page.tsx b/web-app/app/routes/hyper-parameter/page.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/web-app/app/routes/imagery/[id]/page.tsx b/web-app/app/routes/imagery/[id]/page.tsx
new file mode 100644
index 0000000..61cbfb6
--- /dev/null
+++ b/web-app/app/routes/imagery/[id]/page.tsx
@@ -0,0 +1,9 @@
+import type { Route } from './+types/page';
+
+export default function Page({ params }: Route.ComponentProps) {
+ return (
+
+ 영상 상세 id: {params.imageryId}
+
+ );
+}
diff --git a/web-app/app/routes/imagery/page.tsx b/web-app/app/routes/imagery/page.tsx
new file mode 100644
index 0000000..a75cde4
--- /dev/null
+++ b/web-app/app/routes/imagery/page.tsx
@@ -0,0 +1,5 @@
+export default function Page() {
+ return (
+ 영상관리 목록
+ );
+}
diff --git a/web-app/app/routes/inference/[id]/page.tsx b/web-app/app/routes/inference/[id]/page.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/web-app/app/routes/inference/page.tsx b/web-app/app/routes/inference/page.tsx
new file mode 100644
index 0000000..532c4c7
--- /dev/null
+++ b/web-app/app/routes/inference/page.tsx
@@ -0,0 +1,7 @@
+export default function Page() {
+ return (
+
+ 추론목록
+
+ )
+}
diff --git a/web-app/app/routes/labeling/label/page.tsx b/web-app/app/routes/labeling/label/page.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/web-app/app/routes/labeling/review/page.tsx b/web-app/app/routes/labeling/review/page.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/web-app/app/routes/layout.tsx b/web-app/app/routes/layout.tsx
new file mode 100644
index 0000000..7b69e96
--- /dev/null
+++ b/web-app/app/routes/layout.tsx
@@ -0,0 +1,10 @@
+import { Outlet } from 'react-router';
+
+export default function Layout() {
+ return (
+
+ 기본 레이아웃
+
+
+ );
+}
diff --git a/web-app/app/routes/log/audit/page.tsx b/web-app/app/routes/log/audit/page.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/web-app/app/routes/log/system/page.tsx b/web-app/app/routes/log/system/page.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/web-app/app/routes/login/layout.tsx b/web-app/app/routes/login/layout.tsx
new file mode 100644
index 0000000..24ad475
--- /dev/null
+++ b/web-app/app/routes/login/layout.tsx
@@ -0,0 +1,10 @@
+import { Outlet } from 'react-router';
+
+export default function Layout() {
+ return (
+
+ 인증 레이아웃
+
+
+ );
+}
diff --git a/web-app/app/routes/login/page.tsx b/web-app/app/routes/login/page.tsx
new file mode 100644
index 0000000..1391dd7
--- /dev/null
+++ b/web-app/app/routes/login/page.tsx
@@ -0,0 +1,5 @@
+export default function Page() {
+ return (
+ 로그인 페이지
+ );
+}
diff --git a/web-app/app/routes/model/[id]/page.tsx b/web-app/app/routes/model/[id]/page.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/web-app/app/routes/model/page.tsx b/web-app/app/routes/model/page.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/web-app/app/routes/schedule/page.tsx b/web-app/app/routes/schedule/page.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/web-app/app/routes/user/page.tsx b/web-app/app/routes/user/page.tsx
new file mode 100644
index 0000000..a9a50f1
--- /dev/null
+++ b/web-app/app/routes/user/page.tsx
@@ -0,0 +1,5 @@
+export default function Page() {
+ return (
+ 사용자관리
+ );
+}
diff --git a/web-app/app/routes/users.tsx b/web-app/app/routes/users.tsx
deleted file mode 100644
index 9e1c862..0000000
--- a/web-app/app/routes/users.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-export default function Users() {
- return (
-
- 유저목록
-
- );
-}
diff --git a/web-app/eslint.config.js b/web-app/eslint.config.js
index 4abdf38..069448c 100644
--- a/web-app/eslint.config.js
+++ b/web-app/eslint.config.js
@@ -18,4 +18,9 @@ export default tseslint.config(
arrowParens: true,
}),
reactHooks.configs.flat.recommended,
+ {
+ rules: {
+ '@stylistic/jsx-one-expression-per-line': 'off',
+ },
+ },
);
diff --git a/web-app/vite.config.ts b/web-app/vite.config.ts
index 7a686e1..0c8ea01 100644
--- a/web-app/vite.config.ts
+++ b/web-app/vite.config.ts
@@ -1,6 +1,6 @@
-import { reactRouter } from "@react-router/dev/vite";
-import tailwindcss from "@tailwindcss/vite";
-import { defineConfig } from "vite";
+import { reactRouter } from '@react-router/dev/vite';
+import tailwindcss from '@tailwindcss/vite';
+import { defineConfig } from 'vite';
export default defineConfig({
plugins: [tailwindcss(), reactRouter()],