React + Python FastAPI๋ก
์น ๊ฒ์ ๋ง๋ค๊ธฐ #5
Render + Vercel๋ก ๋ฐฐํฌํด์ ๋๊ตฌ๋ ์ ์ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ธฐ
1 ๋ฐฐํฌ๊ฐ ๋ญ์ง, ์ ํ์ํ์ง
์ง๊ธ๊น์ง ๋ง๋ ๊ฒ์์ ๋ด ์ปดํจํฐ์์๋ง ๋์๊ฐ๋ค. npm run dev๋ก ์ผ ์๋ฒ๋ ๋ด PC์๋ง ์๊ณ , ๋ค๋ฅธ ์ฌ๋์ ์ ์ํ ๋ฐฉ๋ฒ์ด ์๋ค.
๋ฐฐํฌ(Deploy)๋ ๋ด ์ปดํจํฐ์ ์๋ ์ฝ๋๋ฅผ ์ธํฐ๋ท ์๋ฒ์ ์ฌ๋ ค์ ๋๊ตฌ๋ ์ ์ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ด๋ค.
๋ก์ปฌ: ๋ด PC์์๋ง ์คํ. ์ฃผ์๊ฐ
localhost:5173๋ฐฐํฌ: ์ธํฐ๋ท ์๋ฒ์์ ์คํ. ์ฃผ์๊ฐ
https://neon-runner.vercel.app๋ฐฐํฌํ๋ฉด PC๊ฐ ๊บผ์ ธ๋ ์๋ฒ๋ ๊ณ์ ๋์๊ฐ๊ณ , ์ ์ธ๊ณ ๋๊ตฌ๋ ์ ์ํ ์ ์๋ค.
2 ์ ์ฒด ๋ฐฐํฌ ๊ตฌ์กฐ
ํ๋ก ํธ์๋์ ๋ฐฑ์๋๋ฅผ ๊ฐ๊ฐ ๋ค๋ฅธ ์๋น์ค์ ์ฌ๋ ธ๋ค. ๋ ๋ค ๋ฌด๋ฃ๋ค.
Vercel์ React ๊ฐ์ ์ ์ ํ์ผ ๋ฐฐํฌ์ ํนํ๋์ด ์๊ณ , Render๋ Python ์๋ฒ ์คํ์ ํนํ๋์ด ์๋ค. ๊ฐ์ ์ํ๋ ๊ฑธ ๋งก๊ธด ๊ฑฐ๋ค. ๋ ๋ค GitHub ์ฐ๋์ด ๋์ด์ ์ฝ๋๋ฅผ pushํ๋ฉด ์๋์ผ๋ก ๋ฐฐํฌ๋๋ค.
3 ๋ฐฑ์๋ ๋ฐฐํฌ โ Render
FastAPI ์๋ฒ๋ฅผ Render์ ์ฌ๋ฆฌ๋ ๊ณผ์ ์ด๋ค. Render๋ GitHub ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํ๋ฉด ์๋์ผ๋ก Python ํ๊ฒฝ์ ๋ง๋ค์ด์ ์๋ฒ๋ฅผ ๋์์ค๋ค.
๋จผ์ ๋ฐฐํฌ์ ํ์ํ ํ์ผ ๋ ๊ฐ๋ฅผ ๋ง๋ค์๋ค.
fastapi uvicorn
์ด ํ๋ก์ ํธ์์ ํ์ํ Python ํจํค์ง ๋ชฉ๋ก์ด๋ค. Render๊ฐ ์๋ฒ๋ฅผ ๋ง๋ค ๋ ์ด ํ์ผ์ ๋ณด๊ณ ํ์ํ ํจํค์ง๋ฅผ ์๋์ผ๋ก ์ค์นํ๋ค. ๋ก์ปฌ์์
pip install ๋ก ์ค์นํ ๊ฒ๋ค์ ์ฌ๊ธฐ์ ์ ์ด๋๋ฉด ๋๋ค.
๊ทธ ๋ค์ Render์์ ์ค์ ํ ๊ฐ๋ค์ด๋ค.
neon-runner ์ ํneon-runner-backendLanguage:
Python 3Root Directory:
backendBuild Command:
pip install -r requirements.txtStart Command:
uvicorn main:app --host 0.0.0.0 --port $PORTInstance Type:
Free
https://neon-runner-backend-1spw.onrender.com
๋ฐฑ์๋ ์ฃผ์๊ฐ ์๊ธฐ๋ฉด App.jsx์์ API ์ฃผ์๋ฅผ ๋ฐ๊ฟ์คฌ๋ค.
// ๊ธฐ์กด โ ๋ด PC ์ฃผ์ const API = 'http://127.0.0.1:8000' // ๋ณ๊ฒฝ โ Render ์๋ฒ ์ฃผ์ const API = 'https://neon-runner-backend-1spw.onrender.com'
๋ฌด๋ฃ ํ๋์ 15๋ถ ๋์ ์์ฒญ์ด ์์ผ๋ฉด ์๋ฒ๊ฐ ์ ๋ ๋ค. ์ ๋ ์ํ์์ ์ฒ์ ์์ฒญ์ด ์ค๋ฉด 50์ด ์ ๋ ๊ฑธ๋ฆฐ๋ค. ์ฒซ ์ ์ ๋ฑ๋ก์ด ๋๋ฆด ์ ์๋๋ฐ ๊ทธ๋ฅ ๊ธฐ๋ค๋ฆฌ๋ฉด ๋๋ค.
4 ํ๋ก ํธ์๋ ๋ฐฐํฌ โ Vercel
React ํ๋ก์ ํธ๋ฅผ Vercel์ ์ฌ๋ฆฌ๋ ๊ฑด ํจ์ฌ ๊ฐ๋จํ๋ค. GitHub ์ ์ฅ์ ์ฐ๊ฒฐํ๊ณ ํด๋๋ง ์ง์ ํ๋ฉด ๋์ด๋ค.
neon-runner ์ฐพ์์ Importfrontend ์
๋ ฅFramework Preset:
Vite ์๋ ๊ฐ์ง๋จ
https://neon-runner-taupe.vercel.app
git push๋ง ํ๋ฉด Vercel์ด๋ Render ๋ ๋ค ์๋์ผ๋ก ์ฌ๋ฐฐํฌ๋๋ค. ๋ฐ๋ก ๋ญ๊ฐ ํ ํ์ ์๋ค.
5 ๊ฒช์๋ ์ค๋ฅ๋ค
๐ด ์ค๋ฅ 1 โ requirements.txt ํ์ผ ์์
Render๊ฐ pip install -r requirements.txt ๋ช
๋ น์ด๋ฅผ ์คํํ๋๋ฐ ํ์ผ์ด ์์ด์ ๋น๋๊ฐ ์คํจํ๋ค. ์ฒ์์ ํ์ผ์ ๋ฃจํธ ํด๋์ ๋ง๋ค์๋๋ฐ backend ํด๋ ์์ ์์ด์ผ ํ๋ค. ํ์ผ์ ์ฌ๋ฐ๋ฅธ ์์น๋ก ์ด๋ํ๊ณ ๋ค์ pushํด์ ํด๊ฒฐํ๋ค.
# ์๋ชป๋ ์์น์ ํ์ผ์ backend ํด๋๋ก ์ด๋ move requirements.txt backend\requirements.txt git add . git commit -m "fix: requirements.txt backend ํด๋๋ก ์ด๋" git push
๐ด ์ค๋ฅ 2 โ Build Command ์ ๋ ฅ์ด ์ ๋จ
Render UI์์ Root Directory์ backend๋ฅผ ์
๋ ฅํ๋ฉด Build Command ์์ backend/ $๊ฐ ์๋์ผ๋ก ๋ถ๋๋ค. ์ฒ์์ ์ด๊ฒ ๋ญ์ง ๋ชฐ๋ผ์ ๊ณ์ ์ง์ฐ๋ ค๊ณ ํ๋๋ฐ Render๊ฐ ์๋์ผ๋ก ๋ถ์ฌ์ฃผ๋ ์ ๋์ฌ๋ผ ๊ฑด๋๋ฆฌ๋ฉด ์ ๋๋ค. ๊ทธ๋ฅ ๋ช
๋ น์ด๋ง ์
๋ ฅํ๋ฉด ๋๋ค.
๐ด ์ค๋ฅ 3 โ CORS ์ค๋ฅ (์ ์ ์ ์ฅ์ด ์ ๋จ)
๋ฐฐํฌ ํ์ ์ ์ ๋ฑ๋ก์ ํ๋๋ฐ ๋ธ๋ผ์ฐ์ ์ฝ์์ CORS ์ค๋ฅ๊ฐ ๋ฌ๋ค. ๋ก์ปฌ์์๋ localhost:5173๋ง ํ์ฉํ๋๋ฐ Vercel ์ฃผ์๊ฐ ๋ฌ๋ผ์ ๋งํ๋ค. main.py์์ CORS ์ค์ ์ allow_origins=["*"]๋ก ๋ฐ๊ฟ์ ํด๊ฒฐํ๋ค.
# ๊ธฐ์กด โ localhost๋ง ํ์ฉ allow_origins=["http://localhost:5173"] # ๋ณ๊ฒฝ โ ๋ชจ๋ ์ฃผ์ ํ์ฉ allow_origins=["*"]
6 ์์ฑ๋ ๋งํฌ ๋ชจ์
๋ฐฐํฌ๊ฐ ๋๋๊ณ ๋๋๊น ์ค์ ๋ก ์ฃผ์๊ฐ ์๊ฒผ๋ค. ์๋ ๋งํฌ๋ค๋ก ์ง์ ์ ์ํด์ ํ์ธํ ์ ์๋ค.
- ์๋ฃ requirements.txt ์์ฑ
- ์๋ฃ Render๋ก FastAPI ๋ฐฑ์๋ ๋ฐฐํฌ
- ์๋ฃ App.jsx API ์ฃผ์ Render๋ก ๋ณ๊ฒฝ
- ์๋ฃ Vercel๋ก React ํ๋ก ํธ์๋ ๋ฐฐํฌ
- ์๋ฃ ๋๊ตฌ๋ ์ ์ ๊ฐ๋ฅํ ์ฃผ์ ์์ฑ
์ฒ์์ ํด๋ ๋ง๋๋ ๊ฒ๋ถํฐ ์์ํด์ ๋ฐฐํฌ๊น์ง ์ ๋ถ ํ๋ค.
React, Canvas, Python, FastAPI, Git, Render, Vercel ๋ค ์จ๋ดค๋ค.
์ด ์๋ฆฌ์ฆ์ ๋ชจ๋ ์์ค์ฝ๋๋
github.com/jisun22/neon-runner
์์ ๋ณผ ์ ์์ด์!
'Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Neon Runner ๋ชจ๋ฐ์ผ ๋ฒ์ ๋ง๋ค๊ธฐ #1 (0) | 2026.04.24 |
|---|---|
| React + FastAPI๋ก ์น ๊ฒ์ ๋ง๋ค๊ธฐ #3 - ์์ฑ (0) | 2026.04.23 |
| React + Python FastAPI๋ก์น ๊ฒ์ ๋ง๋ค๊ธฐ #2 (0) | 2026.04.23 |
| React + Python FastAPI๋ก์น ๊ฒ์ ๋ง๋ค๊ธฐ #1 (1) | 2026.04.22 |
| ๐ค๏ธ๋ ์จ ๋ฐ์ดํฐ(2) - ์ ์ฅํ๊ณ API ์๋ฒ๊น์ง ๋ง๋ค๊ธฐ (0) | 2026.03.25 |