게시글 삭제 시 게시글에 첨부된 이미지/비디오/음성녹음 등 S3에 저장된 파일객체들을 모두 삭제해야 한다.
프로젝트의 S3 폴더 구조는 위와 같이 되어 있는데, boardKey 하위의 객체들을 한 번에 삭제하고 싶었다.
코드
public void delete(String base) throws IOException {
var listObjectsV2Result = amazonS3Client.listObjectsV2(bucket, base);
for (var objectSummary : listObjectsV2Result.getObjectSummaries()) {
System.out.println("key = " + objectSummary.getKey());
amazonS3Client.deleteObject(bucket, objectSummary.getKey());
}
}
base 매개변수에 삭제하고자 하는 폴더 경로(ex. board/14573)를 넘긴 후, 해당 폴더 하위의 파일객체 목록들을 가져온다. 그리고 for문을 돌며 삭제한다.
결과
key = board/14573/image/dog.jpg
key = board/14573/image/puppy.jpg
key = board/14573/video/video_test.mp4
image와 video 모두 잘 삭제 되었다.
deleteObjects
public void delete(String base) throws IOException {
var listObjectsV2Result = amazonS3Client.listObjectsV2(bucket, base);
var keys = new ArrayList<KeyVersion>();
for (var objectSummary : listObjectsV2Result.getObjectSummaries()) {
keys.add(new KeyVersion(objectSummary.getKey()));
}
amazonS3Client.deleteObjects(new DeleteObjectsRequest(bucket)
.withKeys(keys)
.withQuiet(false)
);
}
AWS 공식 문서의 예시대로 deleteObjects를 사용해보았다.
코드가 복잡해져서 이 방법을 사용하지는 않았지만, 성능적·효율적 관점에서는 검토가 필요하다.
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/delete-multiple-objects.html
여러 객체 삭제 - Amazon Simple Storage Service
여러 객체 삭제 S3 버킷에 있는 모든 객체에 스토리지 비용이 발생하기 때문에 더 이상 필요하지 않은 객체는 삭제해야 합니다. 예를 들어 로그 파일을 수집하는 경우, 더 이상 필요가 없는 로그
docs.aws.amazon.com
'Coding' 카테고리의 다른 글
[JPA] @OneToOne, 일대일(1:1) 연관관계 매핑 시 주의할 점 (지연 로딩 이슈) (0) | 2023.08.11 |
---|---|
[Spring] @JsonInclude와 @JsonIgnore (0) | 2023.07.12 |
[20230628] 오늘의 삽질 (0) | 2023.06.28 |
[JAVA] var 사용 시 주의할 점과 장단점 - 지역 변수 추론 타입 (0) | 2023.06.27 |
[REST API] UrlConnection vs. RestTemplate vs. WebClient (0) | 2023.06.24 |