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()],