Caching

오민영·2021년 7월 6일
0

HTTP Protocol

목록 보기
3/7
post-thumbnail

캐싱은 어떤 것을 나중에 유용하기 위해 저장한다는 뜻으로, 리소스 파일들의 임시 저장소다.

같은 웹 페이지에 접속할 때 사용자의 PC에서 로드하므로 서버를 거치지 않아도 된다.

UI적 자원들을 컴퓨터 > 캐시라는 저장 공간을 따로 두고, 그 곳에 저장해 두는 것이다.

  • 정적인 자산(웹 페이지 방문할 때마다 변하지 않는 것들)
  • 이미지 (로고, 사진, background)
  • html
  • css
  • javascript

즉, 위 자산들을 저장해서 특정 위치에 복사본을 저장하고, 이후 동일한 URL의 Request 요청을 다시 내려받지 않고, 내부에 저장한 파일을 재사용해서 더 빠르게 서비스를 제공하기 위한 목적으로 캐싱을 한다.

웹 캐시는 네트워크 트래픽과 레이턴시를 줄여줌으로서 리소스를 보여주는데에 필요한 시간을 줄여준다.

설명

캐싱은 주어진 리소스의 복사본을 저장하고 있다가, 요청시에 그 자원을 제공하는 기술이다.
웹 캐시가 자신의 저장소 내에 요청된 리소스(자원)를 가지고 있다면, 요청을 서버로부터 자원을 다시 다운로드 하는 대신, 리소스의 복사본을 반환한다.

장점

  • 리소스를 회신하는데에 적은 시간이 든다. (브라우저 속도 향상)

  • 웹 사이트에서 캐싱은 높은 성능을 달성하는 데에 주요한 요소이다.

  • 반면, 모든 리소스가 영원히 변하지 않는 것은 아니므로, 리소스가 변하기 전까지만 캐싱하고 변한 이후에는 더 이상 캐싱하지 않는게 중요하다.

문제점

  • 유저가 하드디스크에 최신 버전 파일이 캐시되어있지 않으면, 여러 문제가 발생할 수 있다.

  • 포멧이 안맞으면 JS가 깨지고, 올바르지 않은 이미지로 보여질 수 있다.

  • 대부분의 경우 서버가 어떤 자산이 업데이트가 되고, 유저 기기에서 교체되어야 하는지 알고 있기 때문에 문제가 되지 않는다. 만약 일부 유저가 홈페이지가 깨졌다고 문제를 제기하면 브라우저 캐시를 삭제해보라고 권하면 된다.

  • 대부분의 브라우저는 캐시 제거할 수 있는 버튼이 있다.

웹 캐시 종류

Browser Cache

  • 브라우저 / http 요청을 하는 클라이언트 웹 애플리케이션에 의해 내부 디스크에 저장

  • 캐시된 리소스를 공유하지 않는 한, 개인에 한정된 캐시이다.

  • 브라우저의 이전 버튼 또는 이미 방문한 페이지를 재방문 하는 경우 빠르게 로드된다.

Proxy Cache

  • 한 명 이상의 사용자가 재사용 할 수 있도록 응답을 저장하는 캐시

  • 프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게해주는 컴퓨터나 애플리케이션을 가리키는데, 이 프록시 서버에 요청된 내용들을 캐시를 이용해서 저장한다.

  • 캐시 안에 있는 정보를 요구하는 요청에 대해서 원격 서버에 접속해서 데이터를 가져올 필요가 없다.

  • 네트워크 대역을 효율적으로 사용하고, 조직 내에 특정 웹 사이트에 대한 엑세스 제한, 엑세스 로그를 획득하는 것이 목적

Gateway Cache

  • 서버 앞 단에 설치되어 요청에 대한 캐시와 분배를 맡는다.

캐시 동작의 대상 (캐시 유효성 검사)

현재 cache했을 때, 가지고 있는 데이터가 최신인지 확인하여 새로운 전송이 필요한지 확인하는 것으로, 일반적으로 http 캐시들은 get 에 대한 응답만을 캐싱하고, 다른 메스드들은 거의 캐싱하지 않는다.

  • 200(가져오기 성공) : 자원(html, image, css, js...)을 포함하는 get요청에 대한 성공 응답
  • 301(위치): 다른 주소로 이동 후 가져온다는 응답
  • 404: 가져올 자원이 없다는 응답 (Not Found)

캐싱 제어 / 컨트롤

cache-control Header

HTTP/1.1에서 추가된 기능으로, 여러 캐싱 정책을 제공하고 있다.

  • Cache-Control: max-age=n

    • n초 단위로 캐시 신선도를 설정한다. (캐시 유효시간 설정)
    • 60 60 = 3600을 입력하면 한시간, 3600 24 = 86400을 입력하면 하루동안 캐시가 유지된다. 그 이후엔 서버에 요청한 뒤 304 응답을 받을 때에만 캐시를 이용한다.
  • Cache-Control: no-cache

    • 캐시된 복사본을 사용자에게 릴리즈하기 전에 유효성 확인을 위해 원 서버로 확인 요청을 보낸다.
    • 모든 캐시를 사용하기 전에, 서버에 이 캐시를 정말 사용해도 되는지 확인 요청을 보내는 것
  • Cache-Control: no-store

    • 어떤 요청도 캐시로 저장하지 않는다.
    • 요청은 서버 측으로 전송되고 전체 응답은 매번 새로 다운로드 된다.
  • Cache-Control: must-revalidate

    • 만료된 캐시를 서버에 확인받는 것이다.

Age

Age 헤더는 캐시 응답 시 나타나는데, max-age 시간 내에서 얼마나 흘렀는지 초 단위로 알려준다.max-age=3600 인 경우, 1분이 지나면 Age: 60이 캐시 응답 헤더에 포함된다.

Expires

Expires: Thue, 26 Jul 2018 07:28:00 GMT

Cache-Control과 별개로 응답에 Expires라는 헤더를 줄 수도 있다.
응답 컨텐츠가 언제 만료되었는지 나타내며, Cache-Control의 max-age가 있는 경우 이 헤더는 무시된다.

Cache Flow

Reference

참고
참고

profile
이것저것 정리하는 공간

0개의 댓글