이 글은 AWS 인프라 운영 중 경험한 실제 비용절감 사례를 기록한 시리즈입니다.
1. 개요
이번에는 Amazon S3에서 발생할 수 있는 숨은 비용 중 하나인 "미완료 멀티파트 업로드(Uncompleted Multipart Upload, MPU)" 문제와 그 해결 사례를 정리합니다. 회사 내부에서는 비용항목을 모니터링 중 S3의 비용이 높아지면서 실제로 약 1.1TB의 불필요한 스토리지 비용이 발생하고 있었습니다.
2. 멀티파트 업로드란?
Amazon S3는 대용량 객체(최대 5TB)를 효율적으로 업로드하기 위해 Multipart Upload 기능을 제공합니다.
장점:
- 네트워크 장애 시 복구 용이
- 병렬 처리로 업로드 속도 향상
- 객체 크기에 따라 자동 최적화
일반 객체 업로드는 최대 5GB 제한, Multipart Upload는 5TB까지 지원
3. 미완료 MPU란?
Multipart Upload는 CompleteMultipartUpload 요청이 들어와야 실제 객체로 S3에 반영됩니다. 하지만 다음과 같은 상황에서 업로드가 미완료 상태로 남을 수 있습니다.
- 네트워크 장애
- 업로드 중단
- 애플리케이션 에러 또는 취소
이때 S3 콘솔이나 API 상에서는 객체가 보이지 않지만, 스토리지에는 비용이 청구됩니다.
4. 실제 사례



문제 상황
- 버킷 내 정상 객체는 모두 삭제된 상태
- 그러나 S3 사용량 지표상 약 600GB가 여전히 존재
- 이는 모두 미완료 MPU 상태에서 발생한 스토리지 비용
기존 정책의 한계
- S3 Lifecycle에서 "1일 지난 객체 삭제" 정책은 존재했으나, 이는 완료된 객체에만 적용
- 미완료 MPU에는 적용되지 않음

5. 해결 방법 – MPU 자동 삭제 정책 적용
Amazon S3는 Lifecycle Rule을 통해 미완료 업로드를 자동으로 중단할 수 있도록 지원합니다.


Lifecycle Rule 설정 방법
콘솔 설정 경로:
S3 → 버킷 → 관리 → 수명 주기 규칙 생성
옵션: 완료되지 않은 멀티파트 업로드 중단 → 1일 후 설정
XML 설정 예시
<LifecycleConfiguration>
<Rule>
<ID>AbortIncompleteMultipartUpload</ID>
<Prefix></Prefix>
<Status>Enabled</Status>
<AbortIncompleteMultipartUpload>
<DaysAfterInitiation>1</DaysAfterInitiation>
</AbortIncompleteMultipartUpload>
</Rule>
</LifecycleConfiguration>
6. 모니터링 및 수동 정리 방법
미완료 MPU 확인
aws s3api list-multipart-uploads --bucket <bucket-name>
개별 업로드 정리
aws s3api abort-multipart-upload \
--bucket <bucket-name> \
--key <object-key> \
--upload-id <upload-id>
7. 결과 및 결론
- 약 1.1TB의 숨은 스토리지 비용을 정리함으로써 즉시 비용 절감 달성
- Lifecycle 정책 적용 이후 추가 누적 방지
- 향후 S3 버킷 설정 시 MPU 자동 정리 정책을 기본 구성으로 포함하기로 함
Tip: S3 Lens로 S3 BucketSizeBytes 지표를 모니터링하고, 객체 수와 비교하여 미완료 MPU 의심 상황을 조기 파악할 수 있습니다.
미완료 멀티파트 업로드는 놓치기 쉬운 숨은 비용입니다. 정기 점검과 정책 설정으로 예기치 않은 요금 부과를 막을 수 있습니다.
