Spring E-tag , Spring Cache

Do_It·2023년 9월 29일
  1. Web 애플리케이션에서 cashe를 사용하는 경우
  • 클라이언트측 HTTP 캐시 사용 (프론트와 의논)
  • 서버측 Spring 캐시 사용 -> 이전 요청과 같다면 Spring Container에서

1) HTTP에서 캐시 활용

-Cashe Validation : 캐시 값 유효 검증
#1. If-Modified-Since 이용(시간)
HTTP에 304 Not Modified 라고 응답 내림
#2. E-tag 이용 (Id 비교)
HTTP Not modified 를 내림 -> 200 응답보다 속도가 빠름

-E-tag 이용 방법

  • EtagWebConfig 클래스 파일 생성
    • @Bean
      public FilterRegistrationBean shallowEtagHeaderFilterFilter(){
      FilterRegistrationBean filterFilterRegistrationBean = new FilterRegistrationBean<>();
      filterFilterRegistrationBean.setFilter(new ShallowEtagHeaderFilter());
      filterFilterRegistrationBean.addUrlPatterns("/v1/api/product/search/*"(여기는 원하는 API경로));
      return filterFilterRegistrationBean;


포스트맨으로 요청을 날려보면 응답값에 E-tag가 생긴것을 확인 할 수 있음
이 값을 요청시 hearders 부분에 키- If-None-Match / 값 - 응답때 받은 E-tag 값을 넣기


그러면 304요청이 된 것을 확인할 수 있음
서버에서는 쿼리를 실행해 이전 요청과 같은지 확인하기 때문에 크게 백엔드에서 큰 효과는 없고 클라이언트 쪽에서 효과가 큼

2) Spring Cache

  • implementation 'org.springframework.boot:spring-boot-starter-cache'
  • @EnableCaching을 시작 application에 추가
  • @Cacheable(value = "items",key = "#root.methodName")
  • 이렇게 할 경우 속도가 빨라짐 그러나! 수정,추가,삭제의 경우가 적용되지 않음

    ->@CacheEvict(value = "items",allEntries = true) 을 수정,추가,삭제에 추가해주기
    결과
    검색시 한자리수 ms가 됨
profile
오늘의 노력이 내일의 성장으로 이어지고 있음을

0개의 댓글