Django - Throttling

mkhome·2021년 9월 8일
0

django

목록 보기
2/6

Throttle이란

  • 특정 조건 속에 최대 호출 회수를 제한, 결정하는 클래스
  • view에서 throttle_classes로 호출 및 사용이 가능하며 그 형태가 permission과 비슷함.
  • get_throttles 함수를 통해서도 접근이 가능한 것으로 보인다.

Setting

  • 프로젝트 전체에서 전역으로 사용할 경우 settings.py에서 사용이 가능하다
  • 보통 AnonRateThrottle, UserRateThrottle를 많이 사용하고 둘은 Authentication의 차이가 있음
  • Default_rate를 지정(scope에 따라서)

클라이언트 식별 방법

  • X-Forwarded_For와 Remote-Addr HTTP 헤더는 throttling을 위해 클라이언트 IP 주소를 고유하게 식별하는데 사용된다
  • X-Forwarded_For헤더가 있으면 사용되고, 없으면 Remote-Addr 헤더 값이 사용된다
    • 비인증요청에 대해서는 IP를 기준으로 카운트하게되는데, 이 때 Remote-Addr WSGI 변수값을 참조하게 되면 문제가 발생하게 된다
    • 로드 밸런서를 통할 경우 여러 유저들의 Remote-Addr 의 값이 동일해지고, 이는 여러 유저가 같은 timestamp를 가지게 되기 때문이다
      그렇기 때문에 X-Forwarded_For 헤더값이 Remote-Addr 값에 우선하게 된다

비회원에 대한 Throttling

  • 현재 각 비회원에 대해 요청을 제한을 둘 예정이며 request.user가 없을 때 설정을 따로 진행했으나 모든 비회원 유저에 대해 같은 제한을 제시(1/minute 을 각기 다른 ip에서 요청했음에도 실패)
  • 즉 다른 IP에서 보낸 요청을 다르게 받아들일 수 있도록 작업이 필요할 것으로 보임

0개의 댓글