[네트워크] Web Cache

FE 개발자 신상오·2022년 7월 13일
0

네트워크

목록 보기
7/7

HTTP 헤더 - 캐시

캐시(Cache) : 데이터나 값을 미리 복사해 놓는 임시 장소
캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나
값을 다시 계산하는 시간을 절약하고 싶은 경우 사용

응답 결과를 캐시에 max-age만큼 일시 저장
두 번째 요청부터는 캐시를 우선 조회합니다

캐시 적용 장점

  • 캐시 가능 시간동안 네트워크 사용 불필요
  • 비싼 네트워크 사용량 감소
  • 브라우저 로딩 속도 증가
  • 빠른 사용자 경험 제공

캐시 검증 헤더

검증 헤더 Last Modified : 데이터가 마지막으로 수정된 시간 정보를 헤더에 포함
응답 결과를 캐시에 저장할 때 데이터 최종 수정일도 저장됨 ➡️ 캐시의 수정시간 알 수 있음

If-Modified-Since : 캐시 유효시간이 초과되더라도 조건부 요청을 할 수 있는 헤더

Last Modified, If-Modified-Since

장점

  • 캐시의 유효시간 초과해도 서버의 데이터 갱신되지 않는다면
    304 Not Modified + 헤더 메타데이터만 응답 (바디 x)
  • 클라이언트는 서버가 보낸 응답 헤더 정보로 캐시의 메타데이터 갱신
  • 클라이언트는 캐시에 저장되어 있는 데이터 재활용
  • 결과적으로 네트워크 다운로드 발생하지만 용량이 적은 헤더 정보만 다운로드

단점

  • 1초 미만 단위로 캐시 조정 불가능
  • 날짜 기반의 로직 사용
  • 데이터를 수정해서 날짜가 다르지만, 같은 데이터를 수정해서 데이터 결과가 똑같은 경우
  • 서버에서 별도의 캐시 로직을 관리하고 싶은 경우

ETag, IF-None-Match

앞서 설명한 Last Modified, If-Modified-Since 보다 간단한 방식의 검증 헤더
ETag : 서버에서 완전히 캐시 컨트롤하고 싶은 경우 사용

  • 단순하게 ETag만 보내서 같으면 유지, 다르면 다시 받는 방식
  • 캐시 제어 로직을 서버에서 완전히 관리
  • 클라이언트는 단순히 이 값을 서버에 제공

캐시와 관련된 헤더, 조건부 요청 헤더

Chache-Control

  • Chache-Control: max-age : 캐시 유효시간, 초 단위
  • Chache-Control: no-chach : 데이터를 캐시해도 항상 orgin 서버에 검증하고 사용
  • Chache-Control: no-store : 데이터에 민감한 정보 있으므로 캐시 저장 x

Expries: 요일, 일, 월 연도 시간 기준시간대

  • 캐시 만료일 지정, 정확한 날짜로 지정한다
  • 지금은 더 유연한 Chache-Control: max-age 권장
  • Chache-Control: max-age와 함께 사용시 무시된다

프록시 캐시

프록시 : 클라이언트와 서버 사이 대리로 통신을 수행하는 것
프록시 서버 : 중계 기능을 하는 서버
클라이언트, 서버가 다른 네트워크에 간접적으로 접속할 수 있기 때문에 보안, 캐싱을 통한 성능, 트래픽 분산 장점 가진다

ex) 한국 클라이언트가 미국 서버에서 자료를 요청할 때 걸리는 시간이 0.5초라고 가정하면
클라이언트가 요청한 자료가 있을 시에 요청 응답에 0.1초가 걸리는 한국에 있는 프록시 캐시 서버를 도입한다면 여러 사람이 찾은 자료일수록 이미 캐시에 등록되어 있는 자료기 때문에 더 빠른 속도로 자료를 받을 수 있음

프록시 캐시 헤더

  • Cache-Control: public : 응답이 public 캐시에 저장되어도 됨
  • Cache-Control: private : 응답이 해당 사용자만을 위한 것, private 캐시에만 저장 (기본값)
  • Cache-Control: s-maxage : 프록시 캐시에만 적용되는 max-age(캐시 수명)
  • Age:60 (HTTP 헤더) : 오리진 서버에서 응답 후 프록시 캐시 내에 머문 시간

캐시 무효화 헤더

  • Cache-Control: no-cache : 데이터 캐시해도 되지만, 항상 원 서버에 검증하고 사용 (이름 주의)
  • Cache-Control: no-store : 데이터에 민감한 정보 포함, 저장 x
  • Cache-Control: must-revaildate : 캐시 만료 후 최초 조회 시 원 서버에 검증
    원 서버 접근 실패 시 반드시 오류 발생

확실한 캐시 무효와 응답시

  • Cache-Control: no-cache, no-store, must-revaildate
  • Pragma: no-cache

no-cache VS must-revaildate

  • no-cahce
    캐시 서버 요청 하면 프록시 캐시 서버 도착할때 no-cache인 경우 원 서버에 요청
    만약 프록시 캐시 서버와 원 서버 간 네트워크 연결이 단절되어 접근 불가능하다면
    no-cache에서는 응답 오류가 아닌 오래된 데이터로 200 Ok 응답
  • must-revauldate
    원 서버에 접근이 불가할 때 504 Gateway Timeout 오류를 내보냄
    통장 잔고 등 중요한 정보가 원 서버를 못 받았다고 no-cahce와 같이 예전 데이터로 뜬다면 큰 문제 생김
profile
주간 회고용 블로그입니다 (개발일지와 정보글은 티스토리에 작성합니다.)

0개의 댓글