FastAPI
- Python으로 개발하는 성능 좋은 Web Framework으로 Web application을 개발 할때 사용
- Fast : NodeJS, Go와 동등한 빠른 속도 (with stalette, Pydantic)
- Fast to code : 개발의 생산성 향상
- Less bugs : 개발자의 버그를 줄일수 있음
- Intuitive : 좋은 Editor들을 지원 (VS Code)
- Easy : 익히기 쉬운 디자인으로 되어 있고, Doc가 읽기 쉬움
- Short : 적은 코드, 파라미터로 다양한 기능 지원
- Robust : 상품 출시를 쉽게 하고, Doc을 자동생성
- Standard-based : Open API(Swagger)사용 및 Json schema 사용
Uvicorn
- 가볍고 빠른 "ASGI" server (Async Server Gateway Interface)
- 한 개의 Process에서 asynchronous Python web code를 실행하게 해준다.
- uvloop : python built-in asyncio의 eventloop를 대체 가능한것으로 libuv를 사용하여 cython으로 구현된것으로 고성능 멀티 플랫폼 aync I/O라이버리리로 빠르고 안정적이다. (참고로 nodejs가 인기를 얻고 보급된 이유가 libuv덕분이라고 하고, uvloop는 nodejs보다 약 2배, Go와는 비슷한 수준의 성능을 보여준다.)
- https://hidekuma.github.io/python/uvloop/
Gunicorn
- 여러개의 Uvicorn을 Worker로 사용하여 Multi Process로 실행하고 관리하는 기능
- 동기적 처리와 병행 처리를 위한 좋은 방법이 될수 있다.
FastAPI with Uvicorn with Gunicorn
- ASGI server(Uvicorn)위에 Web Framework(FastAPI)를 올릴수 있으며, 이 FatAPI 기반으로 async Web application을 개발할 수 있다.
- 그리고, Multi Process(Gunicorn) Web Application을 개발을 할 수도 있다.
Docker image (uvicorn-gunicorn-fastapi-docker)