CS

캐싱 정리

캐싱이란?

  • 데이터나 값을 미리 복사해놓은 장소, 혹은 임시 동작
  • 해당 데이터에 대한 재요청이 있을 경우, 데이터의 기본 저장소에 액세스할 때보다 더 빠르게 요청 처리 가능

캐싱 종류

  • 디스크 캐시
    • 하드 디스크의 데이터를 RAM에 임시 저장하여 접근 속도를 높이고자 하는 방식
    • 빠른 응답 속도를 제공하며, 애플리케이션이 실행 중일 때만 유효
    • 읽기 속도 개선 + 반복적으로 읽는 데이터에 유용
  • 메모리 캐시
    • RAM과 CPU 사이에 위치하여, 데이터에 빠르게 접근하고 처리속도를 높이고자 하는 방식

Cache-control 속성별 특징

  • no-cache: 캐시를 사용하기 전, 서버에게 cache 유효성 여부 체크를 받은 후 사용 결정(max-age=0과 동일)
  • no-store: 캐시 사용 X, 원본 리소스 요청, 응답 결과 캐싱 X
  • public: 모든 환경에서 캐시 사용
  • private: 브라우저 환경에서만 캐시 사용, 외부 서버에서는 캐시 사용 불가(ex> 서버)
  • max-age: 캐시의 유효시간 지정(ex> max-age=3600은 리소스를 1시간 동안 캐싱)

캐싱 만료 확인 및 캐싱 or 리소스 갱신 과정 (ETag 포함)

  • ETag: ETag는 HTTP 응답 헤더에 포함되는 엔티티 태그(Entity Tag)를 나타내며, 서버는 각 리소스마다 고유한 ETag를 생성하고 응답에 포함시켜 클라이언트에게 전달
  • 클라이언트 요청 시 If-None-Match 헤더: 클라이언트는 이전 응답에서 받은 ETag를 If-None-Match 헤더에 포함하여 서버로 전송
  • 서버는 클라이언트의 요청을 받으면, 해당 리소스의 현재 ETag 값을 클라이언트가 전송한 값과 비교하게 되며, ETag가 같음을 보고 데이터가 변경되지 않았다는 내용 확인 뒤에 304 Not Modified 응답을 반환
  • 만일 ETag가 달라질 시, 서버에서는 리소스가 변경이 되었다고 감지를 한 후에 새로운 리소스를 전달

캐싱 만료 후 서버와의 확인과 304 응답에 따른 네트워크 비용

  • 캐시된 데이터의 유효 기간이 만료되면 클라이언트는 서버에 새로운 데이터를 요청하기 위해 네트워크 재요청
  • 서버는 클라이언트의 요청을 받은 후에 ETag를 비교하여 해당 리소스가 변경되지 않았음을 확인하고 이를 알리기 위해 304 Not Modified 응답 전달. 이때, 실제 데이터를 포함하지 않고 헤더 정보만을 응답으로 보내며 바이트 수준의 네트워크 비용 발생
  • 304 응답은 헤더 정보만을 포함하고, 실제 데이터는 포함되지 않으므로 적은 네트워크 비용 발생. 하지만 여전히 서버와의 통신이 발생하므로 해당 데이터 크기만큼의 네트워크 비용이 발생하기 때문에, 용량이 큰 데이터를 캐시하고 있을 경우에도 304 응답의 비용을 고려 필요