티스토리 뷰
ubuntu에 python3가 이미 설치되어 있어서 패스
$ apt install python3-venv
# 프로젝트별 Python 버전 관리를 위한 가상환경 패키지 설치
$ python3 -m venv ${env_name}
# 새 가상환경 생성
$ source ${env_name}/bin/activate
# 가상환경 활성화
$ deactivate
# 가상환경 비활성화/종료
$ pip install fastapi uvicorn
# fastapi,비동기 웹서버 uvicorn 설치
실행 및 문서화
main.py 작성 후 uvicorn main:app --reload로 서버 실행 (개발 모드)
localhost:${port}/docs에서 자동 생성된 Swagger API 문서 확인 가능
WSGI vs ASGI
웹 서버로부터 넘어오는 요청을 애플리케이션 서버(gunicorn/uvicorn)에서 처리하기 위한 인터페이스
- WSGI : 동기 방식으로 한 번에 하나의 요청만 처리 특정 API가 n초 소요될 때, 동시 요청 시 다른 사용자들은 n초 대기해야 함
- ASGI : 비동기 방식으로 여러 요청 동시 처리 가능, I/O 대기 시간 동안 다른 요청 처리 가능
하나의 master wsgi가 다수의 asgi server worker들을 관리하기도 한다-gunicorn으로 uvicorn worker를 실행함
-> 이건 예제로 다뤄봐야겠다. 워커사용
fastapi 아키텍처
uvicorn은 asgi 웹서버임. 비동기 처리를 지원하는 uvloop로 이벤트 루프를 구현함
uvicorn이 asgi에 맞게 fastapi에 전달하면 starlette이 구현한 라우팅시스템에 의해 end point handler가 실행되고
해당 핸들러가 async def
로 정의되어있다면 uvicorn의 이벤트루프에서 비동기로 실행됨
starlette는 AnyIO기반이어서 특정 이벤트루프에 의존하지 않는 점이 있음
[클라이언트] → [Nginx] → [Uvicorn (ASGI 서버)] → [FastAPI (Starlette)]
↳ [Pydantic (데이터 검증)]
↳ [라우팅, 미들웨어]
↳ [db, etc]
- Total
- Today
- Yesterday