Spaces:
Runtime error
Runtime error
kootaeng2 commited on
Commit ยท
39c894a
1
Parent(s): bc92fbf
Fix: Relocate templates directory into src for Flask
Browse files
README.md
CHANGED
|
@@ -7,114 +7,119 @@ sdk: docker
|
|
| 7 |
app_port: 7860
|
| 8 |
pinned: false
|
| 9 |
---
|
| 10 |
-
|
|
|
|
|
|
|
| 11 |
|
| 12 |
-
>
|
| 13 |
|
| 14 |
<br>
|
| 15 |
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-

|
| 20 |
|
| 21 |
<br>
|
| 22 |
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
* **AI ๊ธฐ๋ฐ ๊ฐ์ ๋ถ์:** Hugging Face์ `klue/roberta-base` ๋ชจ๋ธ์ AI Hub์ '๊ฐ์ฑ๋ํ ๋ง๋ญ์น' ๋ฐ์ดํฐ์
์ผ๋ก ๋ฏธ์ธ ์กฐ์ (Fine-tuning)ํ์ฌ, ํ๊ตญ์ด ํ
์คํธ์ ๋ํ ๋์ ์ ํ๋์ ๊ฐ์ ์์ธก์ ์ํํฉ๋๋ค.
|
| 26 |
-
* **์ํฉ๋ณ ๋ง์ถค ์ถ์ฒ:** ๋ถ์๋ ๊ฐ์ ์ ๋ํด '๊ฐ์ ์ ๊น์ด ๋๋ผ๊ณ ์ถ์ ๋(์์ฉ)'์ '๊ฐ์ ์์ ๋ฒ์ด๋๊ณ ์ถ์ ๋(์ ํ)'๋ผ๋ ๋ ๊ฐ์ง ์ ํ์ง๋ฅผ ์ ๊ณตํ์ฌ, ์ฌ์ฉ์์ ํ์ฌ ๋์ฆ์ ๋ง๋ ์ฐจ๋ณํ๋ ์ฝํ
์ธ ๋ฅผ ์ถ์ฒํฉ๋๋ค.
|
| 27 |
-
* **๋ค์ด์ด๋ฆฌ ํ์คํ ๋ฆฌ:** ์ฌ์ฉ์๊ฐ ์์ฑํ ์ผ๊ธฐ์ AI์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์น ๋ธ๋ผ์ฐ์ ์ `localStorage`์ ์ ์ฅํ์ฌ, ์ธ์ ๋ ๊ณผ๊ฑฐ์ ๊ธฐ๋ก์ ๋ค์ ํ์ธํ๊ณ ๊ฐ์ ์ ํ๋ฆ์ ํ์
ํ ์ ์์ต๋๋ค.
|
| 28 |
-
* **์ฌ์ฉ์ ์นํ์ ์น ์ธํฐํ์ด์ค:** Flask ๊ธฐ๋ฐ์ ์น ์๋ฒ์ ๋์ ์ธ JavaScript๋ฅผ ํตํด, ๋๊ตฌ๋ ์ฝ๊ฒ ์์ ์ ๊ฐ์ ์ ๊ธฐ๋กํ๊ณ ์ถ์ฒ์ ๋ฐ์ ์ ์๋ ์ง๊ด์ ์ธ UI/UX๋ฅผ ์ ๊ณตํฉ๋๋ค.
|
| 29 |
|
| 30 |
<br>
|
| 31 |
|
| 32 |
-
|
|
|
|
| 33 |
|
| 34 |
-
|
| 35 |
|
| 36 |
-
|
|
|
|
|
|
|
| 37 |
|
| 38 |
-
|
| 39 |
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
|
|
|
| 46 |
|
|
|
|
| 47 |
<br>
|
| 48 |
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
โโโ src/
|
| 54 |
-
โ โโโ app.py # ์น ์๋ฒ ์คํ ํ์ผ
|
| 55 |
-
โ โโโ chatbot.py # ํฐ๋ฏธ๋ ์ฑ๋ด ์คํ ํ์ผ
|
| 56 |
-
โ โโโ emotion_engine.py # ๊ฐ์ ๋ถ์ ์์ง ๋ชจ๋
|
| 57 |
-
โ โโโ recommender.py # ์ถ์ฒ ๋ก์ง ๋ชจ๋
|
| 58 |
-
โโโ scripts/
|
| 59 |
-
โ โโโ train_model.py # AI ๋ชจ๋ธ ํ๋ จ ์คํฌ๋ฆฝํธ
|
| 60 |
-
โโโ notebooks/
|
| 61 |
-
โ โโโ 1_explore_data.py # ๋ฐ์ดํฐ ํ์ ๋ฐ ์๊ฐํ์ฉ ๋
ธํธ๋ถ
|
| 62 |
-
โโโ data/ # ์๋ณธ ๋ฐ์ดํฐ์
|
| 63 |
-
โโโ results/ # ํ๋ จ๋ ๋ชจ๋ธ ํ์ผ (Git ๋ฏธํฌํจ)
|
| 64 |
-
โโโ templates/ # HTML ํ์ผ
|
| 65 |
-
โโโ static/ # CSS, ํด๋ผ์ด์ธํธ JS ํ์ผ
|
| 66 |
-
โโโ .gitignore # Git ๋ฌด์ ํ์ผ ๋ชฉ๋ก
|
| 67 |
-
โโโ README.md # ํ๋ก์ ํธ ์ค๋ช
์
|
| 68 |
-
โโโ requirements.txt # ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชฉ๋ก
|
| 69 |
-
```
|
| 70 |
<br>
|
| 71 |
|
| 72 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
cd Emotion_Chatbot_project
|
| 78 |
-
```
|
| 79 |
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
|
|
|
| 83 |
py -3.10 -m venv venv
|
| 84 |
-
# ๊ฐ์ํ๊ฒฝ ํ์ฑํ
|
| 85 |
.\venv\Scripts\Activate
|
| 86 |
-
```
|
| 87 |
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
# PyTorch (CUDA 11.8 ๋ฒ์ )๋ฅผ ๋จผ์ ์ค์นํฉ๋๋ค.
|
| 91 |
-
pip install torch torchvision torchaudio --index-url [https://download.pytorch.org/whl/cu118](https://download.pytorch.org/whl/cu118)
|
| 92 |
-
# ๋๋จธ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค.
|
| 93 |
pip install -r requirements.txt
|
| 94 |
-
|
|
|
|
|
|
|
|
|
|
| 95 |
|
| 96 |
-
|
| 97 |
-
|
|
|
|
| 98 |
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
```
|
| 102 |
|
| 103 |
-
|
| 104 |
-
```bash
|
| 105 |
-
python app.py
|
| 106 |
-
```
|
| 107 |
-
* ์๋ฒ๊ฐ ์คํ๋๋ฉด, ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ ์ฃผ์์ฐฝ์ `http://127.0.0.1:5000` ์ ์
๋ ฅํ์ธ์.
|
| 108 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
<br>
|
| 110 |
|
| 111 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 112 |
|
| 113 |
-
|
| 114 |
|
| 115 |
-
|
| 116 |
-
| :--- | :---: |
|
| 117 |
-
| **Accuracy** (์ ํ๋) | **85.3%** |
|
| 118 |
-
| **F1-Score** (Weighted)| **0.852** |
|
| 119 |
|
|
|
|
| 120 |
|
|
|
|
|
|
| 7 |
app_port: 7860
|
| 8 |
pinned: false
|
| 9 |
---
|
| 10 |
+
๐ค ์ผ๊ธฐ ๊ธฐ๋ฐ ๊ฐ์ ๋ถ์ ๋ฐ ์ฝํ
์ธ ์ถ์ฒ ์น
|
| 11 |
+
ํ๋ฃจ๋ฅผ ๋ง๋ฌด๋ฆฌํ๋ฉฐ ์ฐ๋ ๋น์ ์ ์ผ๊ธฐ, ๊ทธ ์์ ์จ๊ฒจ์ง ์ง์ง ๊ฐ์ ์ ๋ฌด์์ผ๊น์?
|
| 12 |
+
์ด ํ๋ก์ ํธ๋ AI๋ฅผ ํตํด ๋น์ ์ ๊ธ์ ์ดํดํ๊ณ , ๊ฐ์ ์ ๋ชฐ์
ํ๊ฑฐ๋ ํน์ ์๋ก์ด ํ๋ ฅ์ด ํ์ํ ๋ ๋ง์ถคํ ์ฝํ
์ธ ๋ฅผ ์ถ์ฒํด์ฃผ๋ ๋น์ ๋ง์ ๊ฐ์ฑ ๋น์์
๋๋ค.
|
| 13 |
|
| 14 |
+
<br>
|
| 15 |
|
| 16 |
<br>
|
| 17 |
|
| 18 |
+
๐ ๋ผ์ด๋ธ ๋ฐ๋ชจ (Live Demo)
|
| 19 |
+
๐ https://huggingface.co/spaces/koons/emotion-chatbot
|
| 20 |
+
(์ ์ฃผ์๋ ์ด์ ์ ํ์ธ๋ Space ID ๊ธฐ์ค์ด๋ฉฐ, ์ค์ ์ต์ข
๋ฐฐํฌ๋ ์ฃผ์๋ก ์์ ํด์ฃผ์ธ์.)
|
|
|
|
| 21 |
|
| 22 |
<br>
|
| 23 |
|
| 24 |
+
[์ฌ๊ธฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ค์ ์๋ ์คํฌ๋ฆฐ์ท์ด๋ GIF๋ฅผ ์ฝ์
ํ์ธ์]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
|
| 26 |
<br>
|
| 27 |
|
| 28 |
+
โจ ํต์ฌ ๊ธฐ๋ฅ
|
| 29 |
+
๐ค ํ
์คํธ ์ ๊ฐ์ ํ์: klue/roberta-base ๋ชจ๋ธ์ ํ๊ตญ์ด '๊ฐ์ฑ๋ํ ๋ง๋ญ์น' ๋ฐ์ดํฐ๋ก ๋ฏธ์ธ์กฐ์ ํ์ฌ, ์ผ๊ธฐ ์์ ๋ด๊ธด ๋ณตํฉ์ ์ธ ๊ฐ์ ์ 85% ์ด์์ ์ ํ๋๋ก ๋ถ์ํฉ๋๋ค.
|
| 30 |
|
| 31 |
+
๐ญ ๊ฐ์ฑ ๋ง์ถค ํ๋ ์ด์
: ๋ถ์๋ ๊ฐ์ ์ ๋ ๊น์ด ์๋ฏธํ๊ณ ์ถ์ ๋(์์ฉ)์ ์๋ก์ด ๊ธฐ๋ถ์ผ๋ก ์ ํํ๊ณ ์ถ์ ๋(์ ํ), ๋ ๊ฐ์ง ์๋๋ฆฌ์ค์ ๋ง์ถฐ ์ํ, ์์
, ์ฑ
์ ์ถ์ฒํฉ๋๋ค.
|
| 32 |
|
| 33 |
+
๐ ๋๋ง์ ๊ฐ์ ๊ธฐ๋ก ๋ณด๊ด: ์์ฑํ๋ ์ผ๊ธฐ์ AI์ ๊ฐ์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋ธ๋ผ์ฐ์ (localStorage)์ ์ ์ฅํ์ฌ, ๊ณผ๊ฑฐ์ ๊ฐ์ ํ๋ฆ์ ์ธ์ ๋ ์ง ๋ค์ ๋์๋ณผ ์ ์์ต๋๋ค.
|
| 34 |
+
|
| 35 |
+
๐ป ์ง๊ด์ ์ธ ๋ฐ์ํ UI: Flask์ JavaScript๋ก ๊ตฌ์ถ๋ ๊ฐ๊ฒฐํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ, ์ด๋ค ๊ธฐ๊ธฐ์์๋ ํธ์ํ๊ฒ ๊ฐ์ ์ ๊ธฐ๋กํ ์ ์์ต๋๋ค.
|
| 36 |
|
| 37 |
+
<br>
|
| 38 |
|
| 39 |
+
โ๏ธ ๊ธฐ์ ์คํ ๋ฐ ์ํคํ
์ฒ
|
| 40 |
+
๊ตฌ๋ถ ๊ธฐ์
|
| 41 |
+
Backend Python 3.10, Flask, Gunicorn
|
| 42 |
+
Frontend HTML, CSS, JavaScript
|
| 43 |
+
AI / Data PyTorch, Hugging Face Transformers, Scikit-learn, Pandas
|
| 44 |
+
Deployment Docker, GitHub Actions, Hugging Face Spaces
|
| 45 |
+
Version Control Git, GitHub, Git LFS
|
| 46 |
|
| 47 |
+
Sheets๋ก ๋ด๋ณด๋ด๊ธฐ
|
| 48 |
<br>
|
| 49 |
|
| 50 |
+
๋ฐฐํฌ ์ํคํ
์ฒ (CI/CD Pipeline)
|
| 51 |
+
์ด ํ๋ก์ ํธ๋ GitHub Actions๋ฅผ ์ด์ฉํ ์๋ํ๋ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ์ต๋๋ค.
|
| 52 |
+
Git Push (main ๋ธ๋์น) โ GitHub Actions (CI/CD ํธ๋ฆฌ๊ฑฐ) โ Dockerfile ๋น๋ โ Hugging Face Spaces (์๋ ๋ฐฐํฌ ๋ฐ ์๋น)
|
| 53 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 54 |
<br>
|
| 55 |
|
| 56 |
+
๐ ๏ธ ์์ํ๊ธฐ: ๋ก์ปฌ ํ๊ฒฝ์์ ์คํ
|
| 57 |
+
์ฌ์ ์๊ตฌ์ฌํญ
|
| 58 |
+
Python 3.10
|
| 59 |
+
|
| 60 |
+
Git
|
| 61 |
+
|
| 62 |
+
1. ํ๋ก์ ํธ ๋ณต์ (Clone)
|
| 63 |
+
Bash
|
| 64 |
|
| 65 |
+
git clone https://github.com/kootaeng2/Emotion-Chatbot-App.git
|
| 66 |
+
cd Emotion-Chatbot-App
|
| 67 |
+
(์ ์ฅ์ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋์๋ค๋ฉด, ์ ์ฃผ์๋ฅผ ์๋ก ๋ง๋์ ์ฃผ์๋ก ์์ ํด์ฃผ์ธ์.)
|
|
|
|
|
|
|
| 68 |
|
| 69 |
+
2. ๊ฐ์ํ๊ฒฝ ์์ฑ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
|
| 70 |
+
Bash
|
| 71 |
+
|
| 72 |
+
# Python 3.10 ๊ฐ์ํ๊ฒฝ ์์ฑ ๋ฐ ํ์ฑํ
|
| 73 |
py -3.10 -m venv venv
|
|
|
|
| 74 |
.\venv\Scripts\Activate
|
|
|
|
| 75 |
|
| 76 |
+
# PyTorch ๋ฐ ๊ธฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
|
| 77 |
+
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
|
|
|
|
|
|
|
|
|
|
| 78 |
pip install -r requirements.txt
|
| 79 |
+
3. AI ๋ชจ๋ธ ์ง์ ํ๋ จํ๊ธฐ (์ต์ด 1ํ ํ์)
|
| 80 |
+
โ ๏ธ ์ฃผ์: ์ด ํ๋ก์ ํธ๋ ํ๋ จ๋ ๋ชจ๋ธ ํ์ผ์ ํฌํจํ๊ณ ์์ง ์์ต๋๋ค. AI Hub '๊ฐ์ฑ๋ํ ๋ง๋ญ์น' ๋ฐ์ดํฐ์
์ ๋ค์ด๋ก๋ํ์ฌ data/ ํด๋์ ์์น์ํจ ํ, ์๋ ๋ช
๋ น์ด๋ฅผ ์คํํด์ผ ํฉ๋๋ค.
|
| 81 |
+
|
| 82 |
+
Bash
|
| 83 |
|
| 84 |
+
python scripts/train_model.py
|
| 85 |
+
4. ์น ์ ํ๋ฆฌ์ผ์ด์
์คํ
|
| 86 |
+
Bash
|
| 87 |
|
| 88 |
+
python src/app.py
|
| 89 |
+
์๋ฒ๊ฐ ์คํ๋๋ฉด, ์น ๋ธ๋ผ์ฐ์ ์ฃผ์์ฐฝ์ http://127.0.0.1:5000 ์ ์
๋ ฅํ์ฌ ์ ์ํ์ธ์.
|
|
|
|
| 90 |
|
| 91 |
+
<br>
|
|
|
|
|
|
|
|
|
|
|
|
|
| 92 |
|
| 93 |
+
๐ ์ต์ข
ํด๋ ๊ตฌ์กฐ
|
| 94 |
+
ํ๋ก์ ํธ์ ๊ฐ๋
์ฑ๊ณผ ํ์ฅ์ฑ์ ์ํด Flask ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ค ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฆ
๋๋ค.
|
| 95 |
+
|
| 96 |
+
Emotion-Chatbot-App/
|
| 97 |
+
โโโ src/
|
| 98 |
+
โโโ app.py # Flask ์น ์๋ฒ ์คํ ํ์ผ
|
| 99 |
+
โโโ emotion_engine.py # ๊ฐ์ ๋ถ์ ์์ง ๋ชจ๋
|
| 100 |
+
โโโ recommender.py # ์ถ์ฒ ๋ก์ง ๋ชจ๋
|
| 101 |
+
โโโ static/ # CSS, ํด๋ผ์ด์ธํธ JS ํ์ผ
|
| 102 |
+
โโโ templates/ # HTML ํ
ํ๋ฆฟ ํ์ผ
|
| 103 |
+
... (๊ธฐํ ํ๋ก์ ํธ ํ์ผ ๋ฐ ํด๋) ...
|
| 104 |
<br>
|
| 105 |
|
| 106 |
+
๐งโโ๏ธ ์ฃผ์ ๊ฐ๋ฐ ๋์ ๊ณผ์ ๋ฐ ํด๊ฒฐ ๊ณผ์
|
| 107 |
+
์ด ํ๋ก์ ํธ๋ ๋จ์ ๊ธฐ๋ฅ ๊ตฌํ์ ๋์ด, ์ค์ ์๋น์ค ๋ฐฐํฌ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋ณต์กํ ๋ฌธ์ ๋ค์ ์ฒด๊ณ์ ์ผ๋ก ํด๊ฒฐํ ๊ฒฝํ์ ํฌํจํฉ๋๋ค.
|
| 108 |
+
|
| 109 |
+
Git LFS ๋ฐ ํ์คํ ๋ฆฌ ๋ฌธ์ ํด๊ฒฐ:
|
| 110 |
+
|
| 111 |
+
๋ฌธ์ : 1GB๊ฐ ๋๋ AI ๋ชจ๋ธ ํ์ผ๋ก ์ธํด git push ์ ํ์์์ ๋ฐ ์ฉ๋ ์ ํ ์ค๋ฅ ๋ฐ์.
|
| 112 |
+
|
| 113 |
+
ํด๊ฒฐ: Git LFS๋ฅผ ๋์
ํ๊ณ , ๊ณผ๊ฑฐ ํ์คํ ๋ฆฌ์ ๋จ์ ๋์ฉ๋ ํ์ผ์ ํ์ ์ git filter-repo ๋ช
๋ น์ด๋ก ์์ ํ ์ ๊ฑฐํ์ฌ ์ ์ฅ์๋ฅผ ๋ฐฐํฌ์ ์ต์ ํ. ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ ์ ์ฅ์๋ฅผ ์ด๊ธฐํํ๋ ๊ณผ๊ฐํ ๊ฒฐ์ ์ ํตํด ๊ทผ๋ณธ ์์ธ์ ํด๊ฒฐ.
|
| 114 |
+
|
| 115 |
+
Hugging Face ๋ฐฐํฌ ์๋ํ (CI/CD):
|
| 116 |
+
|
| 117 |
+
๋ฌธ์ : ์๋ ๋ฐฐํฌ์ ๋นํจ์จ์ฑ์ ๊ฐ์ ํ๊ณ , GitHub์ ๋ฐฐํฌ ์๋ฒ ๊ฐ์ ์ธ์ฆ ๋ฐ ๋๊ธฐํ ์ค๋ฅ ๋ฐ์.
|
| 118 |
|
| 119 |
+
ํด๊ฒฐ: Dockerfile๋ก ์คํ ํ๊ฒฝ์ ํ์คํํ๊ณ , GitHub Actions ์ํฌํ๋ก์ฐ๋ฅผ ๊ตฌ์ถํ์ฌ main ๋ธ๋์น์ push ํ ๋๋ง๋ค ์๋์ผ๋ก Hugging Face Spaces์ ๋ฐฐํฌ๋๋๋ก CI/CD ํ์ดํ๋ผ์ธ์ ์์ฑ.
|
| 120 |
|
| 121 |
+
Flask ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ์กฐ ๋ฌธ์ :
|
|
|
|
|
|
|
|
|
|
| 122 |
|
| 123 |
+
๋ฌธ์ : ๋ก์ปฌ์์๋ ์ ์ ์๋ํ๋ ์ฑ์ด, Docker ๋ฐ Gunicorn ํ๊ฒฝ์ ์๋ฒ์ ๋ฐฐํฌ๋์ ModuleNotFoundError, TemplateNotFound ๋ฑ ๊ฒฝ๋ก ๊ด๋ จ ๋ฐํ์ ์ค๋ฅ ๋ฐ์.
|
| 124 |
|
| 125 |
+
ํด๊ฒฐ: gunicorn์ ์๋ ๋ฐฉ์์ ์ดํดํ๊ณ , Python์ **์๋ ๊ฒฝ๋ก ์ํฌํธ(relative import)**๋ฅผ ์ ์ฉํ์ฌ ๋ชจ๋ ๏ฟฝ๏ฟฝ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐ. ๋ํ Flask์ ๊ธฐ๋ณธ ๊ท์น์ ๋ง๊ฒ templates ๋ฐ static ํด๋๋ฅผ app.py๊ฐ ์๋ src ํด๋ ๋ด๋ถ๋ก ์ฌ๋ฐฐ์นํ์ฌ ๋ฌธ์ ๋ฅผ ์ต์ข
ํด๊ฒฐ.
|