유용한 장고 라이브러리 소개글, 일단 IP를 이용한 위치정보, 접속 브라우저 정보를 가져오는 라이브러리, 그리고 어뷰징등의 잘못된 접근을 간단하게 막아주는 ratelimit 기능을 소개해 보자.
현재 듣고 있는 장고 강의에 소스에 포함된 내용을 공부할 겸 추려본다 - Django 실전 프로젝트 1 - URL Shortener 서비스 ( 패스트캠퍼스 )
Ratelimit 기능
초당 몇회, 분당 몇회 이상의 요청이 들어오면 자동으로 조정해서 서비스를 안주던, 메인페이지로 redirect 를 하던 처리를 할 수 있도록 간단한 wrapper 로 구현이 가능하다.
일단 쉽다! 이게 장점이지머~~~
설치는
$ pip install django-ratelimit
간단한 사용법은
## 라이브러리 선언하고,
from ratelimit.decorators import ratelimit
## IP address 가 기준 값...
@ratelimit(key='ip')
def myview(request):
# ...
## IP address 가 기준으로 시간당 100번 발생하면 알려줘라..
@ratelimit(key='ip', rate='100/h')
def secondview(request):
# ...
## 요청되는 method 에 따라 다르게 적용하기...
def test_stacked_methods(self):
"""Different methods should result in different counts."""
@ratelimit(rate='1/m', key='ip', method='GET')
@ratelimit(rate='1/m', key='ip', method='POST')
def view(request):
return request.limited
assert not view(rf.get('/'))
assert not view(rf.post('/'))
assert view(rf.get('/'))
assert view(rf.post('/'))
라이브러리 문서 페이지는 여기
https://django-ratelimit.readthedocs.io/en/stable/
Redis 로 API rate limit 해결하기
이 솔루션이 좀 더 현실적인 해결책으로 보인다. 고수들의 말씀을 잘 들어야해
일단 Redis를 설치해야하는 이유가 생긴다. 필수적인듯
메시지 큐가 일단 받아서 로드를 조정할 객체를 한놈으로....한놈만 팬다.
우리의 어플리케이션을 동시에 여러 유저들이 사용하면 주어진 rate limit을 쉽게 초과해버리기 때문입니다. 그래서 이번 포스팅에서는 Redis로 간단한 메시지큐를 구현하여 rate limit 문제를 해결하는 방법을 소개해드리고...
원본 페이지로 이동해서 봐주는 센스가 필요하죠~~~
https://down-develope.tistory.com/24
RODNAE Productions 님의 사진, 출처: Pexels