My Image

Django 포스팅

[Django] 파일로 관리하는 캐시 프레임워크 사용하기

Doyeon0430 | 2023년 07월 25일

Django 이미지

이번시간에는 장고에서 제공하는 캐시 프레임워크를 사용하겠습니다.

캐시란 데이터를 저장해두는 임시장소로 컴퓨터의 처리 속도를 향상시켜줍니다.

장고는 공식 홈페이지에서 다양한 캐싱 기능을 제공하며

주로 사용하는 캐시 백엔드는 Memcached, Redis, Filebased 등이 있습니다

주소 : 장고 캐시 프레임워크

 

  1. 캐시 프레임워크 - Filebased

  2. 캐시 프레임워크 - settings.py

  3. 캐시 프레임워크 - views.py

 

 

1. 캐시 프레임워크 - Filebased

저는 Filebased 방식을 선택했습니다.

파일을 이용하여 캐싱하는 방식으로 가장 단순한 구성을 가지고 있습니다.

게다가 직접 두 눈으로 데이터를 확인할 수 있는게 매력적입니다.

장고 공식사이트에서 Filedbased에 많은 수의 파일을 저장하면 느려질 수 있다고 경고했습니다.

작은 규모의 어플리케이션에 적합하니 참고하시기 바랍니다.

 

 

2. 캐시 프레임워크 - settings.py

캐시를 사용하려면 settings에서 기본 설정을 해야합니다.

 

settings.py

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': os.path.join(BASE_DIR, 'cache'), 
    }
}

BACKEND는 위와 같은 클래스를 입력해서 캐시 백엔드를 설정합니다.

LOCATION은 캐시 파일이 저장될 디렉토리 경로이며 저같은 경우 최상단 루트 디렉토리를 입력했습니다.

 

 

3. 캐시 프레임워크 - views.py

캐시 백엔드를 설정하면 views.py에서 활성화할 수 있습니다.

영화진흥위원회에서 API를 가져올 때 캐시 기능을 사용했습니다.

자세한 내용은 아래 링크를 통해 참고바랍니다.

주소 : 영진위 API 설치

 

views.py

from django.core.cache import cache

def tag(request):
    ...

    cached_data = cache.get('box_office_data')

    if cached_data:
        print("캐시 데이터가 존재합니다.")
        movie_list = cached_data['movie_list']

    else:
        movie_list = []
        for movie in movies:
            rank = movie.find('rank').text
            movieNm = movie.find('movieNm').text
            openDt = movie.find('openDt').text
            audiAcc = movie.find('audiAcc').text
            movie_list.append({'rank': rank, 'movieNm': movieNm, 'openDt': openDt, 'audiAcc': audiAcc})

        print("캐시 데이터가 존재하지 않습니다.")
        cache.set('box_office_data', {'movie_list': movie_list}, 3600)  # 1시간(3600초) 동안 캐시 유지

cached_data라는 새로운 변수를 생성해서 저장될 파일을 만들고 캐시 메모리를 저장합니다.

If문으로 값이 있다면 바로 사용하고, 값이 없다면 movie_list에 값을 담은 후에 사용하도록 만들었습니다.

cahce.set을 통해 업데이트 시간을 지정할 수 있습니다.

댓글 (0)

    댓글이 없습니다.

간편 댓글 작성

My Image My Image My Image My Image