diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..526b5163 --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +VITE_API_URL=https://api.example.com \ No newline at end of file diff --git a/.gitignore b/.gitignore index a547bf36..ba835be4 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,10 @@ dist dist-ssr *.local +# env +.env +!.env.example + # Editor directories and files .vscode/* !.vscode/extensions.json diff --git a/README.md b/README.md index df5484b2..a3dd6f7c 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,11 @@ 10. React 기반 중고 마켓 페이지 구현 +### 09.28 + +11. 제품 등록 페이지 구현 +12. express, mongo 기반 백엔드와 연결 구현 + ## 기술 스택 ### 지금까지 사용 된 스택 diff --git a/package.json b/package.json index 512d4f62..5466614c 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "dependencies": { "clsx": "^2.1.1", "react": "^19.1.1", - "react-dom": "^19.1.1" + "react-dom": "^19.1.1", + "react-router": "^7.9.1" }, "devDependencies": { "@eslint/js": "^9.33.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 07abb125..10a9bd0a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: react-dom: specifier: ^19.1.1 version: 19.1.1(react@19.1.1) + react-router: + specifier: ^7.9.1 + version: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) devDependencies: '@eslint/js': specifier: ^9.33.0 @@ -556,6 +559,10 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -837,6 +844,16 @@ packages: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} + react-router@7.9.1: + resolution: {integrity: sha512-pfAByjcTpX55mqSDGwGnY9vDCpxqBLASg0BMNAuMmpSGESo/TaOUG6BllhAtAkCGx8Rnohik/XtaqiYUJtgW2g==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + react@19.1.1: resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} engines: {node: '>=0.10.0'} @@ -857,6 +874,9 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -1380,6 +1400,8 @@ snapshots: convert-source-map@2.0.0: {} + cookie@1.0.2: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -1655,6 +1677,14 @@ snapshots: react-refresh@0.17.0: {} + react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + dependencies: + cookie: 1.0.2 + react: 19.1.1 + set-cookie-parser: 2.7.1 + optionalDependencies: + react-dom: 19.1.1(react@19.1.1) + react@19.1.1: {} resolve-from@4.0.0: {} @@ -1690,6 +1720,8 @@ snapshots: semver@6.3.1: {} + set-cookie-parser@2.7.1: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 diff --git a/src/App.jsx b/src/App.jsx index 28b5b850..f98be659 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,19 +1,21 @@ -import { BestItemsSection } from './pages/ItemPage/BestItemsSection'; -import { SalesItemsSection } from './pages/ItemPage/SalesItemsSection'; -import { ItemProvider } from './providers/ItemProvider'; +import { Routes, Route } from 'react-router'; import { Header } from '@/components/Header'; import { Footer } from '@/components/Footer'; +import { LandingPage } from './pages/LandingPage'; +import { ItemsPage } from './pages/ItemsPage'; +import { RegistItemPage } from './pages/RegistItemPage'; function App() { return ( - + <>
-
- - -
+ + } /> + } /> + } /> +