[AWS] S3: object storage, storage classes, lifecycle
S3, Simple Storage Service, S3 storage class, S3 lifecycle, S3 Intelligent-Tiering, S3 Glacier, S3 versioning
정의
S3 = AWS 의 object storage. bucket + key + object. 11 9’s durability (99.999999999%), 무한 확장. 2026 시점 인터넷의 핵심 스토리지 플랫폼.
사용 상황
| 상황 | S3 선택 이유 |
|---|---|
| 정적 자산 (이미지, JS, CSS) | aws-cloudfront-cdn 와 조합 |
| 로그 장기 보관 | Lifecycle 로 Glacier 자동 이동 |
| ML 학습 데이터 / 모델 | S3 → SageMaker 직접 연동 |
| 백업 / DR | Cross-Region Replication |
| 데이터 레이크 | S3 + Athena + Glue |
| 사용자 파일 업로드 | Presigned URL 로 서버 우회 |
| 컴플라이언스 아카이빙 | Object Lock WORM |
Storage Class
| Class | 용도 | 비용 | 검색 latency |
|---|---|---|---|
| Standard | 자주 접근 | $0.023/GB | ms |
| Intelligent-Tiering | 자동 자주/덜 자주 분류 | varies | ms |
| Standard-IA | 가끔 접근 | 더 cheap, retrieval fee | ms |
| One Zone-IA | 단일 AZ + 가끔 접근 | 더 cheap | ms |
| Glacier Instant Retrieval | archive + 즉시 접근 | 매우 cheap | ms |
| Glacier Flexible Retrieval | archive | 매우 cheap | 분~시간 |
| Glacier Deep Archive | 장기 archive | 가장 cheap | 12+ 시간 |
Intelligent-Tiering 은 접근 패턴 예측 불가 시 최적. 30일 미접근 시 IA 로 자동 이동.
Lifecycle Policy
Rules:
- Id: archive-old-logs
Filter: { Prefix: logs/ }
Transitions:
- Days: 30
StorageClass: STANDARD_IA
- Days: 90
StorageClass: GLACIER
Expiration:
Days: 365
AbortIncompleteMultipartUploads:
DaysAfterInitiation: 7
비용 대폭 절감. 사용 안 하는 데이터를 자동 cheaper class 로.
AbortIncompleteMultipartUploads 는 반드시 설정. 미완료 multipart 가 비용 누수.
Replication (CRR / SRR)
flowchart LR
SrcBucket["Source Bucket<br/>(us-east-1)"] -->|CRR| DstBucket["Dest Bucket<br/>(ap-northeast-2)"]
SrcBucket2["Source Bucket A"] -->|SRR| DstBucket2["Dest Bucket B<br/>(같은 region)"]
| 종류 | 의미 |
|---|---|
| CRR (Cross-Region Replication) | 다른 리전으로 복제 (DR, 지연 감소) |
| SRR (Same-Region Replication) | 같은 리전 내 복제 (로그 집계, 테스트) |
- Source bucket: Versioning 활성화 필수.
- 신규 객체만 복제 (기존 객체는 S3 Batch Operations 으로 별도 복제).
- Delete Marker: 기본 복제 안 됨 (설정 가능).
- 복제 시간 SLA: 기본 15분 이내. S3 Replication Time Control (RTC) = 99.99% 를 15분 이내 보장 (추가 비용).
Versioning
aws s3api put-bucket-versioning --bucket my --versioning-configuration Status=Enabled
- 덮어쓰기 / 삭제 = 옛 버전 보존.
- 실수 복구 가능.
- 삭제 = Delete Marker 생성 (실제 삭제 아님).
- 비용: 모든 버전 저장. Lifecycle 로 오래된 버전 정리 필수.
Object Lock (WORM)
Mode: GOVERNANCE | COMPLIANCE
RetainUntilDate: "2027-06-25T00:00:00Z"
- Write Once Read Many: 보존 기간 중 삭제/수정 불가.
GOVERNANCE: 특정 IAM 권한으로 삭제 가능.COMPLIANCE: root user 도 삭제 불가. 금융/의료 컴플라이언스.- Legal Hold: 날짜 무관 삭제 차단.
Multipart Upload
sequenceDiagram
Client->>S3: InitiateMultipartUpload (uploadId)
par parallel parts
Client->>S3: UploadPart 1
Client->>S3: UploadPart 2
Client->>S3: UploadPart N
end
Client->>S3: CompleteMultipartUpload (part etags)
S3-->>Client: 완료
- 큰 파일 (100MB+) 권장, 5GB 초과 시 필수.
- 병렬 업로드 + 개별 파트 재시도 가능.
- 최소 파트 크기: 5MB (마지막 파트 제외).
- 미완료 Multipart: Lifecycle
AbortIncompleteMultipartUploads로 자동 정리.
Presigned URL
import boto3
s3 = boto3.client('s3')
url = s3.generate_presigned_url(
'put_object',
Params={'Bucket': 'my-bucket', 'Key': 'upload.zip'},
ExpiresIn=3600 # 1시간
)
- 클라이언트가 S3 에 직접 업로드/다운로드 (서버 경유 없음).
- 임시 URL (만료 시간 설정).
- 서버 측에서 IAM 권한 위임.
- GET (다운로드), PUT (업로드) 모두 지원.
Transfer Acceleration
# 엔드포인트: my-bucket.s3-accelerate.amazonaws.com
aws configure set default.s3.use_accelerate_endpoint true
- CloudFront edge location 을 경유해 S3 에 전송.
- 글로벌 업로드 속도 최대 60% 향상 (지역별 편차 큼).
- 비용: 일반 전송 대비 추가 요금.
- 실제 개선 여부: S3 Transfer Acceleration Speed Comparison Tool 로 사전 확인.
S3 Access Points
버킷 하나를 여러 팀이 다른 정책으로 접근할 때.
aws s3control create-access-point \
--name data-science-ap \
--account-id 123456789 \
--bucket my-data-lake \
--vpc-configuration VpcId=vpc-abc
- 각 Access Point 는 고유한 ARN + endpoint + Policy.
- VPC-only 접근 강제 가능.
- 버킷 Policy 가 복잡해지는 것을 Access Point Policy 로 분리.
Static Website Hosting
Bucket Property: Static Website Hosting
Index document: index.html
Error document: 404.html
CloudFront + OAC 조합:
- CloudFront: 글로벌 CDN, HTTPS, 커스텀 도메인.
- OAC (Origin Access Control): CloudFront 에서만 S3 접근 허용.
- S3 직접 접근 차단 (Block Public Access 유지).
Event Notifications
flowchart LR
Upload[Object 업로드] --> S3
S3 -->|event| Lambda
S3 -->|event| SQS
S3 -->|event| SNS
S3 -->|event| EventBridge
- 새 파일 → 처리 자동화.
- 이미지 thumbnail 생성, 비디오 transcoding, 데이터 처리.
- aws-eventbridge 연동 시 content-based filtering 가능 (object key prefix 등).
S3 Select / S3 Object Lambda
- S3 Select: CSV / JSON / Parquet 의 SQL 일부 query. 필요한 컬럼만 pull.
- S3 Object Lambda: GET 요청 시 Lambda 가 transform (redact, watermark, format conversion).
보안
flowchart TD
Q[보안 layer]
Q --> Block["Block Public Access<br/>(계정/bucket)"]
Q --> Bucket[Bucket Policy]
Q --> IAM[IAM Policy]
Q --> ACL["ACL (legacy)"]
Q --> Enc["Server-Side Encryption<br/>(SSE)"]
Q --> KMS[KMS 키]
Q --> Object[Object Lock]
Encryption
| 종류 | 의미 |
|---|---|
SSE-S3 | S3 관리 key (AES-256) |
SSE-KMS | aws-kms 관리 key, 감사 가능 |
SSE-C | 사용자 제공 key |
DSSE-KMS | 이중 암호화 |
2023년부터 기본 암호화 SSE-S3 자동 적용. 컴플라이언스 요구 시 SSE-KMS 전환.
Object Ownership + ACL
신규 버킷은 ACL 비활성화 + Object Ownership = BucketOwnerEnforced 권장. Cross-account 업로드 객체도 버킷 소유자가 자동 소유.
Inventory / Storage Lens / Analytics
| 도구 | 용도 |
|---|---|
| S3 Inventory | 객체 목록을 CSV/Parquet 으로 주기 출력 (대규모 버킷 감사) |
| S3 Storage Lens | 조직 전체 스토리지 사용량 대시보드 (비용 최적화 insight) |
| S3 Analytics | 접근 패턴 분석 → Standard-IA 전환 권고 |
# Storage Lens 기본 대시보드 (무료)
aws s3control get-storage-lens-dashboard \
--config-id default-account-dashboard \
--account-id 123456789
흔한 함정
WARNING
- Bucket 공개 사고 = “Block Public Access” 항상 켜기. CloudFront + OAC 권장.
- Versioning 후 비용 = 옛 버전 누적. Lifecycle
NoncurrentVersionExpiration으로 정리. - Glacier 의 retrieval fee = Glacier 에서 빨리 꺼내면 비용 큼. 접근 빈도 고려.
- Multipart upload 정리 안 함 = 미완료 multipart 가 비용 발생. Lifecycle
AbortIncompleteMultipartUploads. - CRR 에서 기존 객체 미복제 = Replication 설정 이전 객체는 S3 Batch Operations 로 별도 복제.
- S3 Event + Lambda 무한 루프 = Lambda 가 같은 버킷에 쓰면 이벤트 재발생. prefix/suffix 필터 필수.
- Presigned URL 의 만료 후 클라이언트 캐싱 = 클라이언트가 URL 를 저장해 재사용 시 403. 짧은 만료 + 재발급 로직.
관련 위키
- aws-cloudfront-cdn
- aws-kms
- aws-lambda (S3 trigger)
- aws-eventbridge
- aws-iam (Bucket Policy)
이 글의 용어 (5개)
- [AWS] CloudFront: CDN, origin, behavior, signed URLcloud
- 정의 CloudFront = AWS 의 글로벌 CDN. 전세계 600 PoP (Points of Presence) 에서 사용자에게 가까운 edge 로 콘텐츠 제공. 지연 감소 +…
- [AWS] EventBridge: 이벤트 버스, 스케줄러, partner sourcescloud
- 정의 EventBridge = AWS 의 통합 event bus. 옛 CloudWatch Events 의 후계. AWS service 이벤트 + custom 이벤트 + SaaS …
- [AWS] IAM: User, Role, Policy, STScloud
- 정의 IAM (Identity and Access Management) = AWS 의 권한 관리 전부. User, Group, Role, Policy 로 구성. "누가 어떤 리소…
- [AWS] KMS: 암호화 키 관리, envelope encryptioncloud
- 정의 KMS (Key Management Service) = 암호화 키 중앙 관리. envelope encryption + IAM 통합 + 감사 로그. 키 종류 | 종류 | 의미…
- [AWS] Lambda: 서버리스 함수, 트리거, 동시성cloud
- 정의 AWS Lambda = 서버리스 함수 실행. 이벤트 트리거 → 함수 실행 → 결과 / 비동기 처리. 서버 관리 0. 사용 상황 | 상황 | Lambda 적합성 | |---|…
이 개념을 다룬 위키 페이지 (25)
- wiki[AWS] Artifact (AWS Compliance Reports & Agreements)
- wiki[AWS] Audit Manager (Automated Compliance Auditing)
- wiki[AWS] CDK (Cloud Development Kit)
- wiki[AWS] CloudFormation
- wiki[AWS] CloudFront: CDN, origin, behavior, signed URL
- wiki[AWS] CloudTrail (API Activity Logging)
- wiki[AWS] Config (Resource Configuration Tracking)
- wiki[AWS] Direct Connect
- wiki[AWS] Amazon DocumentDB
- wiki[AWS] EBS vs Instance Store: 영속 vs 임시 스토리지
- wiki[AWS] Amazon Kendra
- wiki[AWS] KMS: 암호화 키 관리, envelope encryption
- wiki[AWS] Amazon Macie
- wiki[AWS] PrivateLink (VPC Interface Endpoints)
- wiki[AWS] Amazon RDS (Relational Database Service)
- wiki[AWS] Amazon Redshift
- wiki[AWS] Route 53
- wiki[AWS] S3 File Access (Mountpoint, File Gateway, Express One Zone)
- wiki[AWS] S3 Vectors
- wiki[AWS] Amazon SageMaker
- wiki[IaC] AWS CDK: TypeScript 로 CloudFormation 생성
- wiki[IaC] Terraform State: backend, locking, drift, import
- wiki[DB] DynamoDB: PK + SK, single-table design, GSI / LSI
- wiki[Django] File Uploads + Storage: FileField, ImageField, S3
- wiki[Search] ES 인프라: cluster, shard, replica, ELK
💬 댓글