[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