티스토리 뷰

반응형

HTTP GET 캐시 기능?!

https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/GET

어느날 한 번 http에 대해서 공부해야겠다고 생각하고 하다가 캐시 가능이라는 것이 눈에 띄었다.

 

오?! 뭐지 캐시가 된다고 ?!!

 

그래서 눌러서 자세히 한 번 봤다.

 

응답에 대해서 캐시가 가능하다는 것이다.  다음 요청에 대한 응답 값으로 해당 캐시 값으로 대체한다는 것이다.

 

여기에서 나는 두개의 의문점을 가졌다.

1.  디테일 정보에 대해서도 각 아이디에 대해서 캐시를 할까?
2. 그럼 디비를 진짜 들르지 않고 가져올까?

 

그래서 정말 간단한 세팅으로 준비해봤다.(저는 아무래도 장고가 편해서 장고로 프로젝트를 구성했습니다.)

 

 

모델

class Memo(models.Model):
    title = models.CharField(max_length=30, blank=False)
    content = models.TextField()
    objects = models.Manager()

    def __repr__(self):
        return f'id: {self.id}::{self.title}::{self.content[:5]}'

 

 

views.py

class MemoAPIView(APIView):
    @method_decorator(cache_page(60))#1
    def get(self, request, pk):
        memo = Memo.objects.get(id=pk)#2
        print('cache')#3
        return Response(str(memo))

 

urls.py

urlpatterns = [
    path('<int:pk>', MemoAPIView.as_view()),
]

 

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.redis.RedisCache',
        'LOCATION': 'redis://127.0.0.1:26379'
    }
}

LOGGING = {
    'version': 1,
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
        }
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'propagate': True,
        },
        'django.db.backends': {
            'level': 'DEBUG',
            'handlers': ['console'],
        }
    }
}

첫 번째 요청

그 이후의 요청들

 

확인해봤을 때 처음 캐시 되기 전에는 함수를 타고 응답을 내려주지만 그 이후에는 캐시된 값으로 바로 가져오는 것을 알 수 있다.

 

그렇다면 다른 디테일 페이지에 대해서는 어떻게 작동할까?

 

 

그거에 대해서는 걱정할 필요가 없었다.

각 디테일 요청에 대한 값을 캐싱한다.

 

그러면 이런 것은 어디에 쓰이면 좋을까?

데이터 변화가 거의 없고, 있어도 영향이 없는 url
대표적인 예로 과거 통계 데이터를 동적으로 처리하기 위해 쿼리로 날려주는 url
아이템 리스트를 뿌려주는 url

위의 언급처럼 주로 데이터의 변화가 없는 http get 페이지에 쓰이면 극적인 효과를 볼 수 있을 것 같다.

첫 번째 이점은 db 부하를 줄인다는 점

두 번째 이점은 빠른 응답이 있겠다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함