Amazon S3 Lifecyle은 객체를 자동으로 정리하거나 스토리지 클래스를 전환해 비용을 관리할 수 있는 기능입니다.
하지만 운영 환경에서는 다음과 같은 질문을 자주 접하게 됩니다.
“S3 Lifecycle 규칙을 여러 개 설정했는데, 어떤 규칙이 먼저 적용되는 건가요?”
AWS 공식 문서에서는 “더 짧은 만료 정책이 적용된다”라는 문장이 등장하지만, 이를 그대로 해석하면 실제 동작과 어긋나는 경우가 생길 수 있습니다.
Generally, Amazon S3 Lifecycle optimizes for cost.
if two expiration policies overlap, the shorter expiration policy is honored so that data is not stored for longer than expected.
이번 글에서는 S3 Lifecycle의 기본 동작 원리를 먼저 정리한 뒤, 실제 예시를 통해 규칙 선택 기준을 설명드리겠습니다.
S3 Lifecycle 기본 개념
S3 Lifecycle을 이해하기 위해 꼭 필요한 개념은 세 가지 입니다.
1. 객체 상태(state)
버저닝이 활성화된 S3 버킷에선느 객체가 다음 상태 중 하나로 존재합니다.
| 상태 | 설명명 |
|---|---|
| 현재 버전 | 현재 사용 중인 객체 |
| 이전 버전 | 수정 또는 삭제 후 남아 있는 과거 버전 |
| 삭제 마커 | “삭제됨”을 표시하는 마커 객체 |
Lifecycle 규칙은 이 상태별로 따로 적용됩니다.
2. 필터 조건(Filter)
Lifecycle 규칙은 다음 조건으로 적용 대상을 제한할 수 있습니다.
규칙은 객체와 조건이 일치할 때만 평가 대상이 됩니다.
- 접두사(prefix)
- 객체 태그(Tag)
- 접두사 + 태그 조합
3. 규칙 선택의 핵심 원칙
S3 Lifecycle은 다음과 같이 동작합니다.
동일한 객체에 여러 규칙이 적용될 수 있는 경우, 스토리지 비용을 더 빠르게 줄일 수 있는 동작을 선택합니다.
규칙 순서 ❌, 규칙 이름 ❌, 콘솔 표시 위치 ❌ 는 전혀 고려되지 않습니다!
예시로 이해하는 Lifecycle 규칙 적용 방식
이제부터는 실제 운영 환경에서 자주 발생하는 사례를 통해 설명드리겠습니다.
1. 예시(1) 필터 조건이 다른 여러 규칙이 존재하는 경우
설정된 Lifecycle 규칙
| 규칙명 | 적용 대상 | 기간 | 필터 조건 |
|---|---|---|---|
| Rule 1 | 이전 버전 | 90일 후 | 접두사: logs/ |
| Rule 2 | 이전 버전 | 180일 후 | 접두사: data/ |
| Rule 3 | 이전 버전 | 60일 후 | 접두사: * |
적용 결과
| 객체 경로 | 적용 규칙 | 이유 |
|---|---|---|
| logs/app.log | Rule 1 | 더 구체적인 필터(logs/) |
| data/file.csv | Rule 2 | 더 구체적인 필터(data/) |
| backup/db.bak | Rule 3 | Rule1, Rule2에 해당 되지 않음 |
→ 이 경우 기간이 가장 짧은 Rule 3이 항상 우선되지는 않습니다. 객체와 가장 정확히 일치하는 규칙이 먼저 선택됩니다.
2. 예시(2) 동일 조건인데 기간만 다른 규칙은 가능한가요?
아래와 같은 구성은 가능할 것처럼 보이지만, 실제로는 불가능합니다.
동일한 상태 + 동일한 필터 조건을 가진 규칙은 AWS 콘솔 및 CLI에서 생성 자체가 불가능합니다.
❌ 생성 불가한 규칙 예시
| 규칙명 | 적용 대상 | 기간 | 필터 조건 |
|---|---|---|---|
| Rule 4 | 이전 버전 | 90일 후 | 접두사: |
| Rule 5 | 이전 버전 | 180일 후 | 접두사: data/ |
3. 예시(3) 서로 다른 조건을 동시에 만족하는 경우
현실적으로 가장 많이 발생하는 케이스 입니다.
설정된 Lifecycle 규칙
| 규칙명 | 적용 대상 | 기간 | 필터 조건 |
|---|---|---|---|
| Rule 6 | 이전 버전 | 60일 후 | 접두사: logs/ |
| Rule 7 | 이전 버전 | 180일 후 | 태그: Name=ALB |
객체 상태
- 객체 경로:
log/access.log - 객체 태그:
Name=ALB - 객체 상태: 이전 버전
→ 이 객체는 두 규칙 Rule6, Rule7을 모두 만족합니다.
실제 적용 결과
| 항목 | 결과 |
|---|---|
| 평가된 규칙 | Rule 6, Rule 7 |
| 선택된 규칙 | Rule 6 |
| 선택 이유 | 더 빠른 만료 → 비용 절감 |
이 경우에만 “짧은 기간의 규칙이 적용된다”는 결과가 나타납니다.
중요한 점은 기간이 짧아서가 아니라 비용 절감 효과가 더 크기 때문입니다.
운영 관점에서의 설계 팁
마지막으로, 운영 경험을 바탕으로 한 간단한 팁을 정리합니다.
- 규칙 설계 : 필터 조건이 겹치지 않도록 구성
- 버저닝 버킷 : 현재 버전 / 이전 버전 / 삭제 마커 분리 관리
- 삭제 마커 : 별도 규칙으로 명시적 관리
- 규칙 추가 : 기존 규칙과의 중복 여부 사전 검토
Lifecycle 규칙을 설계하거나 운영 중인 환경에 맞는 정책 구성이 필요하신 경우, NDS 클라우드 기술팀으로 문의해 주시기 바랍니다.
SA 강채윤