๐จ๊ฐ๋ฐ ๊ธฐ์ด ๊ณต์ฌ
์์ผ๋ก ๋ง๋ค "ํ์ด๋ณด"๊ฐ ์์ฑ๋ ๋น๋ฉ์ด๋ผ๋ฉด ์ฌ๊ธฐ๋ ๊ธฐ์ด ๊ณต์ฌ์ ํด๋นํ๋ค.
์ด ์ฅ์ ๋ชฉํ
- APIRouter๋ฅผ ์ด์ฉํด ๋ผ์ฐํธ ํจ์๋ฅผ ๊ด๋ฆฌํ๋ค.
- SQLAlchemy๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ดํ๋ค.
- ํ์ด๋ณด ๊ฒ์ํ์ ์ง๋ฌธ ๋ชฉ๋ก๊ณผ ์์ธ ์กฐํ ๊ธฐ๋ฅ์ ๋ง๋ ๋ค.
FastAPI ๊ธฐ์ด ๋ค์ง๊ธฐ
ํ์ฌ ํ์ด๋ณด ํ๋ก์ ํธ๋ย projects/myapi
ย ๋๋ ํฐ๋ฆฌ ์๋์ main.py ํ์ผ๋ง ์์ฑํ ์ํ
๊ท๋ชจ๋ฅผ ๊ฐ์ถ FastAPI ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ์ ํ๋ค๋ฉด ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ์ ๋ง๋ค์ด์ผ ํ๋ค.
๊ทธ๋ฐ๋ฐ FastAPI๋ "ํ๋ก์ ํธ์ ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ํ๋ผ"์ ๊ฐ์ ๊ท์น์ด ์์ผ๋ฏ๋ก ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ ๋ ๊ณ ๋ฏผ์ ํด์ผ ํ๋ค.
FastAPI ํ๋ก์ ํธ ๊ตฌ์กฐ
โโโ main.py
โโโ database.py
โโโ models.py
โโโ domain
โย ย โโโ answer
โย ย โโโ question
โย ย โโโ user
โโโ frontend
- ํ์ด๋ณด ํ๋ก์ ํธ๋ฅผ ์ค์ ํ๋ main.py ํ์ผ
- FastAPI ํ๋ก์ ํธ์ ์ ์ฒด์ ์ธ ํ๊ฒฝ์ ์ค์ ํ๋ ํ์ผ
- ํด๋น ํ์ผ์ ์์ฑํ app ๊ฐ์ฒด๋ FastAPI์ ํต์ฌ ๊ฐ์ฒด, ์ด๋ฅผ ํตํด FastAPI์ ์ค์ ์ ํ ์ ์์
- DB๋ฅผ ์ค์ ํ๋ database.py
- DB์ ๊ด๋ จ๋ ์ค์ ์ ํ๋ ํ์ผ
- DB๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๋ณ์, ํจ์๋ฑ์ ์ ์ํ๊ณ , ์ ์ํ DB์ ์ฃผ์์ ์ฌ์ฉ์, ๋น๋ฐ๋ฒํธ๋ฑ์ ๊ด๋ฆฌ
- ๋ชจ๋ธ์ ๊ด๋ฆฌํ๋ models.py ํ์ผ
- ํด๋น ํ๋ก์ ํธ๋ ORM์ ์ง์ํ๋ ํ์ด์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๊ตฌ์ธ SQLAlchemy๋ฅผ ์ฌ์ฉ
- ์ฆ, ๋ชจ๋ธ ํด๋์ค๋ค์ ์ ์ํ models.py ํ์ผ์ด ํ์ํ๋ค.
- API๋ฅผ ๊ตฌ์ฑํ๋ domain ๋๋ ํฐ๋ฆฌ
- ์ด ํ๋ก์ ํธ๋ ์ง๋ฌธ๊ณผ ๋ต๋ณ์ ์์ฑํ๋ ๊ฒ์ํ์ ๋ง๋๋ ๊ฒ์ ์ต์ข
๋ชฉํ๋ก ํจ.
- ์ด์ "์ง๋ฌธ", "๋ต๋ณ", "์ฌ์ฉ์" ๋ผ๋ ์ด 3๊ฐ์ ๋๋ฉ์ธ์ ๋์ด ๊ทธ ํ์์ ๊ด๋ จ๋ ํ์ผ์ ์์ฑ.
๊ทธ๋ฆฌ๊ณ ๊ฐ ๋๋ฉ์ธ์ API๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ ํ์ผ๋ค์ด ํ์ํ๋ค.
- ๋ผ์ฐํฐ ํ์ผ - URL๊ณผ API์ ์ ์ฒด์ ์ธ ๋์์ ๊ด๋ฆฌ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฒ๋ฆฌ ํ์ผ - ๋ฐ์ดํฐ์ ์์ฑ(Create), ์กฐํ(Read), ์์ (Update), ์ญ์ (Delete)๋ฅผ ์ฒ๋ฆฌ (CRUD)
- ์
์ถ๋ ฅ ๊ด๋ฆฌ ํ์ผ - ์
/์ถ๋ ฅ ๋ฐ์ดํฐ์ ์คํ ์ ์ ๋ฐ ๊ฒ์ฆ
- ์๋ฅผ ๋ค์ด ์ง๋ฌธ(
domain/question
) ๋๋ฉ์ธ์ด๋ผ๋ฉด ๋ค์์ 3๊ฐ ํ์ผ์ด ํ์
- question_router.py - ๋ผ์ฐํฐ ํ์ผ
- question_crud.py - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฒ๋ฆฌ ํ์ผ
- question_schema.py - ์
์ถ๋ ฅ ๊ด๋ฆฌ ํ์ผ
- frontend
- Svelte ํ๋ ์์ํฌ๋ฅผ ์ค์นํ ๋๋ ํฐ๋ฆฌ.
Svelte์ ์์ค ๋ฐ ๋น๋ ํ์ผ๋ค์ ์ ์ฅํ ํ๋ก ํธ์๋์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์ด๋ค.
- ์ต์ข
์ ์ผ๋กย
frontend/dist
ย ๋๋ ํฐ๋ฆฌ์ ์์ฑ๋ ๋น๋ ํ์ผ๋ค์ ๋ฐฐํฌ์์ ์ฌ์ฉํ ๊ฒ
๋ชจ๋ธ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌํ๊ธฐ
์ฐ๋ฆฌ๊ฐ ๋ง๋ค ํ๋ก์ ํธ๋ ์ง๋ฌธ/๋ต๋ณ ๊ฒ์ํ์ด๋ค. ์ง๋ฌธ์ด๋ ๋ต๋ณ์ ์์ฑ์ ๋ฐ์ดํฐ๊ฐ ์์ฑ๋จ.