# AWS S3 버전 관리를 켜고 이전 버전을 정리하는 수명 주기 규칙 만들기

> S3 버킷의 버전 관리를 활성화하고, 30일이 지난 이전 버전을 영구 삭제하되 최신 이전 버전 2개는 남기는 수명 주기 규칙을 만듭니다. 화면의 경고 문구와 규칙 검토 패널을 읽는 법을 정리하고, 마지막에 버킷을 삭제합니다.

- 주소: https://copyandrun.com/blog/aws-s3-versioning-lifecycle-console/
- 분야: 클라우드
- 발행일: 2026-10-18
- 태그: AWS, S3, 버전 관리, 수명 주기 규칙, 데이터 보호

S3 버전 관리를 켜면 같은 이름의 객체를 덮어쓰거나 지워도 이전 버전이 남아 실수를 되돌릴 수 있습니다. 대신 이전 버전이 계속 쌓여 저장 비용이 늘기 때문에, 보통은 수명 주기 규칙을 함께 만듭니다. 이 글에서는 빈 버킷에 버전 관리를 켜고 이전 버전을 정리하는 규칙까지 만들어 봅니다. 이 실습에서는 객체를 올리지 않았으므로 실제로 버전이 생기고 지워지는 모습은 다루지 않습니다.

## 준비물

| 항목 | 내용 |
| --- | --- |
| AWS 계정 | 실습용 IAM 사용자. 버킷 생성과 삭제, 버전 관리 변경(`s3:PutBucketVersioning`), 수명 주기 구성(`s3:PutLifecycleConfiguration`) 권한이 필요한 것으로 알려져 있으며 이 권한 목록은 하나씩 시험하지 않았습니다 |
| 리전 | 아시아 태평양(서울) ap-northeast-2 |
| 버킷 이름 | `cr-demo-version-1018`. 이름이 이미 쓰이고 있으면 끝의 숫자를 바꿉니다 |
| 규칙 이름 | `cr-demo-expire-old-versions` |
| 예상 소요 시간 | 약 30분(예상치) |
| 변경 사항 | 버킷 1개 생성, 버전 관리 켜기, 수명 주기 규칙 1개 생성. 마지막에 버킷을 삭제합니다 |

화면의 계정 정보는 가렸습니다. 버킷 만들기 화면은 [S3 버킷 보안 기본값 글](/blog/aws-s3-bucket-secure-defaults-console/)과 같아 이름만 입력하고 기본값으로 만들었습니다.

## 1. 버킷 만들고 버전 관리 상태 보기

S3 콘솔 위쪽에서 리전을 서울로 맞추고 `버킷 만들기`로 `cr-demo-version-1018`을 만듭니다.

![버킷 cr-demo-version-1018이 생성되었다는 초록색 알림과 객체가 없는 새 버킷 화면](https://copyandrun.com/img/aws-s3-versioning-lifecycle-console/01-bucket.png)

`속성` 탭에서 `버킷 버전 관리` 칸을 봅니다.

![속성 탭의 버킷 버전 관리 칸에 버킷 버전 관리 비활성됨, MFA 삭제 비활성됨이 표시된 화면](https://copyandrun.com/img/aws-s3-versioning-lifecycle-console/02-versioning-off.png)

새 버킷의 버전 관리는 `비활성됨`입니다. `편집`을 누릅니다.

## 2. 버전 관리 켜기

편집 화면의 선택지는 `일시 중지`와 `활성화` 두 가지입니다. `활성화`를 선택합니다. 한 번 켠 버전 관리는 AWS 문서 기준으로 `비활성됨`으로 되돌릴 수 없고 일시 중지만 할 수 있습니다(이 실습에서 시험하지 않았습니다).

![버킷 버전 관리 편집 화면에서 활성화가 선택되고 파란 상자에 수명 주기 규칙을 업데이트해야 할 수 있다는 안내가 보이는 화면](https://copyandrun.com/img/aws-s3-versioning-lifecycle-console/03-enable-selected.png)

`활성화`를 고르면 파란 상자에 `버킷 버전 관리를 활성화한 후 객체의 이전 버전을 관리하려면 수명 주기 규칙을 업데이트해야 할 수 있습니다.`라는 안내가 나타납니다. 이 안내가 이 글의 다음 단계입니다. 오른쪽 아래 `변경 사항 저장`을 누릅니다.

![버킷 버전 관리를 편집했다는 초록색 알림과 속성 탭의 버킷 버전 관리 활성화됨이 보이는 화면](https://copyandrun.com/img/aws-s3-versioning-lifecycle-console/04-versioning-on.png)

저장하면 알림에 이전 객체 버전을 이전, 아카이빙 또는 삭제하려면 수명 주기 규칙을 구성하라는 안내가 붙고, 속성 칸은 `활성화됨`으로 바뀝니다. `MFA 삭제`는 `비활성됨` 그대로입니다. 이 설정은 콘솔이 아니라 AWS CLI나 API로만 바꿀 수 있다고 화면에 적혀 있어 이 글에서는 다루지 않았습니다.

## 3. 수명 주기 규칙 만들기

`관리` 탭을 엽니다. `수명 주기 규칙` 칸에는 규칙이 없고 `수명 주기 규칙 생성` 단추가 있습니다.

![관리 탭의 수명 주기 규칙 칸에 이 버킷에 수명 주기 규칙이 없다는 문구와 수명 주기 규칙 생성 단추가 보이는 화면](https://copyandrun.com/img/aws-s3-versioning-lifecycle-console/05-no-rules.png)

단추를 누르고 아래처럼 입력합니다.

| 화면 | 입력칸 | 입력값 |
| --- | --- | --- |
| 수명 주기 규칙 구성 | 수명 주기 규칙 이름 | `cr-demo-expire-old-versions` |
| 수명 주기 규칙 구성 | 규칙 범위 선택 | 하나 이상의 필터를 사용하여 이 규칙의 범위 제한 |
| 수명 주기 규칙 구성 | 접두사 | `docs/` |
| 수명 주기 규칙 작업 | 선택할 작업 | 객체의 이전 버전 영구 삭제 |
| 객체의 이전 버전 영구 삭제 | 객체가 최신이 아닌 상태로 전환된 후 경과 일수 | `30` |
| 객체의 이전 버전 영구 삭제 | 보관할 새 버전 수 | `2` |

![수명 주기 규칙 이름에 cr-demo-expire-old-versions, 규칙 범위는 필터 사용, 접두사에 docs/가 입력된 수명 주기 규칙 생성 화면](https://copyandrun.com/img/aws-s3-versioning-lifecycle-console/06-rule-filled.png)

범위를 `버킷의 모든 객체에 적용`으로 고르면 버킷 전체가 대상이 됩니다. 이 실습에서는 접두사 `docs/`로 범위를 좁혔고, 모든 객체 옵션은 선택하지 않았습니다. 아래로 내리면 `수명 주기 규칙 작업` 칸에 다섯 가지 작업이 있습니다.

![수명 주기 규칙 작업 칸에 다섯 가지 작업 확인란이 보이고 아래 검토 칸은 비어 있는 화면](https://copyandrun.com/img/aws-s3-versioning-lifecycle-console/07-rule-actions.png)

작업은 다음과 같습니다.

- 스토리지 클래스 간에 객체의 현재 버전 전환
- 스토리지 클래스 간에 객체의 이전 버전 전환
- 객체의 현재 버전 만료
- 객체의 이전 버전 영구 삭제
- 만료된 객체 삭제 마커 또는 완료되지 않은 멀티파트 업로드 삭제(이 항목은 태그나 크기를 기준으로 필터링할 때 지원되지 않는다고 화면에 적혀 있습니다)

`객체의 이전 버전 영구 삭제`를 체크하고 일수와 보관할 버전 수를 입력하면 아래 `전환 및 만료 작업 검토` 칸이 채워집니다.

![경과 일수 30과 보관할 새 버전 수 2를 입력하자 검토 칸에 30일 뒤 이전 버전 2개 유지와 나머지 삭제가 표시된 화면](https://copyandrun.com/img/aws-s3-versioning-lifecycle-console/08-days-filled.png)

`보관할 새 버전 수`라는 이름이 헷갈리지만, 검토 칸의 문장대로 현재 버전이 아니라 이전 버전 중 가장 최신 것 몇 개를 남기라는 뜻입니다. 입력칸 아래 도움말은 "다른 모든 이전 버전이 이동됩니다"라고 적혀 있지만 이 규칙의 작업은 영구 삭제이고 검토 칸도 영구 삭제로 표시합니다. 검토 칸이 이 규칙이 하는 일을 문장으로 보여 줍니다. 객체가 최신 상태가 아니게 된 날(`0일`)부터 30일이 지나면 이전 버전 중 가장 최신 버전 2개를 남기고 다른 이전 버전은 영구 삭제합니다. `규칙 생성`을 누릅니다.

![규칙 cr-demo-expire-old-versions를 추가했다는 초록색 알림과 수명 주기 규칙 목록에 상태 Enabled, 범위 필터링됨, 이전 버전 작업 영구 삭제가 표시된 화면](https://copyandrun.com/img/aws-s3-versioning-lifecycle-console/09-rule-created.png)

목록에 규칙이 `Enabled`로 나타나고 범위는 `필터링됨`, `이전 버전 작업` 열은 `영구 삭제`입니다. 화면 안내에 따르면 수명 주기 규칙은 하루에 한 번 실행되고, 구성을 업데이트하는 데 시간이 걸릴 수 있습니다. 이 실습에서는 규칙이 실제로 실행되는지 보지 않았습니다.

## 4. 정리: 버킷 삭제

버킷 목록에서 `cr-demo-version-1018`만 선택하고 `삭제`를 누릅니다.

![cr-demo-version-1018 버킷을 삭제할지 묻고 버킷 이름 입력칸이 있는 삭제 확인 화면](https://copyandrun.com/img/aws-s3-versioning-lifecycle-console/10-delete-dialog.png)

화면 제목의 버킷 이름이 지우려는 버킷과 같은지 확인한 뒤 이름을 입력하고 `버킷 삭제`를 누릅니다.

![버킷이 삭제되었다는 초록색 알림과 버킷이 1개만 남은 목록 화면](https://copyandrun.com/img/aws-s3-versioning-lifecycle-console/11-deleted.png)

삭제 뒤 목록에는 이미 있던 버킷 1개가 남았고, 이름은 가렸습니다. 이 버킷은 이 실습에서 다루지 않았습니다. 이 실습의 버킷은 객체가 없어서 바로 삭제되었습니다. 수명 주기 규칙이 버킷과 함께 사라지는지, 객체와 버전이 있는 버킷은 삭제 전에 모두 비워야 하는지는 AWS 문서를 근거로 한 설명이며 이 실습에서 확인하지 않았습니다.

## 자주 막히는 곳

- **버전 관리를 켰는데 이전 버전이 안 줄어드는 경우**: 이전 버전은 수명 주기 규칙이 없으면 계속 남는 것으로 알려져 있습니다. 이 글의 규칙이 있어도 접두사 `docs/` 밖의 객체, 이전 버전이 된 지 30일이 안 된 것, 남기도록 한 최신 이전 버전 2개는 이 규칙으로 지워지지 않습니다(문서 기준, 이 실습에서 시험하지 않았습니다).
- **범위를 모든 객체로 고르는 경우**: 규칙이 버킷 전체에 적용됩니다. 운영 버킷에서는 접두사나 태그로 범위를 좁혀 먼저 시험하는 편이 안전합니다.
- **규칙이 목록에 보이지 않는 경우**: 화면 안내에 따라 목록을 새로 고칩니다. 구성 반영에 시간이 걸릴 수 있다고 적혀 있습니다.
- **`보관할 새 버전 수`를 비워 두는 경우**: 이 칸은 선택 사항입니다. 비워 두었을 때의 동작은 이 실습에서 확인하지 않았고, 문서 기준으로는 일수가 지난 이전 버전이 모두 삭제되는 것으로 알려져 있습니다.

## 이어서 해 볼 것

- 객체를 같은 이름으로 두세 번 올려 보고, 객체 목록의 `버전 표시`를 켜서 버전 ID가 여러 개 생기는지 확인하기
- 객체를 삭제했을 때 삭제 마커가 생기는지 보고, 마커를 지워 객체를 되살려 보기
- `만료된 객체 삭제 마커` 작업을 함께 체크해 마커가 정리되는지 보기
- [CloudTrail 이벤트 기록 글](/blog/aws-cloudtrail-event-history-read/)에서 `PutBucketVersioning`과 `PutBucketLifecycle` 이벤트 찾아보기

## 확인한 범위와 확인하지 않은 것

- 확인한 것: 버킷 생성, 버전 관리 비활성에서 활성으로 변경, 수명 주기 규칙 생성 화면과 검토 칸, 규칙 목록 표시, 버킷 삭제.
- 확인하지 않은 것: 객체를 올렸을 때 버전이 생기는 동작, 삭제 마커, 규칙이 실제로 이전 버전을 지우는지, 규칙이 실행되는 시각, 버전 관리를 켠 뒤 일시 중지했을 때의 상태. 일시 중지 선택지의 효과는 화면 문구(`모든 작업에 대한 객체 버전 생성을 일시 중지하고 기존 객체 버전은 보관합니다`)만 확인했습니다. 화면 문구는 이 실습 시점의 한국어 콘솔 기준입니다.
