네트워크 심화 - 프록시 캐시(Proxy Cache)

YoungJoon Suh·2022년 4월 21일
0

프록시 서버란?
클라이언트가 다른 네트워크 서비스에 간접적으로 접속할 수 있게 하는 컴퓨터 시스템이나 응용 프로그램을 의미
클라이언트와 서버 사이에 대리로 통신을 수행하는 것을 가리켜 '프록시(Proxy)', 그 중계 기느을 하는 서버를 프록시 서버 라고 함
클라이언트, 혹은 반대로는 서버가 다른 네트워크에 간접적으로 접속할 수 있기 때문에, 보안, 캐싱을 통한 성능, 트래픽 분산 등의 장점을 가집니다.

여러 사람이 찾은 자료일수록 이미 캐시에 등록되어 있기에 빠른 속도로 자료를 가져올 수 있습니다.
이는 같은 국내에 있기에 원서버에 접근하는 것보다 훨씬 빠른 속도에 자료를 가져올 수 있기 때문입니다.
이때 클라이언트에서 사용하고 저장하는 캐시를 private 캐시라 하며 프록시 캐시 서버의 캐시를 public 캐시라 합니다.

프록시 캐시와 관련된 헤더
캐시 지시어(directives) - 기타

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

웹 브라우저가 임의로 캐싱을 할 때 이를 무효화하는 방법은 없을까요? (민감한 정보까지 캐싱하지 않도록)
클라이언트가 캐시를 적용하지 않아도 임의로 브라우저가 캐시를 적용하는 경우, 특정 페이지에서 캐시가 되면 안 되는 정보(e.g. 통장 잔고)가 있다면 어떻게 이를 무효화할 수 있을까요?

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

Cache-Control
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
확실한 캐시 무효화 응답을 하고 싶다면 Pragma와 같은 하위 호환까지 포함하여 위에 있는 캐시 지시어를 모두 넣어야합니다.

no-cache와 must-revalidate 모두 원 서버에 검증해야 하지만 그에 대한 응답에 대해 다른 점이 있습니다.

  1. no-cache
    캐시 서버 요청을 하면 프록시 캐시 서버에 도착하면 no-cache인 경우 원 서버에 요청을 하게 됩니다.
    그리고 원 서버에서 검증 후 304 응답을 하게 됩니다.
    만약 프록시 캐시 서버와 원 서버 간 네트워크 연결이 단절되어 접근이 불가능하다면, no-cache에서는 응답으로 오류가 아닌 오래된 데이터라도 보여주자라는 개념으로 200OK으로 응답을 합니다.

  1. must-revalidate
    하지만 must-revalidate라면 원 서버에 접근이 불가할 때 504 Gateway Timeout 오류를 보냅니다.
    통장 잔고 등 중요한 정보가 원 서버를 못 받았다고 해서 예전 데이터로 뜬다면 큰 문제가 생기기 때문에 이런 경우 must-revalidate를 써야 합니다.
profile
저는 서영준 입니다.

0개의 댓글