Django 라이브러리 소개 - Ratelimit 이상 트래픽 방지

유용한 장고 라이브러리 소개글, 일단 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/

 

Django Ratelimit — Django Ratelimit 3.0.1 documentation

© Copyright 2020, James Socol Revision cc1c3d70.

django-ratelimit.readthedocs.io

 

Redis 로 API rate limit 해결하기

이 솔루션이 좀 더 현실적인 해결책으로 보인다. 고수들의 말씀을 잘 들어야해

일단 Redis를 설치해야하는 이유가 생긴다. 필수적인듯

메시지 큐가 일단 받아서 로드를 조정할 객체를 한놈으로....한놈만 팬다.

 

우리의 어플리케이션을 동시에 여러 유저들이 사용하면 주어진 rate limit을 쉽게 초과해버리기 때문입니다. 그래서 이번 포스팅에서는 Redis로 간단한 메시지큐를 구현하여 rate limit 문제를 해결하는 방법을 소개해드리고...

 

원본 페이지로 이동해서 봐주는 센스가 필요하죠~~~

https://down-develope.tistory.com/24

 

[Django] Redis로 API rate limit 해결하기

백엔드 개발을 하다보면 외부 서비스가 제공하는 API를 사용하는 경우가 많습니다. 예를 들어, 다른 서비스의 유저 정보를 조회를 하거나, 다른 어플리케이션의 status를 확인하는 경우 등 입니다.

down-develope.tistory.com

먼저 가세요...요청이 오면 양보해라~~

RODNAE Productions 님의 사진, 출처: Pexels