CS/Network

프록시 캐시와 캐시 무효화

oxdjww 2023. 10. 7. 13:36
728x90
반응형

Intro

본 포스팅에서는 프록시 캐시와 캐시 무효화에 대해 다룬다.

프록시 캐시

원(origin) 서버에 직접 접근

원 서버에 클라이언트가 직접 접근하여 리소스를 받게 되면 병목현상이 일어날 수 있다.

프록시 캐시 도입

첫 번째 요청


첫 번째 요청에는 프록시 서버를 거쳐서 원 서버로 요청이 가게 된다.
첫 요청에는 프록시 서버에 리소스가 없으므로 당연한 결과이다.
그리고 원 서버로부터 응답이 오게 되면, 캐시 서버는 이를 캐시로 저장한다.

두 번째 요청


두 번째 요청 시에는 프록시 캐시 서버가 클라이언트들에게 응답을 함으로서 더 빠른 속도로 응답할 수 있다.
이렇게 프록시 캐시 서버에서 저장할 수 있는 캐시를 public 캐시라고 한다.
반면에 클라이언트가 보유하고 있는 캐시는 private 캐시이다.

Cache-Control 용어 정리

캐시 지시어(directives) - 기타


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

캐시 무효화

저장되어도 되는 값은 캐시에 저장해도 좋지만 민감한 정보나 그 특수한 경우에는 캐시에 저장해선 안 된다.

확실한 캐시 무효화 응답

캐시를 적용하지 않아도 웹 브라우저에서 임의로 GET요청이면 무조건 캐시하기 등의 정책을 사용할 수 있다.

이에, 다음과 같은 헤더를 넣으면 무조건적으로 캐시가 되지 않게 할 수 있다.


Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache // HTTP 1.0 하위 호환일 경우를 위해서


캐시 지시어 (확실한 캐시 무효화)


  • Cache-Control: no-cache
    • 데이터는 캐시해도 되지만, 항상 원 서버에 검증하고 사용(이름에 주의!)
  • Cache-Control: no-store
    • 데이터에 민감한 정보가 있으므로 저장하면 안 된다.(메모리에서 사용하고 최대한 빨리 삭제)
  • Cache-Control: must-revalidate
    • 캐시 만료후 최초 조회시 원 서버에 검증해야함
    • 원 서버 접근 실패시 반드시 오류가 발생해야함 - 504(Gateway Timeout)
    • must-revalidate는 캐시 유효 시간이라면 캐시를 사용함
  • Pragma: no-cache
    • HTTP 1.0 하위 호환

이 때, no-cache 옵션과 must-revalidate 옵션의 차이를 알아보자.


no-cache vs. must-revalidate


| no-cache 기본 동작

클라이언트는 서버에 프록시 서버에 캐시를 요청한다.
하지만, no-cache이므로 원 서버까지 패킷을 보내서 검증하게 된다.

그리고 검증에 성공하여 304 Not Modified가 담긴 응답 패킷을 수신하고, 캐시 저장소에 있는 캐시를 사용한다.


하지만 순간적으로 프록시 서버와 원 서버간의 통신이 불가능할 때 no-cache에서는 어떻게 할까?



no-cache에서는 오류를 발생시키기 보다는 오래된 데이터를 보내주는 방식을 채택한다.
프록시에 저장된 캐시와 비교하여 무결함이 입증되면 200 OK가 담긴 패킷을 보낸다.

must-revalidate의 경우에는 다르다.
오류를 발생시켜 사용자에게 잠시 접속할 수 없음을 알린다.
이 때 504 Gateway Timeout을 보여주며, 금융 관련 정보일 경우 이런 방식을 채택하는 것이 올바르다.


감사합니다.

Ref

모든 개발자를 위한 HTTP 웹 기본 지식, 인프런 김영한 강사님

728x90
반응형

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

검증 헤더와 조건부 요청2  (0) 2023.10.07
검증 헤더와 조건부 요청1  (0) 2023.10.07
캐시 기본 동작  (0) 2023.10.07
인증과 쿠키  (0) 2023.10.05
일반 정보, 특별한 정보  (0) 2023.10.04