TIL63 - Throttling

Kiyong Lee·2022년 2월 12일
0

DRF

목록 보기
3/3

Throttling


모든 출처는 DRF공식문서이다.


1. 정의


조절(Throttling)은 요청이 승인되어야 하는지 여부를 결정한다는 점에서 Permission과 유사하다.

쉽게 말해, 임시상태를 나타내며 클라이언트가 API에 대해 수행할 수 있는 요청속도를
제어하는 데 사용된다.

주로 속도제어에 사용된다는 것이지 저장 서비스 대역폭에 대해 조절할 때나,
유료 데이터 서비스의 경우, 엑세스 중인 특정 수의 레코드에 대해 조절하는 경우도 있다.

  • 대역폭 : 특정 기능을 수행할 수 있는 주파수의 범위

2. Throttling setting


인증/인가에서 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 에러가 발생한다.


3. 클라이언트 식별 방법

클라이언트의 요청 식별에 x-Forwarded-ForHTTP 헤더 혹은
WSGI 환경 변수를 이용해 REMOTE_ADDRESS를 조절한다.

  • x-Forwarded-For
    HTTP프록시나 로드 밸런서를 통해 웹 서버에 접속하는 클라이언트의 원 IP주소를 식별하는 표준헤더이다.
    클라이언트와 서버 중간에서 트래픽이 프록시나 로드 밸런서를 거치면, 서버 접근 로그에는
    프록시나 로드 밸런서의 IP만 담고 있다.
    클라이언트의 원 IP 주소를 보기 위해 X-Forwarded-For 요청의 헤더가 사용된다.
    이 헤더는 디버깅, 통계, 그리고 위치 종속적인 컨텐츠를 위해 사용되고,
    클라이언트의 IP주소와 같은 민감한 정보를 노출시킨다. 그래서 프라이버시를 주의해야 함

  • 프록시
    클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 시스템
    쉽게 말해, 서버-클라이언트 사이에 중계기로서 대리로 통신을 수행하는 걸 말한다.

4. UserRateThrottle

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'
    }
}
profile
ISTJ인 K-개발자

0개의 댓글