diff --git a/.env.example b/.env.example index a694bed..c7255dd 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,6 @@ VITE_API_URL=https://api.example.com -VITE_KAKAO_JS_KEY= \ No newline at end of file +VITE_KAKAO_JS_KEY= + +VITE_GOOGLE_CLIENT_ID= + diff --git a/index.html b/index.html index 65da26e..46715f6 100644 --- a/index.html +++ b/index.html @@ -14,6 +14,7 @@ content="자리 자체를 예약하는 새로운 식문화 플랫폼 웹 애플리케이션 서비스" /> +
diff --git a/package.json b/package.json index c421afd..25a70d2 100644 --- a/package.json +++ b/package.json @@ -18,11 +18,13 @@ "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-separator": "^1.1.8", "@radix-ui/react-slot": "^1.2.4", + "@react-oauth/google": "^0.13.4", "@tanstack/react-query": "^5.90.16", "axios": "^1.13.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "date-fns": "^4.1.0", + "immer": "^11.1.3", "lucide-react": "^0.562.0", "react": "^19.2.0", "react-day-picker": "^9.13.0", @@ -30,7 +32,8 @@ "react-hook-form": "^7.69.0", "react-router-dom": "^7.11.0", "tailwind-merge": "^3.4.0", - "zod": "^4.3.4" + "zod": "^4.3.4", + "zustand": "^5.0.11" }, "devDependencies": { "@eslint/js": "^9.39.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 96f27f6..7837c20 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: '@radix-ui/react-slot': specifier: ^1.2.4 version: 1.2.4(@types/react@19.2.7)(react@19.2.3) + '@react-oauth/google': + specifier: ^0.13.4 + version: 0.13.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@tanstack/react-query': specifier: ^5.90.16 version: 5.90.16(react@19.2.3) @@ -44,6 +47,9 @@ importers: date-fns: specifier: ^4.1.0 version: 4.1.0 + immer: + specifier: ^11.1.3 + version: 11.1.3 lucide-react: specifier: ^0.562.0 version: 0.562.0(react@19.2.3) @@ -68,6 +74,9 @@ importers: zod: specifier: ^4.3.4 version: 4.3.4 + zustand: + specifier: ^5.0.11 + version: 5.0.11(@types/react@19.2.7)(immer@11.1.3)(react@19.2.3) devDependencies: '@eslint/js': specifier: ^9.39.1 @@ -766,6 +775,12 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@react-oauth/google@0.13.4': + resolution: {integrity: sha512-hGKyNEH+/PK8M0sFEuo3MAEk0txtHpgs94tDQit+s2LXg7b6z53NtzHfqDvoB2X8O6lGB+FRg80hY//X6hfD+w==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + '@rolldown/pluginutils@1.0.0-beta.53': resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} @@ -1445,6 +1460,9 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} + immer@11.1.3: + resolution: {integrity: sha512-6jQTc5z0KJFtr1UgFpIL3N9XSC3saRaI9PwWtzM2pSqkNGtiNkYY2OSwkOGDK2XcTRcLb1pi/aNkKZz0nxVH4Q==} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -1936,6 +1954,24 @@ packages: zod@4.3.4: resolution: {integrity: sha512-Zw/uYiiyF6pUT1qmKbZziChgNPRu+ZRneAsMUDU6IwmXdWt5JwcUfy2bvLOCUtz5UniaN/Zx5aFttZYbYc7O/A==} + zustand@5.0.11: + resolution: {integrity: sha512-fdZY+dk7zn/vbWNCYmzZULHRrss0jx5pPFiOuMZ/5HJN6Yv3u+1Wswy/4MpZEkEGhtNH+pwxZB8OKgUBPzYAGg==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + snapshots: '@babel/code-frame@7.27.1': @@ -2495,6 +2531,11 @@ snapshots: '@radix-ui/rect@1.1.1': {} + '@react-oauth/google@0.13.4(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + '@rolldown/pluginutils@1.0.0-beta.53': {} '@rollup/rollup-android-arm-eabi@4.54.0': @@ -3158,6 +3199,8 @@ snapshots: ignore@7.0.5: {} + immer@11.1.3: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -3547,3 +3590,9 @@ snapshots: zod: 4.3.4 zod@4.3.4: {} + + zustand@5.0.11(@types/react@19.2.7)(immer@11.1.3)(react@19.2.3): + optionalDependencies: + '@types/react': 19.2.7 + immer: 11.1.3 + react: 19.2.3 diff --git a/src/App.tsx b/src/App.tsx index 5fd941b..0141ad9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -19,11 +19,11 @@ import SubscriptionPage from "./pages/myPage/subscriptionPage"; import ReservationPage from "./pages/myPage/reservationPage"; import StorePage from "./pages/myPage/storePage"; import OwnerPage from "./pages/ownerPage"; +import { useEffect } from "react"; const routes: RouteObject[] = [ { - //TODO: 로그아웃처리 필요 - element: