Cache에 대해서 알아보자.

 

웹 캐시(영어: web cache) 또는 HTTP 캐시(HTTP cache)는 서버 지연을 줄이기 위해 웹 페이지, 이미지, 기타 유형의 웹 멀티미디어 등의 웹 문서들을 임시 저장하기 위한 정보기술이다. 웹 캐시 시스템은 이를 통과하는 문서들의 사본을 저장하며 이후 요청들은 특정 조건을 충족하는 경우 캐시화가 가능하다.[1] 웹 캐시 시스템은 일종의 어플라이언스나 컴퓨터 프로그램을 의미할 수 있다. 동일한 서버에 다시 접근할 때에는 근처에 있는 프록시 서버의 웹 캐시에 저장된 정보를 불러오므로 더 빠른 열람이 가능하다.

 

출처: https://ko.wikipedia.org/wiki/%EC%9B%B9_%EC%BA%90%EC%8B%9C

 

소규모 사이트에는 굳이 필요 없을 수 있겠으나 사이트의 규모가 커지면 캐시를 적용하는 것을 고려해야한다. (사이트의 응답속도에 큰 차이가 있기 때문이다.)

 

 

1. Settings/dev.py 수정

...

CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
        "LOCATION": "wagtail project 폴더의 경로"
    }
}

...

참고로 경로를 복사하면 User\mycomputer\desktop.. 이런 형식으로 되어 있을텐데 \을 /로 경로 수정해줘야한다. 

경로는 cache가 저장될 위치를 의미하는데 원하는 경로가 있으면 수정해주면 된다. 

 

 

2. Templates 사용

 

blog/blog_listing_page.html

{% load cache %}

<div class="container">
        {% for post in posts %}
            {% cache 604800 blog_post_preview post.id %}
                <div class="row mt-5 mb-5">
                    <div class="col-sm-3">
                        {% image post.banner_image fill-250x250 as blog_img %}
                        <a href="{{ post.url }}">
                            <img src="{{ blog_img.url }}" alt="{{ blog_img.alt }}">
                        </a>
                    </div>
                    <div class="col-sm-9">
                            <h2>{{ post.custom_title }}</h2>
                            {% if post.specific.subtitle %}
                                <p>{{ post.specific.subtitle }}</p>
                            {% endif %}
                            <a href="{{ post.url }}" class="btn btn-primary mt-4">{{ post.title }}</a>
                        </a>
                    </div>
                </div>
                <br>
            {% endcache %}
        {% endfor %}
</div>

604800은 초를 의미하는데 604800초는 1주일을 의미한다. 캐시의 유지 기한이다. 설정을 해놓지 않으면 영원히 캐시가 유지된다. 그리고 blog_post_preview는 캐시 조각의 이름을 정해준 것이다. 마지막 post.id 각각의 post에 고유의 cache 아이디를 부여해준 것이다. 

 

주의)

이미 캐싱 되어 있는 데이터에 추가적인 정보를 넣게 되면 나타나지 않는다. 캐싱 되어 있어 그저 기존의 정보를 던져주기 때문이다. 그럴 때에는 직접 캐시 파일들을 삭제하거나 

from django.core.cache import cache
cache.clear()

Django shell을 열어서 위 명령어를 실행시켜주면 된다. 

 

 

추가)

 

다만 일부 정보만 주기적으로 업데이트 되고 나머지는 그렇지 않다면 모든 캐시를 삭제하는 방법은 비효율적이다. 이럴경우 필요한 곳에서만 캐쉬를 삭제하고 업데이트 해주는 방법이 맞다고 볼 수 있다. 

 

from django.core.cache import cache
from django.core.cache.utils import make_template_fragment_key


class BlogDetailPage(Page):

	....

  def save(self, *args, **kwargs):
    key = make_template_fragment_key("blog_post_preview", [self.id])
    cache.delete(key)
    return super().save(*args, **kwargs)

블로그 상세 페이지가 자주 업데이트 된다고 가정한다면 블로그 상세 페이지가 새로 save될 때마다 실행하는 save Magic Method를 만든다. 

 

key = make_template_fragment_key(something)는 something이라는 캐시를 템플릿에서 찾아서 key라는 변수에 저장한다. 그리고 cache.delete(key)를 사용하여 지우고 리턴해준다. 

'Back-End > Wagtail, Django' 카테고리의 다른 글

Wagtail Tags  (0) 2021.12.01
Wagtail Ajax Template  (0) 2021.12.01
Wagtail Recaptcha  (0) 2021.11.28
Wagtail Rich Editor Extend  (0) 2021.11.27
Wagtail API v2 Serializing Rich Text  (0) 2021.11.25

+ Recent posts