[Django] Django Throttling

2024. 2. 2. 09:12Django

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

'Django' 카테고리의 다른 글

[Django] Middleware  (0) 2024.02.02
[Django] 로그 설정하는 법  (0) 2024.01.10
[Django] CHAR 적용하기  (1) 2024.01.02
[Django] Mysql-client 설치 오류  (0) 2023.11.12
Django Signals  (1) 2023.11.12