3/10 데브옵스 프록시 캐시(Proxy Cache)

프록시 서버란?

클라이언트가 다른 네트워크 서비스에 간접적으로 접속할 수 있게 하는 컴퓨터 시스템이나 응용 프로그램을 의미

프록시란, 클라이언트와 서버 사이에 대리로 통신을 수행하는 것을 가리켜 ‘프록시(Proxy)’,

그 중기능을 하는 서버를 프록시 서버라고 합니다.

클라이언트, 혹은 반대로는 서버가 다른 네트워크에 간접적으로 접속할 수 있기 때문에, 보안, 캐싱을 통한 성능, 트래픽 분산 등의 장점을 가집니다.


프록시 캐시 - 원(Origin) 서버 직접 접근

한국에 있는 클라이언트에서 특정 데이터가 필요한 상황인데 해당 데이터의 원 서버가 미국에 있다고 가정해 보겠습니다.

한국에서 미국까지 직접 접근하여 이미지를 가져오는데 0.5초가량 걸린다고 하면 한국에 있는 클라이언트는 모두 0.5초가량을 기다려야 해당 이미지를 받을 수 있습니다.

앞서 언급한 예시는 매우 긍정적인 상황이고, 실제로는 더 많은 시간이 걸릴 수 있습니다.

하지만 우리는 유튜브와 같은 해외 사이트에서 위와 같은 불편한 없이 빠르게 영상을 시청할 수 있습니다. 어떻게 이와 같은 일이 가능할까요


프록시 캐시- 프록시 캐시 도입

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


캐시 지시어(directives)- 기타

 

프록시 캐시와 관련된 헤더는 이와 같습니다.

Cache-Control : public - 응답이 public 캐시에 저장되어도 됨

Cache-Control : private - 응답이 해당 사용자만을 위한 것, private 캐시에 저장해야 함(기본값)

Cache-Contro : s-maxage - 프록시 캐시에만 적용되는 max-age

Age : 60 ( HTTP 헤더) - 오리진 서버에서 응답 후 프록시 캐시 내에 머문 시간 (초)


Cashe-Control : 캐시 무효화

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

 

캐시를 무효화할 수 있는 헤더는 다음과 같습니다.

캐시 지시어(directives)

 

Cache-Control : no-cache - 데이터는 캐시해도 되지만, 항상 원 서버에 검증하고 사용(이름에 주의)

Cache-Control : no-store - 데이터에 민감한 정보가 있으므로 저장하면 안됨 (메모리에서 사용하고 최대한 빨리 삭제)

Cache-Control : must-revalidate - 캐시 만료후 최초 조회 시 원서버에 검증해야함, 원 서버 접근 실패 시 반드시 오류가 발생해야함(504 Gateway Timeout), must-revalidate는 캐시 유효 시간이라면 캐시를 사용함

Pragma : no-cache - HTTP 1.0 하위 호환


캐시 지시어 (directives)

 

캐시를 무효화를 확실하게 해야 하는 경우 Pragma와 같은 하위 호환까지 포함하여 위와 같이 적용해야 합니다.

Cache-Control : no-cache, no-store, must-revalidate

Pragma: no-cache

확실한 캐시 무효화 응답을 하고 싶다면, 위에 있는 캐시 지시어를 모두 넣어야한다.

 

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

no-cache의 경우, 캐시 서버 요청을 하면 프록시 캐시 서버에 도착하면 no-cache인 경우 원 서버에 요청을 하게 됩니다. 그리고 원 서버에서 검증 후 304 응답을 하게 됩니다.

만약 프록시 캐시 서버와 원 서버 간 네트워크 연결이 단절되어 접근이 불가능하다면, no-cache에서는 응답으로 오류가 아닌 오래된 데이터라도 보여주자라는 개념으로 200OK으로 응답을 합니다.

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

JUNE .

20'S LIFE IN SYDNEY and BUSAN

    이미지 맵

    DevOps Bootcamp/Daily Review 다른 글

    이전 글

    다음 글