[FastAPI] 알아보기

FastAPI

파이썬 표준 타입 힌트에 기초한 python3.6+의 api를 빌드하기 위한 웹 프레임워크

특징

파이썬 프레임워크 중 가장 빠른 프레임워크 - NodeJS나 Go와 대등할 정도로 높은 성능
사람에 의한 에러 감소 → 타입 힌트 기반이라?
짧고 쉬움. 직관적
openAPI 지원을 통해 자동 스웨거 생성 가능
starlette이라는 비동기 프레임워크를 기반으로 만들어졌고 비동기 처리로 uvloop라는 Cython으로 만들어진 libuv 라이브러리를 사용

Uvicorn

초고속 ASGI web server
단일 프로세스에서 uvloop기반 비동기 파이썬 코드 실행
uvicorn-FastAPI에서 uvicorn은 싱글 프로세스로만 작동.
따라서 Gunicorn을 통해 process를 동시에 여러개 돌려 병렬성 확보함
→ fastAPI 높은 성능을 낼 수 있음

Starlette

비동기적으로 실행할 수 있는 web application server
Uvicorn 위에서 실행

Gunicorn

서버이자 프로세스 관리자
다양한 web server와 상호작용할 수 있도록 구축됨
web server와 web application 사이에서 일어나는 모든 일을 처리
여러 web server와 통신
한 번에 많은 request를 처리하고 부하를 분산
실행중인 web application의 multi process 유지
파이썬 웹 어플리케이션을 배포할 때 일반적으로 아래 세가지를 섞어씀
web server - 요청을 수락하고 https 연결을 처리 ex) Nginx
WSGI server - web server의 요청을 받아 web application server에 전달 ex) Gunicorn
Web application server - 단일 요청을 처리할 수 있다는 것 외 아무것도 신경쓰지 않음 ex) Django

왜 WSGI를 사용해야하는지?

flask 같은 경우에는 가장 최소한의 기능들만 포함한 웹 프레임워크로 기본적으로 한번에 최대 하나의 요청까지만 처리. 따라서 실제 웹서비스 배포하는 경우 flask를 단일로 구성해서 배포하지 않고 WSGI를 사용해 중간에 웹 서버 엔진을 경유할 수 있도록 함

Pydantic

파싱을 도와주는 거지 validation check를 위한 것은 아님
다른 값이 들어오더라도 에러를 반환하지는 않음
값이 들어오면 그 타입으로 파싱은 해줌. 파싱 불가능한 데이터 형식이 들어왔을 경우에는 validation error를 raise한다.
→ 이건 좀 정리 필요할듯

Reference