๐[Flask] Flask์ ๋ํด์โฆ
Flask์ ๋ํด์โฆ
1. Flask๋?
ํ๋ผ์คํฌ(Flask)
๋, ํ์ด์ฌ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ์น ํ๋ ์์ํฌ
์ด๋ค.
๋ค๋ฅธ ํ์ด์ฌ ๊ธฐ๋ฐ์ ์น ํ๋ ์์ํฌ์ธ Django
์ ๋นํด ๊ตฌํ๋์ด ์๋ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ๋ค๋ ๋จ์ ์ด ์๋ ๋ฐ๋ฉด, ๋ถ์กฑํ ๊ธฐ๋ฅ๋ค์ ์ง์ ๊ตฌํํ์ฌ ์ธ ์ ์๋ค๋ ๋ฉด์์ ๊ฐ๋ณ๋ค๋ ์ฅ์ ์ด ์๋ค.
ํนํ API ์๋ฒ๋ฅผ ๋ง๋ค๊ธฐ์ ๋งค์ฐ ํธ๋ฆฌํ ํ๋ ์์ํฌ๋ก ์๋ ค์ ธ์๋ค.
[ํ์ด์ฌ ์น ํ๋ ์์ํฌ ์ข ๋ฅ]
- Django
- Flask
- FastAPI
- WebPy
โฆ
1-1. Flask์ ์ฅ์
๊ฐ๋ณ๊ฒ
๋ฐฐ์ธ ์ ์๋ค!- Python, HTML + CSS + JS๋ง ํ ์ค ์๋ฉด ๊ธ๋ฐฉ ๋ฐฐ์ด๋ค!
๊ฐ๋ณ๊ฒ
์ฌ์ฉํ ์ ์๋ค!โ- ์ฝ๋ ๋ช ์ค์ด๋ฉด ๊ธ๋ฐฉ ๋ง๋ ๋ค!
๊ฐ๋ณ๊ฒ
๋ฐฐํฌํ ์ ์๋ค!virtualenv
์ Flask๊น๊ณ ๋ฐ๋ก ๋ฐฐํฌํ๋ฉด ๋๋ค!
- ๊ธฐ๋ฅ๋ค์ ์ง์ ๊ตฌํํ์ฌ ์ฌ์ฉํ ์ ์์ด
๊ฐ๋ณ๋ค
- Django์ ๋ฌ๋ฆฌ ์ ๊ณต ๊ธฐ๋ฅ์ด ์ ์ง๋ง, ๋จ์ ์ ์ฅ์ ์ผ๋ก ์นํ์์ผ ๊ธฐ๋ฅ์ ํ์ํ ๋งํผ ๊ตฌํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ณ๊ฒ ๋ง๋ค ์ ์๋ค!
1-2. Flask์ ๋จ์
Django
์ ๋นํด ์์ ๋๋ ๋์ผ๋ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด ์ ์- ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ธฐ ์ํด์ ํด์ผํ ์์ ๋ค์ด ๋ง์
1-3. Flask์ Django์ค ์ ํ
๊ฐ๋ฒผ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ Flask, ๋ฌด๊ฑฐ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ Django๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ณ๋ค? โจ ์ด๋์ ๋ ๋ง๋ ๋ง์ด์ง๋ง, ์์ ์ด ์์ ์๋ ํ๋ ์์ํฌ๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค!
2. ๋ผ์ฐํ
์๋ฒ์ ์ ์ํ๋ ์ฃผ์๋ ๋ค์ํ๋ฐ, ์๋ฒ์ ์ฃผ์๊ฐ์ ๊ด๊ณ๋ฅผ ๋ช ํํ๊ฒ ํด์ฃผ๋๊ฒ ํ์ํจ
- ์์
- http://localhost: 5000/ : ํํ์ด์ง๋ก ๊ฐ๋ ์ฃผ์
- http://localhost: 5000/read/1/ : id=1์ธ ๊ธ์ ์ฝ๋ ์ฃผ์
- http://localhost: 5000/create/ : ์์ฑํ๋ ์ฃผ์
- http://localhost: 5000/upadate/1 : id=1์ ๊ฐฑ์ ํ๋ ์ฃผ์
- ์ด๋ค ์ฃผ์๊ฐ ์ด๋ค ์ญํ ์ ๋ด๋นํ๊ณ , ์ด๋ค ์์ฒญ์ ์ด๋ค ํจ์๊ฐ ์ฒ๋ฆฌํ ๊ฒ์ธ์ง๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฑ์ ์์
์ โ๋ผ์ฐํ
(routing)โ์ด๋ผ๊ณ ํจ.
- ์ด๋ฅผ ํ ์ ์๋๋ก ํ๋ ์ฅ์น๊ฐ โ๋ผ์ฐํฐโ
- ์์
# '/'๋ก ์ ์ํ์ ๋, index()๊ฐ ํธ์ถ๋์ด 'Index Page'๊ฐ ์๋ตํจ
@app.route('/')
def index():
return 'Index Page'
# '/hello'๋ก ์ ์ํ์ ๋ hello()๊ฐ ํธ์ถ๋์ด 'Hello World'๊ฐ ์๋ตํจ
@app.route('/hello')
def hello():
return 'Hello World'
3. ์ฑ๋ด/๋ฐ์ดํฐ๋ถ์ - ๋ฉ์๋ ํน์ ์ด๋ก ๋ฐ ๊ฐ๋
์งํ์ค์ธ ํ๋ก์ ํธ์์ ์ฑ๋ด ๋ชจ๋ธ(๊ตฌ๊ธ BERT)์ ๊ฐ์ ธ์ ์ฌ์ฉํ๋๋ฐ, ์ด ์ฑ๋ด ์์ง ์๋ฒ๋ฅผ flask๋ก ๊ตฌํํ๋ค.
๊ทธ๋์ ๊ฐ๋ตํ๊ฒ๋๋ง ์ ์ด๋ณธ๋ค.
-
Cosine_Similarity
์ฝ์ฌ์ธ ์ ์ฌ๋๋ ๋ ๋ฒกํฐ ๊ฐ์ ์ฝ์ฌ์ธ ๊ฐ๋๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ ์ ์๋ ๋ ๋ฒกํฐ์ ์ ์ฌ๋๋ฅผ ์๋ฏธํฉ๋๋ค.
๋ ๋ฒกํฐ์ ๋ฐฉํฅ์ด ์์ ํ ๋์ผํ ๊ฒฝ์ฐ์๋ 1์ ๊ฐ์ ๊ฐ์ง๋ฉฐ, 90ยฐ์ ๊ฐ์ ์ด๋ฃจ๋ฉด 0, 180ยฐ๋ก ๋ฐ๋์ ๋ฐฉํฅ์ ๊ฐ์ง๋ฉด -1์ ๊ฐ์ ๊ฐ๊ฒ ๋ฉ๋๋ค.
์ฆ, ๊ฒฐ๊ตญ ์ฝ์ฌ์ธ ์ ์ฌ๋๋ -1 ์ด์ 1 ์ดํ์ ๊ฐ์ ๊ฐ์ง๋ฉฐ ๊ฐ์ด 1์ ๊ฐ๊น์ธ์๋ก ์ ์ฌ๋๊ฐ ๋๋ค๊ณ ํ๋จํ ์ ์์ต๋๋ค.
์ด๋ฅผ ์ง๊ด์ ์ผ๋ก ์ดํดํ๋ฉด ๋ ๋ฒกํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฐฉํฅ์ด ์ผ๋ง๋ ์ ์ฌํ๊ฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
-
squeeze()
squeezeํจ์๋ ์ฐจ์์ด 1์ธ ์ฐจ์์ ์ ๊ฑฐํด์ค๋ค.
๋ฐ๋ก ์ฐจ์์ ์ค์ ํ์ง ์์ผ๋ฉด 1์ธ ์ฐจ์์ ๋ชจ๋ ์ ๊ฑฐํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐจ์์ ์ค์ ํด์ฃผ๋ฉด ๊ทธ ์ฐจ์๋ง ์ ๊ฑฐํ๋ค.
[์์ ]
import torch
x = torch.rand(1, 1, 20, 128)
x = x.squeeze() # [1, 1, 20, 128] -> [20, 128]
# 1๋ฒ ์์น์ ์ฐจ์ 1์ ์ญ์
x2 = torch.rand(1, 1, 20, 128)
x2 = x2.squeeze(dim=1) # [1, 1, 20, 128] -> [1, 20, 128]
- idxmin() & idxmax()
์ต๋๊ฐ์ด๋ ์ต์๊ฐ์ ๊ฐ๋ ์ธ๋ฑ์ค๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฉ์๋- idxmin(): ์ต์๊ฐ์ ๊ฐ๋ ์ธ๋ฑ์ค ๋ ์ด๋ธ ์ถ๋ ฅ
- idxmax(): ์ต๋๊ฐ์ ๊ฐ๋ ์ธ๋ฑ์ค ๋ ์ด๋ธ ์ถ๋ ฅ
5. ์ค๋ฅ
๊ฐ๋ฐ ํน์ ๊ณต๋ถํ๋ฉด์ ๋ฐ์ํ๋ ์ค๋ฅ์ ํด๊ฒฐ๋ฒ ์ ๋ฆฌ
- ๋ชจ๋ ์๋ฌ
ModuleNotFoundError: No module named 'flask'
- ์์ธ
- ํ์ฌ ํ๋ผ์คํฌ๊ฐ ์ค์น๋์ด์์ง ์์.
- ํด๊ฒฐ๋ฐฉ๋ฒ
- ํฐ๋ฏธ๋์
pip install flask
์ ๋ ฅ
- ํฐ๋ฏธ๋์
๋๊ธ๋จ๊ธฐ๊ธฐ