모든 출처는 DRF공식문서이다.
조절(Throttling)
은 요청이 승인되어야 하는지 여부를 결정한다는 점에서 Permission
과 유사하다.
쉽게 말해, 임시상태를 나타내며 클라이언트가 API에 대해 수행할 수 있는 요청속도를
제어하는 데 사용된다.
주로 속도제어에 사용된다는 것이지 저장 서비스 대역폭에 대해 조절할 때나,
유료 데이터 서비스의 경우, 엑세스 중인 특정 수의 레코드에 대해 조절하는 경우도 있다.
인증/인가에서 authentication_classes
처럼 Throttle
도 클래스로 관리된다.
그래서 THROTTLE_CLASSES
세팅을 해줘야 된다.
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': [
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle'
],
'DEFAULT_THROTTLE_RATES': {
'anon': '100/day',
'user': '1000/day'
}
}
그래서 요청에 대해 Throttle
검사가 일어나는데, 실패했다면 exceptions.Throttled
에러가 발생한다.
클라이언트의 요청 식별에 x-Forwarded-For
의 HTTP
헤더 혹은
WSGI
환경 변수를 이용해 REMOTE_ADDRESS
를 조절한다.
- x-Forwarded-For
HTTP프록시나 로드 밸런서를 통해 웹 서버에 접속하는 클라이언트의 원 IP주소를 식별하는 표준헤더이다.
클라이언트와 서버 중간에서 트래픽이 프록시나 로드 밸런서를 거치면, 서버 접근 로그에는
프록시나 로드 밸런서의 IP만 담고 있다.
클라이언트의 원 IP 주소를 보기 위해X-Forwarded-For
요청의 헤더가 사용된다.
이 헤더는 디버깅, 통계, 그리고 위치 종속적인 컨텐츠를 위해 사용되고,
클라이언트의 IP주소와 같은 민감한 정보를 노출시킨다. 그래서 프라이버시를 주의해야 함
- 프록시
클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 시스템
쉽게 말해, 서버-클라이언트 사이에 중계기로서 대리로 통신을 수행하는 걸 말한다.
API 전체에서 지정된 요청 비율로 사용자를 제한한다.
사용자 ID는 제한 할 고유 키를 생성하는 데 사용된다.
(쉽게 말해 Stack에 쌓을 고유 키 값 설정에 대해 말하는 듯)
요청 비율 설정 방법은 두 가지가 있다.
rate
속성을 정의DEFAULT_THROTTLE_RATES['user']
설정
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': [
'example.throttles.BurstRateThrottle',
'example.throttles.SustainedRateThrottle'
],
'DEFAULT_THROTTLE_RATES': {
'burst': '60/min',
'sustained': '1000/day'
}
}