✏️ 캐시와 조건부 요청

박상민·2023년 9월 8일
0

HTTP WEB 기본 지식

목록 보기
11/13
post-thumbnail

⭐️ 캐시

캐시는 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우 또는 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다.
캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간없이 더 빠른 속도로 데이터에 접근할 수 있다.

📌 캐시의 기본 동작

캐시가 없을 때 - 첫 번째 요청

웹 브라우저가 GET/star.jpg 요청을 서버에 전송하면 서버에서 별 사진 응답을 내려준다.

  • 가정: 헤더 용량은 0.1M, 바디는 1.0M 라고 가정한다.

요청을 하면 1.1M의 네트워크를 차지하며 응답이 내려온다.


캐시가 없을 때 - 두 번째 요청

클라이언트가 이전처럼 GET/star.jpg 요청을 하면 서버는 다를 것 없이 1.1M의 용량을 차지하며 응답을 내려준다.

캐시가 없을때

  • 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드 받아야 한다.

  • 인터넷 네트워크는 매우 느리고 비싸다.

  • 브라우저 로딩 속도가 느리다.

  • 느린 사용자 경험을 준다.

위의 경우에는 응답을 할 때마다 같은 용량의 데이터를 다운 받기에 불필요한 용량이 소모된다. 또한, 속도 저하의 원인이 될 수도 있다.

이제 문제를 해결해줄 캐시를 만나보자.


캐시 적용 - 첫 번째 요청

똑같이 클라이언트가 GET/star.jpg 요청을 하면 서버는 별 사진과 응답 메시지를 내려준다. 이때, Http 헤더에 cache-control: max-age=60(캐시가 유요한 시간 60초)를 넣어줄 수 있다.
또한, 최초로 요청을 할 때는 용량이 1.1M로 동일한다.


캐시가 적용되면 cache-control에 적용한 시간 동안 응답 결과를 캐시에 저장한다.

이제 다시 요청을 해보자. 이전과는 명확한 차이가 보일 것이다.

캐시 적용 - 두 번째 요청

다시 GET/star.jpg 요청을 하면 이번에는 먼저 캐시를 조회한다.


유효 시간이 지나지 않았다면 캐시에서 star.jpg를 불러온다.

캐시 적용

  • 캐시 덕분에 캐시 가능 시간동안 네트워크를 사용하지 않아도 된다.

  • 비싼 네트워크 사용량을 줄일 수 있다.

  • 브라우저 로딩 속도가 매우 빠르다.

  • 빠른 사용자 경험

캐시를 적용하면 매번 서버에서 응답 결과를 받는 과정이 대폭 감소한다. 이에 따라 소모되는 네트워크 감소, 속도 저하 이슈도 어느정도 해결된다.

예를 들어 웹 사이트를 들어갈 때 몇 분전에 들어갔던 사이트를 다시 들어가면 처음과 달리 빠르게 들어가지는 경험을 했을 것이다. 이게 모두 캐시 덕분이다!

세 번째 요청 - 캐시 시간 초과

캐시 시간이 초과된 경우를 생각해보자. GET/star.jpg 요청을 하고 캐시를 조회했지만 시간이 초과되어 캐시에서 가져올 수가 없다. 이때는 다시 서버에 요청을 해서 응답을 받아야한다.

캐시 시간 초과

  • 캐시 유효 시간이 초과하면, 서버를 통해 데이터를 다시 조회하고, 캐시를 갱신한다.
  • 이때 다시 네트워크 다운로드가 발생한다.

그런데 캐시 시간이 만료 될 때마다 서버에 요청을 해서 받는 것이 효율적일까?
내가 서버에 요청을 하려는 사진과 캐시에 있는 사진은 완전히 동일한 사진인데 말이다. 이때 굳이 1.1M라는 용량을 소비하며 응답을 받아야할까?
캐시는 이미 검증 헤더와 조건부 요청이라는 대안을 가지고 있다.
이에 대해서는 다음 글에서 작성하겠다.


출처
모든 개발자를 위한 HTTP 웹 기본 강의
해당 게시물의 사진 자료는 위 강의의 자료를 사용하였습니다.

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글