codingBird

TIL - 쇼핑몰 프로젝트 (Plain Old) 42일 차. S3에 있는 이미지는 언제 삭제해야 할까? 본문

TIL

TIL - 쇼핑몰 프로젝트 (Plain Old) 42일 차. S3에 있는 이미지는 언제 삭제해야 할까?

김뚜루 2023. 2. 28. 18:10

구매평을 이용해 짤 놀이를 할 수 있게 되었다.

쇼핑몰 프로젝트 42일 차. 이미지 수정 기능을 고도화해서 구매평을 이용해 짤 놀이를 할 수 있게 되었다.

실은 어제가 42일 차이고 오늘은 43일 차가 맞지만 구정 때문에 작업을 할 수 없었으니 내 마음대로 42일 차라고 하겠다. 뭐 어때 내가 프로젝트 오너이자 개발자인데.

아무튼 구매평에 저장되어 있는 이미지를 수정 혹은 삭제할 때 기존 S3에 저장되어 있는 파일을 어떻게 처리하면 좋을지 고민했다.

1. 동기적으로 삭제

말 그대로 구매평이 삭제되거나, 이미지가 수정될 때 S3에 있는 객체 또한 동기적으로 삭제하는 방식.

구매평을 삭제할 경우 API는 DELETE /files, DELETE /reviews 2번 호출 되고,

구매평의 이미지를 삭제할 경우 API는 DELETE /files, PATCH /reviews 역시 2번,

구매평 이미지를 변경하는 경우 API는 DELETE /files, POST /files, PATCH /reviews 3번 호출이 된다.

제일 상식적이고 직관적인 방식이긴 하나 사용자가 원하는건 구매평의 이미지가 삭제되거나 구매평의 이미지가 변경되는 것이지 S3에 저장되어 있는 파일이 삭제되는 것이 아니였다.

매번 DELETE API를 호출하는 것이 비효율 적이라 생각되어 기각.

2.비동기적으로 삭제

구매평이 삭제되거나 이미지가 변경될 때 삭제하는 이미지의 기록을 남기는 방식.

Log 객체를 만들어 삭제 되어야 하는 파일의 url를 저장해두고 일정 주기마다 메뉴얼이든 자동이든 Log객체를 이용해 S3 버킷을 청소해주는 API를 호출해 S3에 필요없는 파일을 삭제.

1번 보다는 효율적인 방식인 것 같지만…음 더 좋은건 없을까?

3.객체 생명주기 설정

S3 Standard 기준 GB당 30원 수준이다. 그럼 굳이 삭제해야 할까…?

삭제를 위한 API 호출과 삭제비용이 높을수도 있는 수준.

 

여러 고민 끝에 DELETE는 진행하지 않기로 결정했다.

나중에 정말 삭제가 필요한 상황이 오면 별도로 버킷을 생성해 S3에서 제공하는 객체 생명주기 설정을 통해 삭제하는 것으로…!