-
[Django] Django ThrottlingDjango 2024. 2. 2. 09:12728x90
- 특정 조건 하에 최대 호출 횟수를 결정하는 클래스
- 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