Skip to content
메모장
Go back

Django 요약

📂 Django (DRF)

1. Django Throttling

인증/비인증 사용자의 요청 횟수를 제한하는 DRF 기능이다. 여러 Throttle을 함께, API별로도 설정할 수 있다.

공식 문서에서는 이를 DoS 공격 방어책으로 쓰지 말 것을 경고한다.

전역 설정: REST_FRAMEWORK의 DEFAULT_THROTTLE_CLASSES(AnonRateThrottle, UserRateThrottle)와 DEFAULT_THROTTLE_RATES로 지정한다.

2. DRF Cache

DRF의 캐싱은 Django 캐싱을 그대로 이용한다. method_decorator로 cache_page, vary_on_cookie, vary_on_header 등을 적용할 수 있다.

Django Cache: 여러 레벨(특정 부분 ~ 전체 사이트) 캐시를 제공한다.

설정: settings.py의 CACHES에 BACKEND(바인딩 경로), LOCATION(데몬 위치 ip:port 또는 unix 소켓 경로)을 지정한다.

3. DRF Content Negotiation

Content Negotiation은 동일 URI에서 리소스의 서로 다른 표현(프레젠테이션)을 제공하기 위한 HTTP 메커니즘이다. 호출 시 어떤 프레젠테이션을 선택할지 결정하는 방법이다.

결정 방식:

관련 헤더(HTTP/1.1): Accept, Accept-Language 등이 있다.

4. DRF Serializer Relations

모델 간 관계(ForeignKey, ManyToManyField, OneToOneField)를 표현할 때 사용한다.

ModelSerializer는 기본적으로 PrimaryKeyRelatedField를 써서 관계 필드를 자동 생성한다.

예시: Album ↔ Track(FK, related_name='tracks') 관계로 다양한 관계 필드를 다룬다.

5. DRF Versioning

서로 다른 클라이언트별로 동작을 다르게 지정한다. 버전은 요청 URL 또는 헤더로 결정된다.

사용: 활성화되면 request.version으로 확인할 수 있다.

def get_serializer_class(self):
    if self.request.version == 'v1':
        return AccountSerializerVersion1
    return AccountSerializer

reverse: urls.py의 name/viewname을 다시 URL로 변환한다. 버전에 따라 생성되는 URL도 달라진다.

6. Django CacheOps

ORM 쿼리 결과를 Redis에 자동 캐싱해주는 라이브러리다.

설정(CACHEOPS_REDIS):

7. DRF 기본 인증과 인가

기준: Django 3.2 + DRF + Session

인증 과정:

  1. API 요청으로 ID/Password 등을 검증한 후 django.contrib.auth.login을 호출해 세션을 획득한다.
  2. 세션 갱신, 유저 Backend 확인·연결, CSRF Token 갱신(발급)을 진행한다. (보통 ModelBackend 사용)
  3. user_logged_in signal을 전송한 후 인증이 완료된다.

Django 기본 인증 중 쿠키를 쓰는 것은 세션이 유일하다. 세션 발급 시 CSRF Token을 갱신한다.


Share this post:

Previous Post
Spring Security + 카카오 OAuth2 로그인 구현 (DDD 아키텍처)
Next Post
Database summary