• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

setCachePeriod 메소드에 대해..

20.12.22 02:55 작성 조회수 570

0

setCachePeriod 메소드에 20으로 설정했다면 브라우저(client) 편 컴퓨터 캐시에 해당 리소스가 20초간 유지되고, 그 후에는 다시 해당 리소스를 요청해서 응답코드가 200이 된다는 건가요?

이것이 아니라면 전후의 차이가 정확히 무엇인지 다시한번 자세한 설명 좀 부탁드립니다..

답변 5

·

답변을 작성해보세요.

0

long 타입의 값을 표현하는 방법입니다.

0

알려주신 WebConfig 클래스 코드를 사용해서 구동시켜보니 304 응답코드가 가 더이상 나타나지는 않았습니다!(당연한거지만...)

그리고 알려주신 저 코드로 수정하여 다시 확인해보았더니, 첫 정적 자원 요청 후 10초 내? 에 새로운 탭에서 요청을 하니 서버에 로그가 출력되지 않은 것을 확인했습니다!

추가적인 질문으로, 여기서 언급한 '10L'의 대문자 L은 무슨 단위인가요? 

0

이게 사실 테스트 해보기 까다로운 설정이긴 한데요. 몇가지 이유가 있죠.

1. Last Modified 헤더가 있으면 그 헤더 동작을 따릅니다. (지금은 이 경우)

2. (크롬의 경우) 브라우저에서 같은 탭 안에서 요청을 보낸 경우 max-age 무시, 즉 캐시 무시함. 그래서 다른 탭에서 동일한 요청을 보내야 함.

3. 캐시를 사용하는 경우에도 응답이 200으로 나오기 때문에 실제로 캐시를 사용했는지 서버에 다녀왔는지 확인하려면 서버에서 로그를 출력해 봐야함.

registry.addResourceHandler("/m/**")
.addResourceLocations("classpath:/m/")
.setCacheControl(CacheControl.maxAge(Duration.ofSeconds(10L)))
.setUseLastModified(false);

이렇게 설정하면 캐시의 max-age만 설정하고 last modified는 사용하지 않게 됩니다. (하지만 개인적으론 last modified도 사용하는게 좋다고 생각합니다. 캐시가 진행되는 동안에 리소스가 바껴도 반영되지 않으니까요.)

logging.level.org.springframework.web=debug

application.properties에 다음과 같이 웹 요청이 들어오는지 볼 수 있도록 디버그 모드로 로그를 설정합니다.

이제 브라우저를 여시고 정적 자원에 대한 요청을 보내보세요. 그리고 서버에 로그가 출력되는지 보세요. 보일겁니다.

바로 다음에 또 새로운 탭을 열어서 요청을 보내보세요. 그럼 200 응답은 나오지만 서버에 로그가 보이진 않을겁니다. 마치 서버에 아무 요청도 오지 않은것 처럼.

20초가 지난 다음에는 200응답이 보이고 서버에 로그도 보일겁니다. 이때는 캐시 max-age가 다 되서 서버에 요청이 들어오게 된거죠.

0

방금 전에도 직접 확인해봤는데 20초 후에 다시 새로고침해도 여전히 응답코드가 304로 응답이 표시되서 질문했습니다...

0

네 그렇게 동작하는거 맞아요. 직접 실험을 해보시면 더 좋으실텐데.. 한번 해보시죠.