본문 바로가기

Framework/Django

[Django] Caching

반응형

Django 에서는 웹서버 개발에 필요한 여러가지 기능을 제공해주는데, 그 중 하나가 Cache 이다. 복잡한 연산의 경우 한번 실행된 결과를 캐싱해놓고 이를 재사용하는 식으로 성능을 향상할 수 있는데, 이 글에서는 Django cache framework 를 어떻게 설정하고 사용하는지 정리해본다.

1. Cache Framework

Django 에서 cache 를 사용하기 위해서는 settings 에 설정을 추가해줘야 한다. 설정은 settings CACHES 라는 속성으로 dict 형식으로 값을 저장해주면 된다.

 

아래 코드는 CACHES 의 기본값으로 아무런 설정이 없는 경우 Local-memory caching 을 사용하도록 설정되어 있다.

 

{
    "default": {
        "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
    }
}

 

CACHES 설정은 무조건 default cache 를 가지고 있어야 한다. default 외에도 여러개의 cache 를 추가할 수 있는데, 이때 cache 의 이름은 중복되지 않아야 한다.

2. Cache Backend

Django 에서 제공해주는 cache backend 로는 Memcached, Redis, Database caching, Local-memory cacing, Filesystem caching 등등 다양하나. 자세한 목록은  공식문서를 참고하면 된다. (https://docs.djangoproject.com/en/6.0/ref/settings/#backend)

 

그 중 이 글에서는 기본값인 Local-memroy caching Filesysstem caching, Redis 에 대한 설명과 예시를 정리했다.

- Local-memory caching

Local-memory caching django cache 의 기본값으로 아무 설정이 없는 경우 자동으로 사용된다. in-memory cache 를 사용하여 데이터를 저장한다.

 

# settings.py
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
        "LOCATION": "mystorage"
    }
}

 

Location 값은 in-memory 내부 저장소를 구분하는데 사용되는 값으로, 하나의 local-memory cache 를 사용하는 경우에는 생략해도 된다.

 

데이터 관리에는 LRU 전략을 사용한다.

- Filesystem caching

FIlesystem caching 은 데이터를 직렬화 한 후 별도의 파일에 나눠 저장한다. Filesystem caching 을 사용하기 위해서는 BACKEND 에서 FileBasedCache 를 사용하도록 설정하고, LOCATION 에 cache 파일들이 저장될 경로를 지정해줘야 한다.

 

#settings.py
FILE_CACHE_MAX_ENTRIES = 300
FILE_CACHE_CULL_FREQUENCY = 3

CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
        "LOCATION": BASE_DIR / "django_cache" / "file_cache",
        "OPTIONS": {
            "MAX_ENTRIES": FILE_CACHE_MAX_ENTRIES,
            "CULL_FREQUENCY": FILE_CACHE_CULL_FREQUENCY,
        }
    }
}

 

OPTIONS 을 추가하여 Filesystem caching 의 추가 설정을 해줄 수 있다.

 

MAX_ENTRIES 는 cache 에 저장할 최대 엔트리 개수로 이 값을 넘어가면 저장된 엔트리 중 일부를 삭제한다. 기본값은 300 이다.

 

 CULL_FREQUENCY 는 cache 에 저장된 엔트리가 MAX_ENTRIES 를 넘어선 경우 삭제할 엔트리의 개수를 결정하는 값이다. 비율을 계산해서 삭제 엔트리 개수를 정하는데, MAX_ENTRIES 에서 1 / CULL_FREQUENCY 만큼의 엔트리를 삭제한다. 기본값은 3이다.

- Redis

in-memory database redis 를 이용한 caching 으로 redis caching 을 사용하기 위해서는 미리 redis 서버를 실행해야 한다.

 

redis caching 을 사용하기 위해서는 먼저 redis 모듈을 설치해야 한다. 아래 명령어를 실행하여 redis 모듈을 설치한다.

 

$ pip install redis

 

Redis caching 사용을 위해서는 BACKEND RedisCache 를 지정해주고, LOCATION 에 사용할 redis url 을 지정해주면 된다.

 

# settings.py
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.redis.RedisCache",
        "LOCATION": "redis://localhost:6379",
    }
}

 

3. Cache framework 사용법

설정된 cache 를 사용하기 위해서는 django.core.cache 의 cache 객체를 참조하여 사용하면 된다.

 

from django.core.cache import cache

cache.set(k, v)

cache.get(k)

 

만약 CACHES 에 여러개의 cache 를 지정해 두었다면 아래와 같이 caches 객체에서 원하는 cache 를 꺼내와서 사용하면 된다.

 

from django.core.cache import caches

cache = caches['redis_cache']

[Reference]

- https://docs.djangoproject.com/en/6.0/topics/cache/

 

Django’s cache framework | Django documentation

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

- https://docs.djangoproject.com/en/6.0/ref/settings/#std-setting-CACHES

 

Settings | Django documentation

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

반응형

'Framework > Django' 카테고리의 다른 글

[Django] Logging  (0) 2025.12.29
[Django] Settings  (0) 2025.12.26
[Django] Model Query  (0) 2025.12.13
[Django] Model 정의와 Migration  (0) 2025.12.09
[Django] Django app 생성  (0) 2025.12.07