본문 바로가기

AWS

CloudFront 사용시 주의할 점

현재 이미지 or 영상 파일을 S3 에 저정하고 AWS CloudFront 로 CDN 을 구축해 사용하고 있습니다.

 

CloudFront 란?


CloudFront 는 S3에 있는 데이터를 아래 URI 와 같은 엣지 로케이션이라고 하는 중앙 데이터 센터에 적재하게 된다.

유저는 S3 에서 직접적으로 가져와서 컨텐츠를 보는게 아닌 엣지 로케이션에 캐시 메모리 형태로 저장되어

전세계 유저들에게 빠른 컨텐츠 서빙을 가능하게 합니다.

 

직면한 상황

 

컨텐츠 특성상 1개만 가질 수 있는 시스템이 있다고 가정해봅시다. ( ex : 자신의 소개 영상 )

특정 컨텐츠에 유저는 하나의 영상만을 올릴 수 있는데 재업로드시에 문제가 발생 했습니다.

예를들어, S3에 들어있는 데이터의 경로가 https://s3-output/user/1/contents 라고 가정을 했을 때 

CloudFront 에서 엣지로케이션에 컨텐츠를 적재해 사용자들에게 서빙을 합니다. 
자신의 소개 영상이 마음에 들지 않은 유저는 다른 영상으로 교체를 원해서 삭제후 다시 재업로드를 하기 원합니다.
백엔드 프로세스는 S3에 영상을 삭제한 후 동일한 파일이름으로 다시 올리게 됩니다.

 

Process - S3 PATH ( user/1/contents ) -> Delete -> Upload S3 PATH ( user/1/contents )

여기서 S3 에서는 동일한 경로로 업로드 해도 아무런 문제가 되지 않습니다.
S3에는 새로운 영상으로 교체가 되어있습니다.

 

문제가 되는점은 동일한 파일에 대한 CloudFront의 작동원리입니다.
CloudFront 에서는 한명 이상의 유저가 컨텐츠를 보기위해서 요청을 하게되면

최대 24시간 동안 엣지 로케이션에 이미 적재가 되어 있습니다.


말 그대로 유저는 영상을 변경해서 올렸는데 24시간 동안 이미 삭제한 예전의 컨텐츠를 서빙하게 되는겁니다.

수정을 해도 24시간 뒤에 변경이 일어나고 예전의 데이터를 보여주는 서비스는 존재하지 않겠죠?

 

해결방법


이를 위해서 CloudFront 에서는 버전을 지정하여 파일을 업데이트 하는 걸 권장 합니다.

S3 PATH 에 ( user/1/contents ) 라고 저장하는 대신 ( user/1/contents_1 ) 라고 저장해 수정을 일어나는 순간마다 버전을 변경하면 웹사이트의 링크를 업데이트 할 수 있습니다.
새 버전의 객체 제공을 시작하기 전에 객체가 만료될 때까지 기다릴 필요가 없으며 , 객체 무효화에 비용을 지불할 필요도 없습니다.