๋ณธ ๋ฌธ์๋ ์คํ ๊ฐ์ด๋ ๋ฌธ์์
๋๋ค.
์น ๊ธฐ๋ฐ ์ฃผ๊ฐ/ํฌํธํด๋ฆฌ์ค ์ฑ์ React ํ๋ก ํธ์๋์
๋๋ค. Vite๋ก ๋น๋ํ๊ณ Vercel์ ๋ฐฐํฌํ๋ฉฐ, Render์ FastAPI ๋ฐฑ์๋์ `/api/*` ํ๋ก์๋ก ์ฐ๋ํฉ๋๋ค.
- React 18 + Vite ๊ธฐ๋ฐ ๋น ๋ฅธ ๊ฐ๋ฐ ํ๊ฒฝ
- React Router v6 ๋ผ์ฐํ
- TanStack Query๋ก ์๋ฒ ์ํ ๊ด๋ฆฌ (Devtools ํฌํจ)
- Recharts๋ก ์ฐจํธ ์๊ฐํ
- React-Select, React-Toastify, Day.js, Framer Motion ํ์ฉ
- Vercel
rewrites๋ก/api/*โ Render FastAPI ํ๋ก์ - SPA ๋ผ์ฐํ
์ ์ํ
index.htmlrewrite
- UI: React, Framer Motion, React-Icons
- ์ํ/๋ฐ์ดํฐ: @tanstack/react-query, react-query-devtools
- ์ฐจํธ/์ปดํฌ๋ํธ: Recharts, React-Select, React-Toastify
- ์ ํธ: Day.js
- ๋ฒ๋ค/๊ฐ๋ฐ์๋ฒ: Vite
- ๋ฐฐํฌ: Vercel (GitHub ์ฐ๊ฒฐ)
- Node.js โฅ 18 (LTS ๊ถ์ฅ)
- npm โฅ 9
frontend/
โโ src/
โ โโ api/ # fetch ์ ํธ/์๋ํฌ์ธํธ
โ โโ components/ # ์ฌ์ฌ์ฉ UI ์ปดํฌ๋ํธ
โ โโ style/ # React Bits์คํ์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โ โโ assets/ # ๋ก๊ณ , staticํ์ผ
โ โโ context/ # ์ ์ญ์ํ๊ด๋ฆฌ(ํ ํฐ๊ด๋ฆฌ)
โ โโ hooks/ # ์ปค์คํ
ํ
(React Query ๋ฑ)
โ โโ pages/ # ๋ผ์ฐํธ ํ์ด์ง
โ โโ util/ # ๊ณต์ฉ ์ ํธ
โ โโ apiBase.ts # apiํ๋ก์
โ โโ App.jsx
โ โโ main.jsx
โโ index.html
โโ package.json
โโ vercel.json # ํ๋ก์/SPA ๋ผ์ฐํ
์ค์
โโ vite.config.js
โโ postcss.config.js
โโ tailwind.config.js
ํ๋ก ํธ์๋์์๋ ํญ์ ์๋ ๊ฒฝ๋ก๋ก ํธ์ถํฉ๋๋ค.
const res = await fetch('/api/stock');
vercel.json์์ render๋ฐฑ์๋๋ก ํ๋ก์ํฉ๋๋ค.
{
"rewrites": [
{
"source": "/api/(.*)",
"destination": "https://windmill-be-5qid.onrender.com/$1"
},
{
"source": "/(.*)",
"destination": "/index.html"
}
]
}-
GitHub ๋ ํฌ๋ฅผ Vercel์ ์ฐ๊ฒฐ
-
Framework Preset: Vite
-
Build Command: vite build (๊ธฐ๋ณธ๊ฐ)
-
Output Directory: dist (๊ธฐ๋ณธ๊ฐ)
-
๋ ํฌ ๋ฃจํธ์ vercel.json ํฌํจ
-
GitHub ํธ์ ์: main โ Production ์๋ ๋ฐฐํฌ ๊ธฐํ ๋ธ๋์น/PR โ Preview ๋ฐฐํฌ ํ์ ์ Promote to Production์ผ๋ก ํ๋ฆฌ๋ทฐ๋ฅผ ํ๋ก๋์ ์ ์น๊ฒฉ ๊ฐ๋ฅ
502 Bad Gateway (API ํธ์ถ)
- ์์ฒญ ๊ฒฝ๋ก ํ์ธ: fetch('/api/stock') ์ฒ๋ผ /api/* ๊ฒฝ๋ก์ธ์ง ํ์ธ
- vercel.json์ Render ํธ์คํธ๊ฐ ์ค์ ๋์ํ๋ ์ฃผ์์ธ์ง ํ์ธ
- Render ๋ฌด๋ฃ ํ๋์ ์ฌ๋ฆฝ/์์ ์ผ๋ก ์ฒซ ์์ฒญ์ด ์คํจํ ์ ์์ด ์ ์ ํ ์ฌ์๋
- Ren der ๋์๋ณด๋ Logs์์ ์๋ฌ/์ฌ์์/๋ฉ๋ชจ๋ฆฌ ์ด์ ํ์ธ
CORS ์๋ฌ
- ์ฝ์์ CORS ๋ฌธ๊ตฌ๊ฐ ๋ณด์ด๋ฉด ๋ฐฑ์๋ CORS ํ์ฉ ๋๋ฉ์ธ ์ ๊ฒ
- ๊ฐ๋ฐ/ํ๋ฆฌ๋ทฐ/ํ๋ก๋์ ๋๋ฉ์ธ์ ๋ชจ๋ ํ์ฉ
์๋ก๊ณ ์นจ 404
- SPA ๋ผ์ฐํ rewrite ๋๋ฝ: /(.*) โ /index.html ๊ท์น ํ์ธ