FastAPI 미들웨어

미들웨어

http 요청과 응답이 처리되기 전에 실행되는 함수를 말한다. http 요청이 엔드포인트 함수로 전달되기 전이나 응답이 외부로 반환되기 전에 실행된다. 예를 들면 다음과 같은 일을 한다

  • 요청 데이터 처리
  • 요청/응답 데이터 형식화
  • 인증/인가
  • 로깅/모니터링
  • 캐싱
  • 오류 처리
  • api 속도 제한 : 특정 시간동안 특정 사용자나 ip 주소로부터의 요청 횟수를 제한한다.

fastapi 가 제공하는 기본 미들웨어s

  1. CORSMiddleware cors활성화
  2. GzipMiddleware http응답을 gzip으로 압축
  3. HTTPSRedirectMiddleware http 요청을 https로 리디렉션
  4. TrustedHostMiddleware 특정 호스트에서만 요청을 허용s

그 외에도 다른 asgi 미들웨어나 스탈렛이 제공하는 미들웨어를 사용할 수 있다.

콘텍스트 변수

contextvars는 비동기 작업간에 데이터를 격리해 저장하거나 접근할 수 있다. 콘텍스트란 실행중인 코드의 환경을 말한다.

  • 코드 실행중에 사용되는 변수와 현재의 값
  • 현재 실행중인 코드의 위치, 실행 경로, 호출 스택의 상태
  • 환경 구성 및 설정
  • 실행중인 코드가 액세스하는 파일, 네트워크 연결, 데이터베이스 연결 등의 리소스

비동기 작업은 각각 별도의 콘텍스트를 가진다. 서버가 초기화될 때 전역변수로 생성하면 콘텍스트 변수에 설정된 값이 여러 요청이 동시에 수행되더라도 잘 유지될 수 있다.

로깅

미들웨어와 콘텍스트 개념을 모아서 로깅 모듈을 활용해 유저의 정보를 포함하는 모듈을 만들 수 있다. 현재 모놀리식 아키텍처(한 서버에서 여러 서비스가 수행됨)로 구성되어있는데 마이크로 서비스 아키텍처(여러 서버에서 여러 서비스가 운영됨)으로 이동된다면 유저의 요청이 어느 서비스에서 어느 서비스로 전달되어 처리되고 있는지 추적해야한다.