Http Cache

최형준·2022년 6월 29일
0

WebCache 란?

Cilent가 요청하는 html,image,js,css등에 대한 첫 요청 시 파일을 내려 받아 특정 위치에 복사본을 저장하고 , 이후 동일한 요청시 다시 내려받지 않고 내부에 저장한 파일을 사용하여 더 빠르게 서비스 하기 위한 것
서버를 통해 내려받는 양이 적어지니 응답 시간 감소와 네트워크 트레픽 감소 효과 볼수 있다.

웹 캐쉬 종류

  1. Brower Caches

    • 브라우저 또는 HTTP 요청을 하는 Client Application에 의해 내부 디스크에 캐쉬
    • 브라우저의 이미 방문한 페이지를 재 방문하는 경우 극대화
  2. Proxy Caches

    • Brower Cache와 동일한 원리로 동작하며 Client나 Server가 아닌 네트워크 상에서 동작.
    • 큰회사나 IPS의 방화벽에 설치 되며 대기시간 & 트래픽 감소, 접근정책 & 제한 우회, 사용율 기록등 수행
    • 한정된 수의 클라이언트를 위하여 무대한대의 웹서버 컨텐츠를 캐쉬
  3. Gateway Cacache

    • 서버 앞 단에 설치되어 요청에 대한 캐쉬 및 효율적인 분배를 통해 가용성, 신뢰성, 성능등을 향상

참고자료 :

HTTP Cache 에 대하여

서버는 리소스를 응답할 때 해당 리소스를 캐싱할 수 있는 시간을 명시하여 보낸다.
그리고 이 값을 헤더에 담아 전송

하지만 이 만료시간 이 다 되었어라도 브라우저가 업데이트 되지 않았다면 캐시를 업데이트 할 필요 없다. 리소스 낭비 이러한 문제를 해결하기 위해 Etag를 사용한다.

Etag: 브라우저가 만료된 캐시 응답을 찾으면 토큰을 변경 시켜 파일이 변경되었는지 확인가능.

  • 서버는 리소스 조회 요청이 오면 Etag HTTP 헤더를 사용하여 유효성 검사 토큰을 전달.
  • 브라우저 캐시 내 리소스가 만료된다면 Etag를 서버에 보내 해당 리소스에 변경사항이 있는지 확인.
  • 가정 1 Etag값이 똑같다면 변경사항이 없는 것으로 브라우저 캐시에 있는걸 그대로 사용
  • 가정 2 Etag값이 다르다면 변경사항이 있는 것으로 업데이트된 리소스와 새로운 Etag값 반환

예시

다음과 같이 Request를 요청하고 이안에 Etag를 집어넣음
다음처럼 동일한 Etag가 발생하여 If-None-Matched 바꿀 필요가 없다
라는 의미로 이러한 상황에서는 캐시에 다시 보내줄 필요없다

하지만 위의 경우 캐싱된 리소스가 만료된다는 가정이다.
만약 리소스가 만료되기전에 변경사항 이 있다면 어떻게 해야할까??

이와 같이 급하게 변경사항이 있다면 리소스가 만료 되기전에 변경사항이 발생한다면 위와 같은방법으로는 발견할 수 없다.

해결방법

파일의 이름을 변경시킨다.
ex) style.3555ff.css
이렇게 파일의 이름이 바뀌게 된다면 URL이 변경된다. 브라우저는 리소스의 URL이 변경된다면 새로운 데이터로 인식되기 때문에 업데이트 가능하다.
그렇기 때문에 보통 html,css 파일과 같은 정적 파일들은 max-age를 길게 설정해놓고 사용한다. 왜냐하면 위와같은 정적파일들은 변경이 쉽게 일어나지 않기 때문이다.


이와 같은 방법으로 효율적인 캐싱이 가능하다.

참고자료 : https://www.youtube.com/watch?v=NxFJ-mJdVNQ
참고자료 : https://www.youtube.com/watch?v=c33ojJ7kE7M

profile
긍정적으로 하루를 살아가자!!

0개의 댓글