지운 S3 파일을 되살리는 버전 관리와 아무도 못 지우게 하는 객체 잠금
S3 버킷에서 파일을 실수로 덮어쓰거나 지우는 일은 생각보다 자주 일어납니다. 배포 스크립트가 잘못된 파일로 덮어쓰기도 하고, 정리 작업이 엉뚱한 경로를 지우기도 합니다. 기본 설정의 버킷이라면 이렇게 사라진 파일은 되돌릴 방법이 없습니다.
S3에는 이런 사고에 대비하는 기능이 두 단계로 있습니다. 버전 관리는 덮어쓰거나 지워도 이전 버전을 남겨 두어 되살릴 수 있게 하고, 객체 잠금은 정해진 기간 동안 아무도 파일을 지우거나 바꾸지 못하게 막습니다. 백업과 감사 기록을 지키는 데 함께 쓰이는 기능입니다.
이 글에서는 버전 관리의 세 가지 상태와 삭제가 실제로 처리되는 방식, 버전이 쌓일 때의 요금, 객체 잠금의 두 가지 모드와 쓰임새를 정리합니다.

버전 관리의 세 가지 상태
버킷은 버전 관리가 꺼진 상태(기본값), 켜진 상태, 일시 중지된 상태 중 하나입니다. 한 번 켠 버킷은 다시 꺼진 상태로 돌아갈 수 없고, 일시 중지만 할 수 있습니다. 일시 중지해도 이미 쌓인 버전은 그대로 남습니다.
| 상태 | 덮어쓰면 | 삭제하면 |
|---|---|---|
| 꺼짐(기본값) | 이전 내용이 사라짐 | 파일이 영구 삭제됨 |
| 켜짐 | 새 버전이 생기고 이전 버전은 남음 | 삭제 마커가 생기고 이전 버전은 남음 |
| 일시 중지 | 새 버전이 쌓이지 않음(null 버전으로 덮어씀) | 삭제 마커가 생김, 기존 버전은 남음 |
버전 관리를 켠 버킷에서 일반 삭제는 실제로 지우지 않고 삭제 마커만 얹으며, 한 번 켜면 다시 끌 수는 없고 일시 중지만 가능합니다.
삭제 마커와 복구 방법
버전 관리가 켜진 버킷에서 파일을 지우면, S3는 파일을 없애는 대신 삭제 마커라는 표시를 가장 최신 버전으로 얹습니다. 목록에서는 파일이 사라진 것처럼 보이지만 이전 버전들은 그대로 남아 있습니다. 그래서 삭제 마커만 지우면 바로 아래 버전이 다시 최신 버전이 되어 파일이 되살아납니다.

- S3 콘솔에서 버킷을 열고 목록 위의 버전 표시를 켭니다.
- 되살릴 파일을 찾으면 맨 위에 삭제 마커가 보입니다.
- 삭제 마커를 선택해 삭제하면, 그 아래 버전이 최신 버전으로 돌아옵니다.
- 덮어쓴 파일을 되돌릴 때는 원하는 이전 버전을 내려받아 다시 올리거나, 그 버전을 같은 이름으로 복사합니다.
반대로 버전 ID를 지정해서 지우면 그 버전은 영구 삭제됩니다. 실수로 버전까지 지우는 것을 막고 싶다면, 버전을 영구 삭제하거나 버전 관리 상태를 바꿀 때 MFA를 요구하는 MFA 삭제 기능을 켤 수 있습니다.
일반 삭제는 삭제 마커를 지우면 되살아나고, 버전 ID를 지정한 삭제만 영구 삭제이므로 이 권한을 좁게 관리하는 것이 핵심입니다.
버전이 쌓이면 요금도 쌓입니다
S3는 저장된 모든 버전에 요금을 매깁니다. 각 버전은 바뀐 부분만이 아니라 파일 전체이기 때문에, 같은 파일의 버전이 세 개면 파일 세 개 값을 냅니다. 100MB짜리 파일을 열 번 덮어쓰면 최신 버전 하나와 이전 버전 열 개, 모두 약 1.1GB가 저장됩니다.
| 수명 주기 규칙 | 하는 일 | 예 |
|---|---|---|
| 이전 버전 만료 | 최신이 아니게 된 지 N일 지난 버전 삭제 | 30일 지난 이전 버전 삭제 |
| 최근 이전 버전 개수 유지 | 이전 버전 중 최근 몇 개는 남김 | 최근 3개는 기간과 관계없이 보관 |
| 이전 버전 저렴한 클래스로 이동 | 오래된 버전을 저장 비용이 낮은 클래스로 옮김 | 30일 뒤 Standard-IA로 |
| 만료된 삭제 마커 정리 | 이전 버전이 모두 사라진 삭제 마커 제거 | 목록 정리 |
AWS 문서는 버전 관리를 켜기 전에 버전 없는 버킷에서 쓰던 만료 규칙이 있었다면, 같은 영구 삭제 효과를 유지하려면 이전 버전 만료 규칙을 함께 추가해야 한다고 안내합니다. 버전 관리를 켤 때 수명 주기 규칙을 같이 만드는 습관을 들이면 요금이 조용히 늘어나는 일을 막을 수 있습니다.
버전마다 파일 전체 요금이 붙으므로, 버전 관리를 켤 때는 이전 버전 만료 규칙을 반드시 함께 만듭니다.
객체 잠금: 정해진 기간 동안 아무도 못 지우게
버전 관리가 실수에 대비하는 기능이라면, 객체 잠금은 의도적인 삭제까지 막는 기능입니다. 한 번 쓰고 여러 번 읽는(WORM) 방식으로, 잠긴 버전은 보존 기간이 끝날 때까지 덮어쓰거나 지울 수 없습니다. 객체 잠금은 버전 관리가 켜진 버킷에서만 동작합니다.
| 구분 | 거버넌스 모드 | 규정 준수 모드 |
|---|---|---|
| 누가 지울 수 있나 | 특별 권한(s3:BypassGovernanceRetention)을 가진 사용자 | 루트 사용자를 포함해 아무도 불가 |
| 보존 기간 단축 | 특별 권한이 있으면 가능 | 불가(연장만 가능) |
| 쓰임새 | 대부분의 삭제를 막되 관리자 예외가 필요할 때, 규정 준수 모드 전 시험 | 규제 때문에 어떤 경우에도 지우면 안 되는 기록 |
규정 준수 모드로 잠긴 버전은 보존 기간이 끝나기 전에 지우는 방법이 AWS 계정 자체를 삭제하는 것밖에 없습니다. 그래서 처음에는 거버넌스 모드로 짧은 기간을 시험해 보고 규정 준수 모드로 넘어가는 것이 안전합니다. 기간을 정하기 어렵다면 기한 없이 유지되는 법적 보존(legal hold)을 걸었다가 필요 없을 때 해제하는 방법도 있습니다.
객체 잠금은 버전 관리 위에서 동작하며, 규정 준수 모드는 루트도 지울 수 없으므로 거버넌스 모드로 먼저 시험합니다.
버전 관리는 백업을 대신하지 않습니다
버전 관리는 같은 버킷 안에 이전 버전을 남기는 기능입니다. 그래서 실수로 덮어쓰거나 지운 경우에는 강력하지만, 버킷 자체에 접근할 수 있는 권한이 탈취되거나 리전 전체에 문제가 생기는 경우까지 막아 주지는 못합니다. 버전을 지정해 지울 권한을 가진 사람이 마음먹으면 이전 버전까지 지울 수 있기 때문입니다.
중요한 데이터라면 버전 관리에 더해 다른 리전이나 다른 계정의 버킷으로 복제해 두거나, 객체 잠금으로 보존 기간을 걸어 두는 구성을 함께 고려합니다. 원본과 다른 장소에 사본을 두는 원칙은 이 블로그에서 다룬 3-2-1 백업 규칙과 같습니다.
버전 관리를 켜는 순서
- 버킷의 속성 탭에서 버킷 버전 관리를 편집해 활성화합니다.
- 같은 버킷의 관리 탭에서 수명 주기 규칙을 만들고, 이전 버전을 30일 같은 기간이 지나면 삭제하도록 설정합니다. 최근 몇 개 버전은 기간과 관계없이 남기도록 할 수도 있습니다.
- 삭제 마커만 남은 객체를 정리하도록 만료된 삭제 마커 삭제 옵션을 함께 켭니다.
- 테스트 파일을 하나 올렸다가 덮어쓰고 지운 뒤, 버전 표시에서 이전 버전과 삭제 마커가 보이는지 확인합니다.
- 삭제 마커를 지워 파일이 되살아나는지까지 확인하면 복구 절차를 미리 익혀 둘 수 있습니다.
버전 관리에서 자주 묻는 것
버전 관리를 켜기 전에 있던 파일은 어떻게 되나요?
기존 파일은 그대로 있고 버전 ID가 null인 버전으로 취급됩니다. 이후 그 파일을 덮어쓰거나 지우면 그때부터 새 버전과 삭제 마커가 생기며 이전 내용이 남습니다.
버전 관리를 일시 중지하면 요금이 멈추나요?
일시 중지는 새 버전이 쌓이는 것만 멈춥니다. 이미 저장된 이전 버전은 그대로 남아 계속 요금이 붙으므로, 줄이고 싶다면 수명 주기 규칙으로 이전 버전을 정리해야 합니다.
객체 잠금이 걸린 파일도 목록에서 지워질 수 있나요?
버전 ID 없이 일반 삭제를 하면 삭제 마커가 생겨 목록에서는 사라진 것처럼 보일 수 있습니다. 하지만 잠긴 버전 자체는 보존 기간 동안 그대로 남아 있고, 그 버전을 지정해 영구 삭제하려 하면 거부됩니다.
버전이 쌓이면 얼마 — 100GB 버킷을 하루 10%씩 덮어쓰면
버전 관리의 요금은 켜는 순간이 아니라 이전 버전을 언제 지우느냐로 정해집니다. 100GB 버킷에서 하루 10GB가 덮어써진다고 가정하고 서울 리전 단가(AWS Price List 2026년 10월, Standard GB-월 0.025달러, Standard-IA 0.0138달러)로 계산했습니다.
| 정책 | 30일 뒤 이전 버전 양 | 이전 버전 월 요금 |
| 이전 버전을 지우지 않음 | 300GB (계속 늘어남) | 7.50달러 (매달 7.50달러씩 증가) |
| 이전 버전을 30일 뒤 Standard-IA로 | 300GB | 4.14달러 |
| 이전 버전을 30일 뒤 삭제 | 최대 300GB 유지 | 7.50달러에서 고정 |
| 이전 버전을 7일 뒤 삭제 | 최대 70GB 유지 | 1.75달러에서 고정 |
첫 줄처럼 두면 1년 뒤 이전 버전이 3.6TB, 월 90달러가 됩니다. 수명 주기 규칙에서 이전 버전(NoncurrentVersion) 만료일을 정해 두는 것이 버전 관리를 켤 때 같이 해야 하는 설정입니다. 실수로 지운 파일을 되살릴 시간은 7일이면 대부분 충분합니다.
설정 전 체크리스트
- 버전 관리를 켤 버킷에 이전 버전 만료 수명 주기 규칙을 함께 만들었는가
- 버전 ID를 지정한 영구 삭제 권한(s3:DeleteObjectVersion)을 꼭 필요한 역할에만 주었는가
- 백업·감사 로그처럼 절대 지워지면 안 되는 버킷에 객체 잠금이 필요한지 검토했는가
- 규정 준수 모드를 쓰기 전에 거버넌스 모드로 보존 기간을 시험했는가
- 퍼블릭 액세스 차단이 켜져 있는가
함께 읽으면 좋은 글: S3 스토리지 클래스와 수명 주기 정책 / EBS 스냅샷과 AWS Backup 차이
참고 자료: S3 버전 관리, S3 객체 잠금, S3 수명 주기 관리
※ 본 글은 2026년 10월 기준 Amazon S3 사용 설명서를 참고해 작성했으며, 기능과 요금은 변경될 수 있으니 최신 내용은 AWS 공식 문서에서 확인해 주세요.