본문 바로가기

Infrastructure/Network

[HTTP] 헤더 - 5 (캐시)

HTTP 헤더를 사용한 캐시와 조건부 요청에 대해서 알아본다.

캐시 기본 동작

캐시가 없는 경우 (HTTP 헤더의 사이즈: 0.1mb, HTTP 바디의 사이즈: 1.0mb라고 가정)

요청

GET /car.jpg

응답

HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 40000

eyJzdWIiOiJzYWxseUBpbWFzbGFiLmN...

재요청

GET /car.jpg

응답

HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 40000

eyJzdWIiOiJzYWxseUBpbWFzbGFiLmN...

첫번째 요청과 두번째 요청 모두 응답 메시지 바디에 같은 데이터가 들어가있다.
이렇게 캐시가 사용되지 않는 경우

  • 변하지 않은 데이터도 클라이언트는 요청시마다 새로 다운받아야한다.
  • 모바일의 경우 비싼 네트워크 비용을 지불해야한다.
  • 새로운 데이터를 렌더링 하기위해 클라이언트의 로딩 속도가 느려진다.
  • 결론적으로 사용자들은 더 많은 비용을 지불하고 느린 사용자 경험을 해야한다.

캐시가 있는 경우

요청

GET /car.jpg

응답

HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 40000
cache-control: max-age=60

eyJzdWIiOiJzYWxseUBpbWFzbGFiLmN...

재요청

GET /car.jpg

이때, 서버에 요청을 보내는 것이 아니라 1차 요청때 받은 데이터의 캐시 유효 시간을 검증하고 해당 내용을 그대로 보여준다.

이렇게 캐시를 사용하는 경우

  • 변하지 않은 데이터의 경우 클라이언트는 새로 다운받을 필요가 없어진다.
  • 클라이언트는 불필요한 데이터 사용을 줄여 비용과 시간을 절약할 수 있다.
  • 새로운 데이터를 렌더링하는 시간과 다운받는 시간이 사라지므로 사용자들은 빠른 사용자 경험을 할 수 있다.

여기서 의문이 생길 수 있다.
서버에서는 60초 동안 유효하다고 했지만 그 안에 데이터가 변경되었으면 어떻게 하지?
60초 이후에도 데이터가 똑같을 수도 있는데 확인도 안하고 또 받아야하는건가?

우리의 이런 궁금증은 이미 똑똑한 우리 선배개발자님들이 먼저하였고 이런 문제에 대한 해결법 또한 만들어두었다.
다음장에서는 조건부 요청을 통한 더 합리적인 캐싱방법을 알아본다.

'Infrastructure > Network' 카테고리의 다른 글

[HTTP] 헤더 - 2 (전송 방식)  (0) 2021.06.28
[HTTP] 헤더 - 6 (조건부 요청)  (0) 2021.06.28
[HTTP] 헤더 - 1 (일반 헤더)  (0) 2021.06.25
[HTTP] 상태 코드 (3xx)  (0) 2021.06.25
[HTTP] 상태 코드 (5xx)  (0) 2021.06.24