해결된 질문
작성
·
639
2
안녕하세요. 두 가지 질문 드립니다.
GET method의 경우 조회 결과에 대한 캐싱을 통해 이후의 동일 요청에 대해서는 서버의 부하를 줄일 수 있다고 설명해주셨는데요.
1. 이 캐싱된 결과의 유효 기간은 언제까지인가요? HTTP 연결이 끊어져도 캐싱 결과는 계속 유지되는지, 그렇다면 언제까지 유지되는지 궁금합니다.
그리고 처음 GET method로 조회한 결과가 나중에 다른 요청으로 인해 갱신이 될 수도 있을 텐데요.
2. 그렇다면 그 이후 동일 요청이 들어왔을 때 브라우저에 캐싱되어있는 이전 조회 결과가 최신 데이터라는 것을 어떻게 보장 받을 수 있나요?
답변 1
1
안녕하세요 현강님! 질문에 대한 답변 드릴게요!
캐싱된 결과의 유효 기간은 언제까지인가요? HTTP 연결이 끊어져도 캐싱 결과는 계속 유지되는지, 그렇다면 언제까지 유지되는지 궁금합니다.
캐싱된 결과의 유효 기간은 HTTP 헤더에 명시된 값에 따라 다릅니다. 특히, Cache-Control 헤더와 Expires 헤더가 캐시의 동작과 유효 기간을 결정한다고 보시면 됩니다.
HTTP 연결이 끊어진다고 해서 캐싱된 결과가 사라지지는 않습니다. 캐싱된 결과는 웹 브라우저나 프록시 서버 등의 캐시 저장소에 저장되며, 유효 기간이 지날 때까지 유지됩니다. 유효 기간이 지나면 캐시는 더 이상 유효하지 않게 되어, 새로운 요청이 발생하면 서버에 다시 데이터를 요청하게 됩니다
그렇다면 그 이후 동일 요청이 들어왔을 때 브라우저에 캐싱되어있는 이전 조회 결과가 최신 데이터라는 것을 어떻게 보장 받을 수 있나요?
캐싱된 결과가 최신 데이터인지를 보장하기 위해, 웹 개발자들은 캐시 검증 메커니즘을 사용합니다. 이는 If-Modified-Since, If-None-Match와 같은 HTTP 헤더를 이용해 구현됩니다. 이러한 검증 메커니즘의 동작 방식은 다음과 같습니다.
If-Modified-Since: 브라우저는 이전에 캐싱된 결과의 마지막 수정 시간을 If-Modified-Since 헤더에 포함하여 서버에 요청을 보냅니다. 서버는 요청받은 시간 이후에 데이터가 변경되었는지 확인하고, 변경된 경우 새로운 데이터와 함께 200 OK 응답을 반환합니다. 변경되지 않았다면, 304 Not Modified 응답을 반환하고 브라우저는 캐싱된 데이터를 사용합니다.
If-None-Match: 브라우저는 캐싱된 데이터의 ETag 값을 If-None-Match 헤더에 포함하여 서버에 요청을 보냅니다. ETag는 데이터의 고유한 식별자로, 데이터가 변경될 때마다 갱신됩니다. 서버는 ETag 값을 확인하여 데이터가 변경되었는지 판단하고, 변경된 경우 새로운 데이터와 함께 200 OK 응답을 반환합니다. 변경되지 않았다면, 304 Not Modified 응답을 반환하고 브라우저는 캐싱된 데이터를 사용합니다.
이러한 검증 메커니즘을 사용하면 브라우저는 캐싱된 데이터가 최신인지 확인하고, 필요한 경우 서버로부터 최신 데이터를 가져올 수 있습니다.
모든 것을 동시에 만족시킬 수 는 없는 것 같아요ㅜ 최신 데이터임을 보장받기 위해서는 결국 서버랑 통신을 해야되는데, 그래도 캐시를 이용 했을 때 서버의 부하를 좀 더 줄일 수 있고 응답도 빠르게 할 수 있다는 장점을 사용할 수 있기에 캐시를 사용하게 되는 것 같습니다.
혹시 질문에 대한 답이 됐을까요!!?? 궁금하신 점이 있다면 언제든 질문 주세요 :)