- Pycham 으로 스택 추적해보기 한번 해볼만 합니다.
- 사용되는 변수들이 어떤 값인지, 인스턴스라면 어떤 attr을 가지고 있는지 확인 할 수 있습니다.
- FastAPI는 Starlette 없이는 존재할 수 없을 것으로 보입니다.
- 기본 클래스도 Starlette 상속받아 만들어 졌고, Request, Response, Router, Middleware 등이 모두 Starlette을 베이스로 만들어 졌습니다.
- FastAPI 코드보다 starlette 코드를 더 많이 보게 됩니다.
- FastAPI 떼고, Starlette으로 앱을 만들어 볼수도 있겠다는 생각이 듭니다.
- Uvicorn ↔ Starlette ↔ FastAPI 역할이 좀더 선명하게 느껴집니다.
- Uvicorn: 외부 통신 인터페이스
- Starlette: 서버 내부 동작 인터페이스
- FastAPI: Starlette 위에 endpoint func 작성의 편의성 (Depends(), Pydantic을 통한 Param의 검증 등등 )얹어서 Uvicorn과 상호 작용
- 미들웨어에 대한 이해가 좀 더 생겼습니다.
- ServerErrorMiddleware → 커스텀 미들웨어들 → ExceptionMiddleware 로 Request 처리가 진행 됨을 알 수 있습니다.
- @app.exception_handler(Exception) 로 달아놓은 handler는 ExceptionMiddleware에서 처리가 되고, 그 외 서버에러는 ServerErrorMiddleware 에서 처리가 됩니다.
- 미들웨어들 블락킹 방지하기 위해 별도의 쓰레드 그룹을 다시 돌립니다.