Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

가능세계

[Network] 캐시 무효화(Cache Busting)란 무엇인가요? 본문

Blog/Network

[Network] 캐시 무효화(Cache Busting)란 무엇인가요?

cona-tus 2023. 9. 11. 19:08

network-icon

 

1. 캐시 무효화가 필요한 이유는 무엇인가요?

캐시 무효화캐시에서 데이터를 제거하여 캐시를 무효화하는 프로세스입니다.

 

왜 캐시 무효화 전략이 필요한 것일까요?

 

그 이유는 다음과 같습니다.

 

  1. 웹 브라우저가 GET 요청을 받을 경우 캐시 헤더 없이도 최적화를 위해 임의로 캐싱을 합니다.
  2. 리소스의 캐시 유효 기간을 장기간으로 설정해 오래된 정보가 표시되는 경우가 있을 것입니다. 이 경우 해당 캐시를 무효화하여 업데이트된 데이터가 반영되도록 해야 합니다. 그러나 캐시 저장소의 복사본에 갱신이 필요해도 기본적으로 브라우저는 캐시 유효 기간이 끝나야 캐시 유효성 검증을 서버에게 요청합니다.

 

 

2. 캐시 무효화 헤더와 캐시 지시어

2-1. 캐시 무효화 헤더

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

 

2-2. 캐시 지시어

  • Cache-Control: no-store
    데이터에 민감한 정보가 있으므로 아무것도 캐싱하지 않습니다. 혹은 메모리에서 사용하고 최대한 빠르게 삭제하도록 합니다.
  • Cache-Control: no-cache
    캐시 유효 기간이 남아 있어도 캐시 저장소를 조회하지 말고 서버에 검증을 받으라는 의미입니다. 데이터는 캐시해도 되지만, 항상 원 서버에 검증하고 사용해야 합니다. 서버로부터 304 응답을 받아야 캐시에서 데이터를 가져옵니다.
  • Cache-Control: must-revalidate
    캐시 만료 후 최초 조회 시 원 서버에 검증해야 할 때 설정합니다. 즉, 만료된 캐시만 서버에 확인을 받도록 합니다. 원 서버에 접근 실패 시 반드시 504(Gateway Timeout) 에러가 발생하도록 해야 합니다. 만일 캐시 유효 시간 내에 있다면 캐시를 사용합니다.
  • Pragma: no-cache
    HTTP 1.0 하위 호환하여 적용합니다.



3. no-cache vs must-revalidate

no-cachemust-revalidate 캐시를 항상 원 서버에 검증받고 사용하도록 하는 지시어입니다.

 

캐시 무효화 헤더를 설정할 때 보통 두 지시어를 함께 사용합니다.

 

3-1. must-revalidate이 사용되는 이유

must-revalidate가 사용되는 이유는 no-cache를 사용해 원 서버에 검증을 요청하는 도중 원 서버와 프록시 캐시 서버의 연결이 끊어져 검증이 불가능한 경우, 504 에러를 발생시키기 위해서입니다.

 

몇몇 프록시 캐시 서버에서는 원 서버에 접근이 불가능해질 경우에 검증을 거치지 않고 기존의 캐시 데이터를 반환하기 때문입니다.

 

예컨대 통장 잔고와 같은 중요 데이터는 원 서버와 연결이 불가능하다고 해서 과거 데이터를 반환하면 큰 문제가 생기므로 must-revalidate를 사용해 확실히 오류를 발생시키는 전략을 세운다고 볼 수 있습니다.

 

3-2. 확실히 캐시 무효화를 하기 위해선...

서버 측에서 HTTP 응답 코드를 만들 때 no-cachemust-revalidate, 그리고 하위 호환을 위해 Pragma를 넣어 확실히 캐시를 무효화하도록 합니다.




참고