- FastAPI는 ASGI 프레임워크 중 하나로, 비동기적으로 작동하는 uvicorn과 함께 사용된다.
- 구조는 FastAPI - Starlette - Uvicorn - uvloop - libuv 순으로 이루어져 있다.
- Python에서는 Global Interpreter Lock(GIL)을 사용하여 race condition을 방지한다.
- 이는 멀티스레딩을 제대로 지원하지 않지만, uvicorn은 비동기 처리를 위해 멀티 프로세싱 방식을 사용한다.
- 이렇게 실행된 여러 개의 프로세스는 각각 독립적으로 요청을 처리한다.
- CGI는 웹서버가 작성된 프로그램을 실행하기 위한 인터페이스로, 프로세스를 생성하여 실행한다.
- 반면, WAS는 쓰레드를 사용합니다. WSGI는 웹 서버와 웹 프레임워크 사이에서 요청을 받고 응답을 주는 역할을 한다.
- ASGI는 WSGI의 단점인 비동기 처리의 어려움을 해결하는 솔루션읻.
- Uvicorn은 libuv를 기반으로 하는 ASGI 웹 서버입니다. 이는 요청을 받고 처리한 후 libuv의 이벤트 루프에 등록하여 응답하는 역할을 한다.
- FastAPI에서는 비동기 처리 라이브러리를 사용할 경우 async/await를 사용하고, 그렇지 않은 경우에는 def를 사용하는 것이 권장된다.
- 이는 실행 방식에 따른 차이에서 기인하는데 async def는 fastapi 쓰레드 풀에서 생성되며 def는 메인 쓰레드를 사용한다.