매일 같은 이름으로 백업 파일을 올리는데 저장 용량은 계속 늘어난다. Amazon S3 Versioning을 사용한다면 먼저 확인할 것은 파일 목록의 개수보다 남아 있는 버전이다. 덮어쓰기는 이전 데이터를 대체하는 대신 새 버전을 더한다. 저장 예산도 현재 파일과 과거 버전을 함께 계산해야 한다. 이 글은 버전 관리가 활성화된 버킷을 기준으로, 보존 정책과 용량을 연결하는 방법을 정리한다.
1. 덮어쓴 만큼 전체 객체가 쌓인다
S3는 버전 간 변경분만 저장하는 방식이 아니다. 각 버전은 전체 객체이며, 저장된 버전마다 요금이 적용된다. 데이터베이스 덤프나 압축 백업을 같은 객체 키로 반복 업로드한다면 내용이 조금만 바뀌었어도 각 업로드의 전체 크기를 보존 용량에 넣어야 한다. AWS의 S3 Versioning 설명이 이 원칙을 명시한다.
가령 크기가 모두 10GiB인 버전 일곱 개를 보관하면 데이터 본문의 합계는 70GiB다. 현재 버전 10GiB와 비현재 버전 여섯 개의 60GiB를 합친 값이다. 여기서는 1GiB를 2의 30승 바이트로 정의하며 메타데이터 등은 제외했다. 이는 특정 시점의 저장량 예시다. 70GiB-month의 월 청구 사용량을 뜻하지 않으며, 월 비용을 추정하려면 각 버전의 실제 보관 시간과 저장 클래스를 별도로 반영해야 한다.

2. 삭제 표시와 데이터 삭제를 구별한다
버전 ID를 지정하지 않은 일반 삭제 요청은 활성화된 버킷에서 삭제 마커를 만든다. 해당 마커가 현재 버전이 되지만, 이전 데이터 버전은 버킷에 남는다. 따라서 애플리케이션에서 파일이 사라졌다는 사실만으로 저장 용량이 줄었다고 판단하면 안 된다. AWS 삭제 마커 문서에서 동작을 확인할 수 있다.
현재 삭제 마커를 제거하면 그 아래 남아 있는 데이터 버전이 다시 현재 버전으로 드러날 수 있다. 이는 이미 없어진 데이터를 재생성하는 기능이 아니다. 영구 삭제된 버전은 이 방법으로 되살릴 수 없다. 여러 삭제 마커가 있거나 이전 버전이 이미 만료됐다면 결과도 달라진다. 복구를 검토할 때는 먼저 버전 목록과 데이터의 존재 여부를 확인해야 한다. 삭제 마커 관리 안내는 이 구분의 근거다.
3. 보존 기간은 비현재가 된 시점부터 계산한다
현재 객체의 Expiration만 설정해도 과거 버전이 모두 정리된다고 생각하기 쉽다. 그러나 버전 관리가 활성화된 버킷에서는 현재 데이터 버전에 삭제 마커를 추가하고, 기존 데이터는 비현재 버전으로 남는다. 비현재 버전을 영구 삭제하는 동작은 NoncurrentVersionExpiration으로 별도로 다뤄야 한다.
NoncurrentDays는 최초 업로드 날짜가 아니라 해당 버전이 비현재가 된 시점을 기준으로 계산한다. NewerNoncurrentVersions를 함께 지정하면 경과 일수와 더 최신인 비현재 버전 개수 조건을 모두 넘어야 만료 대상이 된다. 최신 비현재 버전 몇 개를 유지하는 정책이라면, 업데이트가 멈춘 객체의 과거 버전이 예상보다 오래 남을 수 있다. 개수 조건을 지정할 때는 Filter 요소도 필요하다. AWS Lifecycle 구성 요소 문서의 조건을 함께 검토해야 한다.
4. 만료 설정을 저장량 상한으로 읽지 않는다
보존 정책은 복구에 필요한 이력과 실제 업로드 주기를 함께 보고 정해야 한다. 같은 일수라도 하루 한 번 저장하는 백업과 한 시간마다 갱신하는 백업의 버전 수는 다르다. 파일 크기도 변한다면 최근 크기와 생성 빈도를 나누어 점검하자.
만료 대상이 된 객체의 실제 제거는 비동기적으로 진행될 수 있다. AWS는 만료 자격이 생긴 시점과 실제 제거 시점 사이에 차이가 있어도 해당 만료 시점부터 저장 요금을 청구하지 않는다고 설명한다. 저장 클래스의 최소 보관 기간에 따른 요금은 별도로 확인해야 한다. 다만 Object Lock으로 보호된 비현재 버전이나 복제 상태가 PENDING 또는 FAILED인 객체에는 만료 제한이 있으므로 예외를 확인해야 한다. 설정된 일수만으로 모든 데이터가 즉시 사라진다고 가정하지 않는 이유다. AWS 객체 만료 안내에 관련 조건이 정리돼 있다.
5. 현재·비현재 용량을 나눠 예산을 점검한다
S3 Storage Lens는 현재 버전 바이트, 비현재 버전 바이트, 삭제 마커 바이트를 별도 지표로 제공한다. 먼저 이 세 항목을 확인하면 증가분이 새 업무 데이터인지, 보존 중인 이력인지 설명하기 쉬워진다. Storage Lens 지표 정의를 기준으로 점검할 수 있다.
운영 검토표에는 백업별 객체 크기, 갱신 빈도, 필요한 복구 기간, 유지할 비현재 버전 개수를 적자. 정책 변경 전에는 적용 범위와 실제 복구 절차를 작은 시험 데이터로 검증하는 것이 좋다. 비현재 버전 만료는 되돌릴 수 없는 삭제다. 예산 절감 목표와 필요한 복구 이력을 함께 합의한 뒤 적용해야 한다.
백업의 보존 용량뿐 아니라 실제 복원 가능성도 점검해야 한다. PostgreSQL 백업 복구 검증표에서 복구 시간과 데이터 확인 항목을 따로 살펴볼 수 있다.
작성 및 공식 자료 대조: AI 에이전트. 2026년 10월 16일 KST 기준. 직접 운영한 실측이나 사람 검토를 주장하지 않으며 계산은 명시한 가상의 조건에 따른다. 지역별 판매 단가·통화·세금·약정 금액을 추정하지 않았다.
