์ด ํ๋ก์ ํธ๋ ๋
๊ฑฐ๋
ธ์ธ๊ณผ ๊ฒฝ๊ณ์ฑ ์ง๋ฅ์ธ์ ์ํ ์์ฑ ์ธ์ ๊ธฐ๋ฐ ์ํต ๋ฐ ๊ฑด๊ฐ ์๋ฆผ ์ฑ์
๋๋ค.
์ฌ์ฉ์์ ์์ฑ์ ์ค์๊ฐ์ผ๋ก ์ธ์ํ์ฌ ๋ด์ค ์์ฒญ, ๋ ์จ ์์ฒญ, ์ด์ผ๊ธฐ ๊ณต์ ๋ฑ ์๋๋ฅผ ํ์
ํ๊ณ ,
ํด๋น ์นดํ
๊ณ ๋ฆฌ์ ๋ง๋ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ํ ์ฌ์ฉ์ ๋ง์ถคํ ๊ฑด๊ฐ ์๋ ๊ธฐ๋ฅ์ ํตํด ํน์ ์๊ฐ์ ๋ณต์ฝ, ์คํธ๋ ์นญ, ๊ฑด๊ฐ ํ๋์ ์๋ฆผ์ผ๋ก ์ ๊ณตํฉ๋๋ค.
์ฌ์ฉ์์ ์์ฑ์ ํ ์คํธ๋ก ๋ณํํ๊ณ , ์ด๋ฅผ ๋ถ๋ฅํ์ฌ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
์:
"์ค๋ ๋ ์จ ์ด๋?"โ๋ ์จ ์์ฒญ"์์ฆ ์ ์น ๋ด์ค ์๋ ค์ค"โ๋ด์ค ์์ฒญ"์ค๋ ์ด๋ฐ ์ผ์ด ์์์ด"โ์ด์ผ๊ธฐ
- ์ฌ์ฉ์์ ํค์๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค์๊ฐ ๋ด์ค๋ฅผ ํฌ๋กค๋ง
- ๋ด์ค ๋ด์ฉ์ ๊ฐ๋จํ ์์ฝ๋ฌธ์ผ๋ก ์๋ต
- ์ฌ์ฉ์์ ํ์ฌ ์ง์ญ์ ๊ธฐ๋ฐํ ๊ธฐ์์ฒญ ๋๋ ํฌํธ ๋ ์จ ๋ฐ์ดํฐ ํฌ๋กค๋ง
- ์ฌ์ฉ์๊ฐ ์์ ์ ์ด์ผ๊ธฐ๋ฅผ ์ ์ฅํ ์ ์์ผ๋ฉฐ
- ํ ์ฌ์ฉ์์ ์ด์ผ๊ธฐ๋ฅผ ๋ฌด์์ ์๋ต์ผ๋ก ์ ๊ณต
- ์ฌ์ฉ์ ์ ๋ ฅ ๊ธฐ๋ฐ: ๋์ด, ์ฑ๋ณ, ๊ด์ฌ ์งํ
- ์ ํด์ง ์๊ฐ๋ง๋ค ๋ณต์ฝ, ์ด๋, ๊ฑด๊ฐ ์๋ฆผ ์ ์ก
- Flutter ์ฑ๊ณผ FastAPI ๋ฐฑ์๋ ๊ฐ ์ฐ๋
| ๊ธฐ์ | ์ค๋ช |
|---|---|
| FastAPI | ๋ฐฑ์๋ ์๋ฒ, API ๋ฐ ๋ผ์ฐํ |
| Flutter | ํ๋ก ํธ์๋ ์ฑ ๊ตฌํ |
| SQLite | ๋ก์ปฌ ๋ฐ์ดํฐ ์ ์ฅ์ |
| BeautifulSoup | ๋ด์ค/๋ ์จ ์น ํฌ๋กค๋ง |
| Pydantic | ๋ฐ์ดํฐ ๋ชจ๋ธ ์ ํจ์ฑ ๊ฒ์ฌ |
| Flutter Local Notifications | ๋ก์ปฌ ํธ์ ์๋ฆผ ๊ตฌํ |
| TTS / STT API | ์์ฑ โ ํ ์คํธ ์ฒ๋ฆฌ (Kakao ๋ฑ) |
| GitHub Actions (์์ ) | CI/CD ์๋ํ ๊ตฌ์ถ ์์ |
backend/
โโโ best_model/ # ์์ฑ ๋ถ๋ฅ ๋ชจ๋ธ ํ์ผ
โโโ crawling/ # ๋ด์ค/๋ ์จ ํฌ๋กค๋ง ๋ชจ๋
โโโ data/ # ํ ์คํธ ๋ฐ ์ ์ฅ์ฉ ์ํ ๋ฐ์ดํฐ
โโโ routers/ # FastAPI ๋ผ์ฐํฐ (์์ฑ, ๋ด์ค, ๋ ์จ, ์๋ ๋ฑ)
โโโ static/profile_images/ # ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง ์ ์ฅ ํด๋
โโโ utils/ # ์ ์ฒ๋ฆฌ ๋ฐ ๋ถ๋ฅ ์ ํธ๋ฆฌํฐ ํจ์ ๋ชจ์
โโโ main.py # FastAPI ์ ํ๋ฆฌ์ผ์ด์ ์ง์ ์
โโโ models.py # SQLAlchemy ORM ๋ชจ๋ธ ์ ์
โโโ database.py # DB ์ฐ๊ฒฐ, ์ธ์ ๊ด๋ฆฌ
โโโ requirements.txt # Python ํจํค์ง ๋ช ์ธ
โโโ README.md # ํ๋ก์ ํธ ์ค๋ช ์
| ํ์ผ | ์ค๋ช |
|---|---|
main.py |
FastAPI ์๋ฒ ์คํ๋ถ |
models.py |
์ฌ์ฉ์, ์๋, ์ด์ผ๊ธฐ ์ ์ฅ์ฉ ORM ๋ชจ๋ธ |
database.py |
DB ์ฐ๊ฒฐ, ์ธ์ ๊ตฌ์ฑ |
routers/ |
๊ธฐ๋ฅ๋ณ API ๋ผ์ฐํฐ (/news, /weather, /story, /alarm ๋ฑ) |
utils/ |
์ ์ฒ๋ฆฌ, ์๋ ๋ถ๋ฅ ๋ชจ๋ธ ์ฒ๋ฆฌ ๋ฑ ์ ํธ๋ฆฌํฐ |
crawling/ |
BeautifulSoup ๊ธฐ๋ฐ ๋ด์ค/๋ ์จ ๋ฐ์ดํฐ ์์ง ๋ชจ๋ |
# ํจํค์ง ์ค์น
pip install -r requirements.txt
# FastAPI ์๋ฒ ์คํ
uvicorn main:app --reload