๐ฐ FastAPI ๊ณต์๋ฌธ์๋ฅผ ๋ณด๋ฉด์ ๊ฐ์ธ์ ์ผ๋ก ์ ๋ฆฌํ ๊ธ ์
๋๋ค.
FastAPI์ ๋ฐฐํฌ๋ ๋น๊ต์ ์ฝ๋ค.
๋ฒ์
FastAPI, Starlette, Pydantic์ ๋ฒ์ ์ด ํธํ๋๋๋ก ์ค์ ํ๋ค.
๋ฐฐํฌ
๋ฐฐํฌ์ ์์ ์ด ๋ถ๋ถ๋ค์ ์ ๊ฒฝ์จ์ผํ๋ค.
- Security - HTTPS
- Running on Start Up
- Restarts
- Replication(the number of processes running)
- Memory
- Previous steps before starting
Security -HTTPS
์ด ๋ถ๋ถ์ SSL ๊ฐ์ ๋ณด์ ์ธํ ์ ๊ตฌ๋งคํ์ฌ ํธ์คํ ์๋ฒ ๋ฑ์ ์ ์ฉ ํ๋ฉด๋๋ ๋ถ๋ถ์ด๋ฏ๋ก ๋์ด๊ฐ๊ฒ ๋ค.
Running on Start UP
์๊ฒฉ ์๋ฒ(ํด๋ผ์ฐ๋, ๊ฐ์๋จธ์ ๋ฑ)๋ฅผ ์ค์ ํ ๋, Uvicorn(๋๋ ์ ์ฌ ์๋ฒ)์ ์๋์ผ๋ก ์คํํ๊ฒ ์ธํ ํ๋ค.
๊ทธ๋ฌ๋ ์๋ฒ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ฒ๊ฐ ๋ค์ ์์๋๋ฉด ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์์ํ๊ธฐ ์ ๊น์ง๋ API ์๋ฒ๋ ์ฃฝ์ ์ํ๋ก ์ ์ง๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์๋ฒ ๊ตฌ์ถ ์ ์ฌ๋์ ๊ฐ์ ์์ด ํ๋ก์ธ์ค๊ฐ ํญ์ API(Uvicorn ๊ฐ์ FastAPI ์ฑ์ ์คํํ๋ ๊ฒ)์ ํจ๊ป ์คํ๋๊ธฐ๋ฅผ ์ํ๋ค.
์ด๋ฅผ ์ํด๋ ๋ณ๋์ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํด์ผ ํ๋ค.
์ด ๋ณ๋์ ํ๋ก๊ทธ๋จ์ DB์ ๊ฐ์ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ ๊ฐ์ด ์คํ๋๋๋ก ํด์ผํ๋ค.
์์ ๋๊ตฌ
- Docker
- Kubernetes
- Docker Compose
- Docker in Swarm Mode
- Systemd
- Supervisor
- Hadled internally by a cloud provider as part of their services
- Others....
Restarting
FastAPI App์ด ์คํ ์ค์ ์ธ๊ฐ์ ์ค์ ๋๋ ์ด๋ค ์ด์ ๋ก ๋ฒ๊ทธ๋ก ์ธํด ์ค๋ฅ๋ฅผ ๋ฐ์ ์ํจ๋ค.
์์ ์ค๋ฅ๋ FastAPI ์์ฒด์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
- ์ฝ๋์ ์ค๋ฅ๊ฐ ์์ผ๋ฉด FastAPI๋ ์ผ๋ฐ์ ์ผ๋ก ์ค๋ฅ๋ฅผ ๋ฐ์์ํจ ๋จ์ผ ์์ฒญ์ ํด๋น ์ค๋ฅ๋ฅผ ํฌํจํ๋ค.
- ํด๋ผ์ด์ธํธ๋ ํด๋น ์์ฒญ์ ๋ํด 500 Error๋ฅผ ๋ฐ๊ฒ ๋์ง๋ง App์ ์์ ํ ์ถฉ๋ํ๋ ๋์ ๋ค์ ์์ฒญ์ ๋ํด ๊ณ์ ์์ ์ ํ๋ค.
์ด๋ฌํ ํน์ฑ์๋ ๋ถ๊ตฌํ๊ณ ์ ์ฒด App์ ์ถฉ๋ ์ํค๋ ์ผ๋ถ ์ฝ๋๋ก ์ธํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์๋ฒ๊ฐ ์ค๋จ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ ๊ฒ์ด๋ค.
์ด๋๋ ์์ ํ ์๋ฒ๋ฅผ ๋ค์ ์์ํ๋ ๊ณผ์ ์ด ํ์ํ ๊ฒ ์ด๋ค.
์ด๋ฌํ ์ญํ ์ ํ๋ ๋๊ตฌ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Docker
- Kubernetes
- Docker Compose
- Docker in Swarm Mode
- Systemd
- Supervisor
- Hadled internally by a cloud provider as part of their services
- Others....
Replication(๋ณต์ )
FastAPI App์ ์ฌ์ฉํ๋ฉด Uvicorn๊ณผ ๊ฐ์ ์๋ฒ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ํ๋์ ํ๋ก์ธ์ค์์ ํ ๋ฒ ์คํํ๋ฉด ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์ ๋์์ ์๋ฒ์ค๋ฅผ ์ ๊ณตํ ์ ์๋ค.
๊ทธ๋ฌ๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋์์ ์คํํ๊ณ ์ถ์ ๊ฒ์ด๋ค.
๋จ์ผ ํ๋ก์ธ์ค๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ํด๋ผ์ด์ธํธ๊ฐ ์๊ณ , ์๋ฒ์ CPU๊ฐ ์ฌ๋ฌ ์ฝ์ด๊ฐ ์๋ ๊ฒฝ์ฐ, ๋์ผํ App์ผ๋ก ๋์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ ์๊ณ ๋ชจ๋ ์์ฒญ์ ํ๋ก์ธ์ค๋ค์๊ฒ ๋ถ๋ฐฐํ๋ค.
๋์ผํ API ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ผ๋ฐ์ ์ผ๋ก "Workers"๋ผ๊ณ ํ๋ค.
์๋ฒ์ ํ๋์ ํฌํธ์ IP ์ฃผ์ ์กฐํฉ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์์ ํ ์ ์๋ค.
๋ฐ๋ผ์ ๋์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ง๋ ค๋ฉด ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ๊ฐ "Worker ํ๋ก์ธ์ค"์ ํต์ ์ ์ ์กํ๋ ํฌํธ๋ฅผ ์์ ํ๋ ๋จ์ผ ํ๋ก์ธ์ค๊ฐ ์์ด์ผ ํ๋ค.
์ด๋ฐ ๋์์ ํ๋ ํ๋ก์ธ์ค๋ฅผ Process Manager๋ผ๊ณ ํ๋ค.
๋ค์ค ํ๋ก์ธ์ค์ ์์
์ด๋ฐ ๋ค์ค ํ๋ก์ธ์ค ๋ฐฉ์์ ๋ฌ์ฑํ๋ ค๋ฉด ์ฌ๋ฌ ๋๊ตฌ๋ค์ ์ฌ์ฉํด์ผ ํ๋ค.
- Gunicorn์ Uvicorn Worker๋ฅผ ๊ด๋ฆฌํ๋ค.
- Gunicorn์ IP ๋ฐ Port๋ฅผ ์์ ํ๋ Process Manager๊ฐ ๋๋ฉฐ ๋ณต์ ๋ ์ฌ๋ฌ Uvicorn Worker Process๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฅํ๋ค.
- Uvicorn Wokers๋ค์ ๊ด๋ฆฌํ๋ Uvicorn
- ํ๋์ Uvicorn Process Manager๋ IP ๋ฐ Port๋ฅผ ์์ ํ๊ณ ์ฌ๋ฌ Uvicorn Worker Process๋ฅผ ์์ํ๋ค.
- Kubernetes ๋ฐ ๊ธฐํ ๋ถ์ฐ ์ปจํ
์ด๋ ์์คํ
- Kubernetes ๊ณ์ธต์ ๋ฌด์ธ๊ฐ๊ฐ IP ๋ฐ Port๋ฅผ ์์ ํ๋ค.
- ๋ณต์ ๋ ๊ฐ๊ฐ์ ํ๋ Uvicorn Process๊ฐ ์คํ๋๋ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ๊ฐ์ง์ผ๋ก์จ ์ด๋ฃจ์ด์ง๋ค.
- ๋ณต์ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ ํด๋ผ์ฐ๋ ์๋น์ค
- ํด๋ผ์ฐ๋ ์๋น์ค ์์ฒด์ ์ผ๋ก ๋ณต์ ์ฒ๋ฆฌ๋ฅผ ํ ๊ฒ์ด๋ค.
- ์คํํ ํ๋ก์ธ์ค๋ ์ฌ์ฉํ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ ํ ์ ์๋ค.
Server Worker - Gunicorn, Uvicorn
Gunicorn์ WSGI ํ์ค์ ์ฃผ๋ก ์ฌ์ฉํ๋ App ์๋ฒ์ด๋ค. (Flask, Django์ ๊ฐ์ App์ ์ ๊ณตํ ์ ์๋ค.)
Gunicorn ์์ฒด๋ ASGI ํ์ค์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ FastAPI์ ํธํ๋์ง ์๋๋ค.
๊ทธ๋ฌ๋ Gunicorn์ Process Manager ์ญํ ์ ํ๊ณ ์ฌ์ฉ์์๊ฒ ํน์ Worker Process์ Class๋ฅผ ์๋ ค์ค๋ค.
๊ทธ๋ฐ ๋ค์ Gunicorn์ ํด๋น Class๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ์ด์์ Worker Process๋ฅผ ์์ํ๋ค.
์ด ์กฐํฉ์ ์ฌ์ฉํ์ฌ Gunicorn์ Process Manager์ ์ญํ ์ ํ๋ฉฐ Port์ IP๋ฅผ ๊ด์ฐฐํ๊ณ , Uvicorn Class๋ฅผ ์คํํ๋ Worker Process๋ก ํต์ ์ ๋ณด๋ฅผ ์ ์กํ๋ค.
๊ทธ๋ฆฌ๊ณ Gunicorn๊ณผ ํธํ๋๋ Uvicorn Worker Class๋ Gunicorn์ด ๋ณด๋ธ ๋ฐ์ดํฐ๋ฅผ FastAPI์์ ์ฌ์ฉํ๊ธฐ ์ํ ASGI ํ์ค์ผ๋ก ๋ณํํ๋ ์ผ์ ๋ด๋นํ๋ค.
Gunicorn, Uvicorn ์ค์น
pip install "uvicorn[standard]" gunicorn
Gunicorn ์คํํ๊ธฐ
4๊ฐ์ Process Worker ์์ฑ ํ ์คํ
python3 -m gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:80
worker 4๊ฐ๊ฐ ์คํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
Process Manager์ PID๋ 80863์ด๋ค.
gunicorn ์ต์
- --workers : ํ๋ก์ธ์ค ๊ฐฏ์๋ค (์ต๋ vcpu ๊ฐฏ์ * 2 ๋งํผ ์ค์ ํ๊ธฐ๋ฅผ ๊ถ์ฅ)
- --worker-class : ํ๋ก์ธ์ค๋ฅผ ๋ค์ค์ผ๋ก ์คํํ๋ ค๋ฉด ํ์ํ ์ต์ ์ด๋ค.(uvicorn.workers.UvicornWorker)
- --daemon : ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํํ๋ค.
- --access-logfile ./log.log : log.log ์ด๋ฆ์ผ๋ก ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๋ค.
์์
gunicorn main:app --workers 2 --worker-class uvicorn.workers.UvicornWorker --daemon --access-logfile ./log.log
์ปจํ ์ด๋ ๋ฐฐํฌ
Docker ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ํด๋ผ์ฐ๋ ๊ฐ์ ์๋ฒ์ ๋ฐฐํฌํ๋ฉด ๋๋ค.
'Back-end & Server > FastAPI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[FastAPI] Metadata Docs, Testing, Debugging (0) | 2024.02.24 |
---|---|
[FastAPI] Template (0) | 2024.02.23 |
[FastAPI] Background Task (0) | 2024.02.23 |
[FastAPI] ํ์ผ ๋ถํ (0) | 2024.02.23 |
[FastAPI] Relational Database (0) | 2024.02.22 |