ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django] Django Throttling
    Django 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

    '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
Designed by Tistory.