Django

[Django] Django Throttling

커다란숲 2024. 2. 2. 09:12
728x90
  • 특정 조건 하에 최대 호출 횟수를 결정하는 클래스
  • Request가 승인되어야 하는지 여부를 결정하는 점에서 permissions와 유사
  • Setting.py 통해 전역으로 설정 가능

  • AnonRateThrottle
    • 인증요청에는 제한을 두지 않고 비인증 요청에는 IP별로 횟수 제한
    • Throttle 클래스 별로 scope 1개만 지정 가능
    • Default : anon
  • UserRateThrottle
    • 인증요청에는 유저별로 횟수를 제한하고, 비인증 요청에는 IP별로 횟수 제한
    • Throttle 클래스 별로 scope 1개만 지정 가능
    • Default : user
  • ScoptedRateThrottle
    • ScoptedRateThrottle
    • 인증요청에는 유저별로 횟수 제한, 비인증 요청에는 IP별로 횟수 제한
    • API view 내 Throttle_scope 값을 읽어들여 API view 별로 다른 scope 적용

 

  • Rate
    • 지정 기간 내의 최대 호출횟수
    • {숫자}/{간격}처럼 표현
    • 숫자는 지정한 간격 내의 최대 요청 제한 횟수
    • 간격은 횟수를 초기화하는 시간
    • S(초), m(분), h(시), d(일)

 

클라이언트 식별 방법

  • X-Forwarded_For와 Remote-Addr HTTP 헤더는 throttling을 위해 클라이언트 IP 주소를 고유하게 식별하는데 사용
  • X-Forwarded_For 헤더가 있으면 사용, 없으면 Remote-Addr 헤더값 사용

 

Cache

  • REST Framework가 제공하는 throttle 클래스는 Django의 캐시 백엔드를 사용
  • 요청시마다 cache에서 timestamp list 값을 get-/set하므로 cache 성능이 중요
728x90