개발자 일상

캐시 걸린 파일 변경

gilchris 2023. 8. 27. 16:45
어떤 서비스에서 URL을 캐시하고 있는 파일을 교체했는데, 기존 파일을 삭제하고 새 파일을 넣었더니 캐시에서는 아직 기존 파일의 URL을 주고 있어서 파일이 없는 문제가 생겼다.
이걸 해결하는 방법에 뭐가 있을까?
 

캐시 시간 동안 파일 삭제를 미룬다.

어딘가 큐나 DB 등에 삭제할 파일의 경로를 넣어두고 실제 삭제는 일정 시간이 지난 뒤에 하는 방법.
대충 캐시되는 시간을 알고 있어야 하고 이를 변경하는 사람한테 공지해야 한다.
여러 리소스를 이용하면서 파일 삭제용 큐는 하나만 이용해도 된다는 장점이 있다.
 

파일이 삭제되면 캐시를 지우라고 노티한다.

해당 파일이 캐시되어 이용되는 곳들을 미리 알고 있다가 해당 파일이 변경되면 캐시를 지우라고 알려주는 방법.
캐시하는 곳을 놓칠 수도 있고,  캐시하는 곳에서 노티를 받아 갱신하는 로직을 준비해야 한다.
신규로 이 리소스를 사용하는 곳이 생기면 그곳도 잊지말고 노티해야 한다.
리소스가 바로 바뀐다는 점이 장점이다.
 

안지우고 그냥 쌓아두는 방법

리소스 이름이나 경로에 패턴을 지정해서 쌓아두다가 일정 시간이 지나면 해당 패턴으로 최신 것만 남기고 지우는 방법.
예를 들어 a_1.webp 라는 파일을 새로 바꾸면 a_2.webp로 저장하는 식으로 한다. 이러다가 어느날 최신 파일이 a_21.webp까지 되어 있고 이러면 혹시 캐시하고 있을 지도 모르는 a_20.webp은 그냥 두고 a_1.webp부터 a_19.webp까지 지운다.
물론 old, new 두 개의 정보를 유지하면서 그 전 것들을 바로 바로 지울 수도 있겠다.
 
또 무슨 방법이 있을까?