본문 바로가기
★ 프로젝트 + 트러블 슈팅 ★

[Cache 무효화] CloudFront / S3 트러블 슈팅 (4)

by 리승우 2024. 1. 11.

이슈

이미지를 등록하고 한번 Get 조회하여 Cloudfront에 Cache로 등록한 후, 해당 이미지를 수정한 후에 다시 조회할 경우

수정되기 전의 이미지가 이미 Cache되어 있기 때문에 변경된 이미지의 조회가 불가능하였다.

 

이는, 컨텐츠의 최신화를 즉각적으로 반영하지 못하는 것을 의미하기 때문에 해당 이슈를 해결하는 것이 필요하였다.

 

해결방안

아래와 같은 방법을 도출하였다.

 

1. Cloudfront의 무효화 탭에서 무효화가 필요할 때마다 무효화 생성진행 (Lambda@Edge를 통해 해당 과정을 자동화할 수 있음)

 

2. Cloudfront의 캐시 키 및 원본요청에서 쿼리 문자열 지정

 

처음에는 1번 사항으로 진행하는 게 편할 거라 생각하였으나,

다시 생각을 해보니 매 요청마다 무효화 생성을 진행하는 건 비효율적인 것 같았고(Lambda@Edge로 자동화하는 것 포함해서)

만약 한다해도 AWS에서는 월 기준, 무효화는 1,000개까지만 무료로 지원해주고 그 이후부터는 요금을 부과하기 때문에 여러모로 좋지 않은 것으로 판단되었다.

 

그래서 대체방안으로 2번을 찾게 되었고, 해당 방법이 다각도에서 합리적인 방안인 것으로 판단되어 아래와 같이 진행하게 되었다.

 

그 결과로!

아래와 같이, 캐시 키에 포함할 쿼리스트링을 지정하여, 해당 값대로 처리시키도록 진행하였다.

필자는 t 라는 쿼리스트링으로 컨텐츠의 최신화 및 캐시 무효화를 진행할 예정이다.

 

t라는 쿼리 스트링에 쓸 값은 DB에 있는 Update_date였는데, 정한 이유는 아래와 같다.

ex) 컨텐츠를 업데이트할 경우, DB상에 있는 Update_date컬럼의 값이 현재 시간(timestamp)로 변경된다.

해당 값을 Cloudfront에 연결할 때 t쿼리스트링의 값으로 줌으로써, 컨텐츠가 최신화될 때 캐시 무효화를 진행하게끔 진행

 

작업내용

1. 원하는 동작을 누른 뒤 편집 버튼 클릭
  *경로패턴은 ~~/images/~~ 와 같은 URL에만 특정 조건을 적용시키기 위해 진행하였음

 

2. 캐시 키 및 원본요청에서 캐시하길 원하는 쿼리 스트링을 기재

 

 

이와 같이 함으로써, 캐시 무효화 및 컨텐츠 최신화 이슈를 해결하였다.

댓글