Skip to content

gachonsejongwindmill/windmill_FE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

262 Commits
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

WindMill โ€” React Application

๋ณธ ๋ฌธ์„œ๋Š” ์‹คํ–‰ ๊ฐ€์ด๋“œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.
์›น ๊ธฐ๋ฐ˜ ์ฃผ๊ฐ€/ํฌํŠธํด๋ฆฌ์˜ค ์•ฑ์˜ React ํ”„๋ก ํŠธ์—”๋“œ์ž…๋‹ˆ๋‹ค. Vite๋กœ ๋นŒ๋“œํ•˜๊ณ  Vercel์— ๋ฐฐํฌํ•˜๋ฉฐ, Render์˜ FastAPI ๋ฐฑ์—”๋“œ์™€ `/api/*` ํ”„๋ก์‹œ๋กœ ์—ฐ๋™ํ•ฉ๋‹ˆ๋‹ค.

React Vite TanStack Query Vercel License: MIT

์•„๋ž˜ START๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”.


โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

  • 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.html rewrite

๐Ÿ“ฆ ๊ธฐ์ˆ  ์Šคํƒ

  • 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   

API์—ฐ๋™

ํ”„๋ก ํŠธ์—”๋“œ์—์„œ๋Š” ํ•ญ์ƒ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
const res = await fetch('/api/stock');

vercel.json์—์„œ render๋ฐฑ์—”๋“œ๋กœ ํ”„๋ก์‹œํ•ฉ๋‹ˆ๋‹ค.
{
  "rewrites": [
    {
      "source": "/api/(.*)",
      "destination": "https://windmill-be-5qid.onrender.com/$1"
    },
    {
      "source": "/(.*)",
      "destination": "/index.html"
    }
  ]
}

โ˜๏ธvercel ๋ฐฐํฌ ๊ฐ€์ด๋“œ

  1. GitHub ๋ ˆํฌ๋ฅผ Vercel์— ์—ฐ๊ฒฐ

  2. Framework Preset: Vite

  3. Build Command: vite build (๊ธฐ๋ณธ๊ฐ’)

  4. Output Directory: dist (๊ธฐ๋ณธ๊ฐ’)

  5. ๋ ˆํฌ ๋ฃจํŠธ์— vercel.json ํฌํ•จ

  6. 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 ๊ทœ์น™ ํ™•์ธ

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages