AWS S3 버킷을 비우고 삭제하려고 할 때, Delete Marker가 남아 있어 삭제가 안 되는 상황을 한 번쯤은 겪게 됩니다. 특히 객체가 수천~수만 개 이상 누적된 버킷일수록, 콘솔에서 Empty Bucket을 눌러도 수 시간 이상 작업이 지연되거나 실패하는 일이 흔합니다.
많은 기업이 이 문제를 해결하기 위해 CLI 명령어를 반복 실행하지만, 세션이 끊기면 처음부터 다시 시작해야 하고 실제 삭제 속도도 매우 느립니다.
이번 글에서는 S3 버킷 삭제가 어려운 이유와, 가장 효율적인 해결책인 ‘S3 수명주기(Lifecycle) 정책’ 구성 방법을 정리했습니다.
우선 S3에 평균 10000개 이상의 객체가 있을 경우,
해당 버킷은 수명주기 규칙을 통해 버킷을 비워주는 것이 가장 좋습니다.
AWS CLI, 콘솔에서 [Empty Bucket = 버킷비우기]를 누르는 방안 등의 경우 아래의 이유들로 인해 비효율적이고 매우 오랜 시간이 소요됩니다.
- 버킷으로 Delete API 요청을 계속해서 보내야 함
- 그 요청들을 보내는 동안 브라우저 콘솔 / CLI 세션을 계속해서 유지해야 함 (이탈시 작업 실패)
따라서 버킷 내의 모든 현재 버전 만료/이전 버전 영구 삭제 및 삭제마커 삭제 등을 수행하는
수명 주기 규칙을 구성하신 다음 이틀 가량 기다려주시면 가장 효과적으로 해당 버킷을 비울 수 있습니다.
콘솔에서 구현하실 경우 아래처럼 2가지 룰 생성합니다

규칙 1
현재 버전 1일 후 만료
이전 버전 1일 후 영구 삭제 (보관할 새 버전 수 : 공란)
불완전 멀티파트 업로드 삭제 : 1일


규칙 2
만료된 객체 삭제 마커

삭제 규칙을 2개 구성하는 이유는
[객체의 현재 버전 만료]와 [만료된 객체 삭제 마커 삭제]를 하나의 규칙 안에 넣을 수 없기 때문입니다.
또한, [보관할 새 버전 수]의 경우 현재 버전이 아닌,
“이전 버전의 객체 중 시간 상으로 가장 최신인 것 n개”라고 보시면 됩니다.
공란으로(0) 두면 남기는 버전 없이 모두 삭제하실 수 있습니다.
[관련 자료]
S3 버킷 삭제는 단순 정리 작업이 아니라, 데이터 보존 정책·컴플라이언스·보안 규정과 직결되는 업무입니다.
Lifecycle 정책을 활용한 자동 삭제는 운영 리스크를 줄이고, 사람이 실수로 데이터를 남기거나 삭제 명령을 중단하는 상황을 예방합니다.
규정 준수 목적의 S3 정리 작업이 필요하다면, NDS 클라우드 기술팀으로 문의 부탁드립니다.
SA 오승우