CertNote/ 출퇴근 학습 노트
로드맵
KOEN
CLF-C02 · FoundationalCloud Practitioner - Foundational
DVA-C02 · AssociateDeveloper - Associate
  • Week 1
    • 1.개발자 시점에서 본 AWS: 리전, 인프라, 그리고 책임의 경계
    • 2.IAM의 4대 엔터티: User, Group, Role, Policy
    • 3.STS와 정책 조건: 임시 자격증명의 깊은 세계
    • 4.AWS CLI와 SDK: 자격증명 체이닝부터 SigV4까지
    • 5.Week 1 종합: 인프라와 IAM이 만드는 신뢰의 사슬
  • Week 2
  • Week 3
  • Week 4
  • Week 5
    • 1.S3: 객체 스토리지의 철학과 스토리지 클래스 설계
    • 2.S3: 버전 관리, 수명 주기 정책, 그리고 복제의 내부 동작
    • 3.S3 보안: 버킷 정책, 암호화, 그리고 접근 제어의 계층 구조
    • 4.S3 성능 최적화: 멀티파트 업로드, 전송 가속화, 접두사 설계
    • 5.S3 고급 기능 + Week 5 종합 복습
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
  • Week 12
  • Week 13
SAA-C03 · AssociateSolutions Architect - Associate
SOA-C02 · AssociateCloudOps Engineer - Associate
SAP-C02 · ProfessionalSolutions Architect - Professional
DOP-C02 · ProfessionalDevOps Engineer - Professional
SCS-C03 · SpecialtySecurity - Specialty
MLA-C01 · AssociateMachine Learning Engineer - Associate
AIF-C01 · FoundationalAI Practitioner - Foundational
DEA-C01 · AssociateData Engineer - Associate
MLS-C01 · SpecialtyMachine Learning - Specialty
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← DVA-C02/Week 5/Day 5

기준: DVA-C02 시험 가이드·오류 제보

DVA-C02· AssociateWeek 5 · Day 5읽기 약 23분
핵심 정리

S3 기본 스펙 (반드시 암기)

최대 객체 크기:     5TB
단일 PUT 최대:      5GB (초과 시 멀티파트 필수)
멀티파트 최소:      100MB 권장, 5GB 이상 필수
파트 최소 크기:     5MB (마지막 파트 제외)
파트 최대 개수:     10,000개
접두사당 처리량:    PUT 3,500/s, GET 5,500/s
내구성:             11 nines (모든 클래스 동일)
Standard 가용성:    99.99%
One Zone-IA 가용성: 99.5%

스토리지 클래스 핵심 비교

클래스최소 보관즉시 검색AZ핵심 사용 사례
Standard없음✅3+자주 접근
Intelligent-Tiering없음✅*3+불규칙 접근
Standard-IA30일✅3+월 1회 미만
One Zone-IA30일✅1재생성 가능
Glacier Instant90일✅3+분기 1회
Glacier Flexible90일❌(1분~12시간)3+연 1~2회
Glacier Deep Archive180일❌(12~48시간)3+장기 규제

*Intelligent-Tiering에서 Archive Access 티어 활성화 시 복구 지연 발생.

버전 관리 핵심 포인트

상태: Unversioned → Enabled → Suspended (비활성화 불가)
삭제 = 삭제 마커 추가 (진짜 삭제 아님)
진짜 삭제 = DELETE + 버전 ID 명시
MFA Delete: 루트 계정만 설정/해제 가능
비용 함정: 이전 버전도 전부 저장 비용 발생
해결: NoncurrentVersionExpiration 수명 주기 규칙

암호화 방식 요약

SSE-S3:    AWS 완전 관리, 기본값, 무료, 감사 로그 없음
SSE-KMS:   KMS 키 정책, CloudTrail 감사, KMS API 한도 주의
           → S3 Bucket Key로 최대 99% KMS 비용 절감
DSSE-KMS:  이중 암호화, FIPS 140-3 Level 3, 정부/국방
SSE-C:     고객이 키 제공, HTTPS 필수, AWS에 키 미저장
CSE:       클라이언트가 직접 암호화, 최고 보안

복제 핵심

CRR: 다른 리전 → 재해 복구, 지연 시간 최적화
SRR: 같은 리전 → 개발/스테이징 분리, 로그 집계
요건: 양쪽 모두 버전 관리 활성화 필수
기존 객체: Batch Replication 별도 사용
삭제 마커: 기본 미복제 (선택 활성화)
RTC: 99.99%를 15분 내 복제 보장 (유료 SLA)

보안 계층 우선순위

① 계정/버킷 수준 Block Public Access (최우선)
② 명시적 Deny (버킷 정책, SCP)
③ 리소스 기반 Allow (버킷 정책) + IAM Allow
④ ACL (Bucket Owner Enforced 설정 시 무시)

이벤트 알림 vs EventBridge

직접 연결 (Lambda/SQS/SNS): 단순, 빠름, 대상 3종
EventBridge 경유: 유연, 18개+ 대상, 아카이빙, 재생, 세밀한 필터
현재 권장: EventBridge 경유

Day 5 - S3 고급 기능 + Week 5 종합 복습

Week 5의 마지막 날이다. S3 이벤트 알림, Presigned URL, 정적 웹사이트 호스팅이라는 세 가지 고급 기능을 마저 살펴보고, 그 다음 지난 4일간 배운 S3 전체를 시험 관점에서 정리한다. S3는 DVA-C02에서 가장 많은 문제가 나오는 서비스 중 하나다. 단순 암기가 아니라 "왜 그렇게 동작하는가"를 이해하면 변형 문제에서도 흔들리지 않는다.

S3 이벤트 알림 — 파일이 도착할 때 무슨 일이 일어나는가

S3 이벤트 알림은 "버킷에서 특정 일이 발생했을 때 누군가에게 알려라"는 패턴이다. 이 패턴은 서버리스 아키텍처의 핵심이다 — S3에 파일이 올라오면 Lambda가 자동으로 실행되고, 이미지 리사이징, 문서 변환, 데이터 검증이 일어난다.

지원하는 이벤트 유형:

  • s3:ObjectCreated:* — PUT, POST, COPY, 멀티파트 완료 모두 포함
  • s3:ObjectCreated:Put — PUT만
  • s3:ObjectRemoved:* — 삭제 및 삭제 마커 생성
  • s3:ObjectRestore:* — Glacier 복원 시작/완료
  • s3:Replication:* — 복제 실패, 미완료 등

직접 연결 대상 3종: Lambda 함수, SQS 큐, SNS 주제.

Amazon EventBridge를 경유하는 방법이 2021년 추가됐고, 이 방식이 현재 권장된다. 이벤트 아카이빙과 재생(replay)이 가능하고, 대상이 18개 이상(Step Functions, Kinesis, API Gateway, CodePipeline 등)이며, 세밀한 이벤트 패턴 필터링(접두사, 접미사, 크기 조건 등)을 지원하기 때문이다.

직접 연결(Lambda/SQS/SNS)은 대상이 이미 명확하고 간단한 경우, EventBridge는 유연성이 필요한 경우를 선택 기준으로 삼으면 된다.

S3 이벤트 알림은 이벤트 기반 아키텍처(EDA, Event-Driven Architecture)의 전형적인 구현이다. 2003년 Amazon의 내부 SOA(Service-Oriented Architecture) 전환 이후, AWS 서비스들은 이벤트로 소통하는 것을 기본 설계 원칙으로 삼는다. S3 이벤트는 최소 한 번 전달(at-least-once)을 보장하지만 중복 전달이 가능하다 — Lambda나 SQS 컨슈머에서 멱등성(Idempotency)을 보장해야 하는 이유다.

⚠️ 함정: S3 이벤트 알림은 "최소 한 번(at-least-once)" 전달이지 "정확히 한 번(exactly-once)"이 아니다. 같은 PUT에 대해 Lambda가 두 번 호출될 수 있다. Lambda 내에서 멱등 처리(이미 처리된 파일인지 확인하는 DynamoDB 항목 등)를 구현해야 한다.

Presigned URL — IAM 권한을 URL에 담는 방법

Presigned URL은 생성자의 IAM 자격증명을 사용해 서명된 임시 URL이다. URL을 받은 사람은 해당 URL이 유효한 동안 생성자의 권한으로 S3 작업을 수행할 수 있다.

import boto3
from datetime import datetime, timedelta
 
s3 = boto3.client('s3')
 
# 1. 비공개 파일 임시 공유 (GET)
download_url = s3.generate_presigned_url(
    'get_object',
    Params={
        'Bucket': 'my-private-bucket',
        'Key': 'confidential/report-2026.pdf'
    },
    ExpiresIn=3600  # 1시간 유효
)
 
# 2. 클라이언트가 서버를 통하지 않고 직접 S3에 업로드 (PUT)
upload_url = s3.generate_presigned_url(
    'put_object',
    Params={
        'Bucket': 'my-upload-bucket',
        'Key': f'user-uploads/{user_id}/avatar.jpg',
        'ContentType': 'image/jpeg'
    },
    ExpiresIn=300  # 5분 유효
)
 
# 3. POST 형식 Presigned URL (HTML form 업로드)
response = s3.generate_presigned_post(
    Bucket='my-bucket',
    Key='uploads/${filename}',  # 변수 사용 가능
    Fields={'Content-Type': 'image/jpeg'},
    Conditions=[
        ['content-length-range', 1, 10 * 1024 * 1024]  # 최대 10MB
    ],
    ExpiresIn=600
)

Presigned URL의 핵심 특성들:

만료 시간: IAM 사용자 장기 자격증명(SigV4)이면 최대 7일이다. 콘솔에서 만들면 1분~12시간 사이로 정한다. 임시 자격증명(IAM 역할, STS)으로 만들면 그 자격증명이 만료될 때 URL도 함께 만료된다. 더 긴 만료 시간을 지정해도 마찬가지다. AssumeRole 세션은 기본 1시간, EC2 인스턴스 프로파일 자격증명은 보통 최대 6시간 정도라, Lambda나 EC2에서 만든 URL이 지정한 시간보다 일찍 끊기는 원인이 된다.

생성자 권한: URL을 생성한 시점에 생성자가 해당 작업 권한을 가지고 있어야 한다. 생성 시점에 권한이 있었더라도, 이후 IAM 정책 변경으로 권한이 제거되면 URL도 작동을 멈춘다.

PUT Presigned URL 패턴: 서버가 URL을 생성해서 클라이언트에게 전달하고, 클라이언트가 직접 S3에 파일을 업로드한다. 서버는 파일 데이터를 처리하지 않아 대역폭 부하가 없다. 파일 업로드가 완료되면 클라이언트가 서버에 완료 알림을 보내고, 서버는 S3 이벤트나 DynamoDB 메타데이터를 확인한다.

Presigned URL의 서명은 AWS SigV4(Signature Version 4) 알고리즘으로 생성된다. SigV4는 HMAC-SHA256을 사용하며 요청의 HTTP 메서드, 버킷/키, 만료 시간, 허용된 헤더 등이 서명에 포함된다. URL을 변조하면 서명 검증에서 실패한다. SDK의 generate_presigned_url이 이 복잡한 과정을 추상화해준다.

정적 웹사이트 호스팅 — HTTP만 지원하는 근본 이유

S3 정적 웹사이트는 비용 효율적이지만 중요한 제약이 있다: HTTP만 지원한다. S3 자체에 TLS 인증서를 설치할 수 없다. HTTPS를 제공하려면 CloudFront + ACM(AWS Certificate Manager) 조합이 필수다.

왜 HTTP만인가? S3는 웹 서버가 아니라 오브젝트 스토리지다. TLS handshake, 인증서 관리, SNI(Server Name Indication) 같은 HTTPS의 복잡한 요소들은 CloudFront나 ALB 같은 Layer 7 서비스의 역할이다. AWS는 이를 서비스별 역할 분리 원칙으로 유지한다.

정적 웹사이트 URL 형식(두 가지 모두 시험에 나옴):

http://bucket-name.s3-website-region.amazonaws.com
http://bucket-name.s3-website.region.amazonaws.com

정적 웹사이트 + HTTPS 아키텍처:

[사용자 브라우저]
      ↕ HTTPS (ACM 인증서)
[CloudFront 배포]
      ↕ HTTP (S3 웹사이트 엔드포인트)
      또는
      ↕ S3 오리진 + OAC (권장)
[S3 버킷]

CloudFront + OAC 방식(권장)에서는 버킷을 퍼블릭으로 열지 않아도 된다. CloudFront만 버킷에 접근하고 사용자에게 HTTPS로 서빙한다.

⚠️ 함정: S3 정적 웹사이트 호스팅과 일반 S3 버킷의 퍼블릭 URL은 다르다. 웹사이트 호스팅을 활성화한 버킷의 웹사이트 엔드포인트(s3-website)는 HTML 파일을 브라우저로 렌더링한다. 일반 S3 URL(s3.amazonaws.com)은 파일을 다운로드(Content-Disposition: attachment)로 처리할 수 있다. 정적 웹사이트 기능을 켜야 index.html을 기본 문서로 서빙하고 에러 페이지를 설정할 수 있다.

Week 5 시험 함정 20가지

  1. 버킷 이름 글로벌 유일 — 같은 리전 내가 아니라 전 세계 유일
  2. 점 포함 버킷 이름 — 기술적 유효하지만 HTTPS 인증서 와일드카드 깨짐
  3. S3는 2020년부터 Strong Consistency — "eventual"이라고 하면 틀림
  4. One Zone-IA는 AZ 장애 시 데이터 손실 가능 — 재생성 가능 데이터만
  5. 최소 보관 기간은 조기 삭제해도 과금 — IA 30일, Glacier 90일, Deep Archive 180일
  6. Glacier Flexible·Deep Archive는 객체당 40KB 메타데이터 추가 과금 — IA·Glacier Instant는 최소 과금 크기 128KB
  7. 버전 관리 비활성화 불가 — Suspended로만 가능
  8. 삭제 = 삭제 마커 — 영구 삭제는 버전 ID 명시 필요
  9. MFA Delete = 루트 계정만 — 관리자 IAM 사용자도 불가
  10. 복제 = 양쪽 버전 관리 필수 — 기존 객체는 Batch Replication
  11. 2023+ 모든 신규 객체 SSE-S3 기본 암호화 — "암호화 여부?" → "항상 예"
  12. SSE-KMS KMS API 한도 → Bucket Key로 99% 절감
  13. 신규 버킷 Block Public Access 4개 기본 ON + Bucket Owner Enforced
  14. OAI 레거시, OAC 현재 권장 — SSE-KMS 객체 CloudFront 서빙 = OAC 필수
  15. 단일 PUT 최대 5GB — 초과 시 멀티파트 필수
  16. 멀티파트 미완료 파트 저장 비용 → AbortIncompleteMultipartUpload 수명 주기 규칙
  17. 정적 웹사이트 HTTP만 → HTTPS는 CloudFront + ACM 필수
  18. Presigned URL IAM 역할 기반은 최대 12시간 — STS 토큰 TTL 제한
  19. EventBridge가 이벤트 알림에서 가장 유연 — 18개+ 대상, 아카이빙, 재생
  20. S3 Select는 단일 파일, 간단한 SQL만 — 복잡한 쿼리는 Athena

Week 5 약어 정리

약어풀네임핵심 포인트
S3Simple Storage Service객체 스토리지
IAInfrequent Access30일 최소
CRR/SRRCross/Same Region Replication양쪽 버전 관리 필수
RTCReplication Time Control15분 SLA
MRAPMulti-Region Access Point글로벌 단일 엔드포인트
OAC/OAIOrigin Access Control/IdentityOAC가 현재 권장
BPABlock Public Access최우선 보안 레이어
SSEServer-Side Encryption서버 측 암호화
CSEClient-Side Encryption클라이언트 측 암호화
DSSEDual-layer SSE이중 암호화
WORMWrite Once Read ManyObject Lock
MPUMultipart Upload100MB+ 권장
ETagEntity Tag객체 무결성 해시
CORSCross-Origin Resource Sharing브라우저 직접 S3 접근 시 필요
ACMAWS Certificate ManagerHTTPS 인증서 관리

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

회사의 의료 영상 데이터를 규정상 10년 보존해야 한다. 처음 1년은 자주 접근하고, 이후 접근이 거의 없다가 감사 시 즉시 조회가 필요하다. 가장 비용 효율적인 수명 주기 설계는?

문제 2

모바일 앱 사용자가 프로필 사진을 업로드해야 한다. 서버가 대용량 파일 데이터를 처리하는 부하를 피하고 싶다. 가장 적합한 아키텍처는?

문제 3

AWS Organizations에서 모든 S3 버킷에서 Block Public Access를 강제로 유지하고 싶다. 어떤 서비스를 사용하는가?

문제 4

S3 이벤트 알림을 통해 객체 업로드 시 Lambda를 호출하는 아키텍처에서, 같은 파일이 짧은 시간 내에 두 번 Lambda를 트리거했다. 이 현상의 원인과 해결책은?

문제 5

글로벌 서비스를 제공하는 회사가 S3에서 정적 웹 애플리케이션을 호스팅한다. HTTPS 필수, 글로벌 최적화, SEO를 위한 커스텀 도메인이 요구사항이다. 어떤 아키텍처가 맞는가?

문제 6

S3 버킷에서 수명 주기 정책이 "30일 후 Standard-IA로, 90일 후 Glacier Flexible로 전환"으로 설정되어 있다. 50일째 되는 날 객체를 삭제했다. 청구되는 요금은?

문제 7

개발팀이 S3에 저장된 Lambda 배포 패키지를 다른 AWS 계정의 Lambda가 접근해야 한다. S3 버킷을 퍼블릭으로 열지 않고 가장 안전하게 접근 권한을 부여하는 방법은?

문제 8

2024년 기준 모든 S3 신규 버킷의 기본 설정으로 올바른 것은?

문제 9

S3 버킷에 수십억 개의 객체가 있고, 전체 객체 중 SSE-KMS 암호화가 적용되지 않은 객체를 찾아서 일괄 암호화 적용해야 한다. 어떤 방법이 적합한가?

문제 10

다음 시나리오에서 올바른 해결책을 선택하라. "회사는 파트너사가 특정 S3 버킷에 파일을 업로드해야 한다. 파트너는 AWS 계정이 없다."

문제 11

S3 버킷 A(us-east-1)에서 버킷 B(ap-northeast-2)로 CRR을 설정했다. 버킷 A에서 객체를 삭제 마커 없이 직접 영구 삭제(버전 ID 명시)했다. 버킷 B에서는?

문제 12

정답 2개 선택

다음 중 S3 Access Point에 대한 올바른 설명으로 모두 맞는 것은?

이전S3 성능 최적화: 멀티파트 업로드, 전송 가속화, 접두사 설계Week 5 · Day 4다음 DynamoDB: NoSQL의 철학과 파티션 설계의 수학Week 6 · Day 1

참고 공식 자료

  • DVA-C02 공식 시험 안내(새 탭에서 열림)
  • Amazon S3 공식 문서(새 탭에서 열림)
  • AWS Lambda 공식 문서(새 탭에서 열림)
  • AWS IAM 공식 문서(새 탭에서 열림)
  • Amazon CloudFront 공식 문서(새 탭에서 열림)
  • Amazon EventBridge 공식 문서(새 탭에서 열림)

이 페이지

  • S3 이벤트 알림 — 파일이 도착할 때 무슨 일이 일어나는가
  • Presigned URL — IAM 권한을 URL에 담는 방법
  • 정적 웹사이트 호스팅 — HTTP만 지원하는 근본 이유
  • Week 5 시험 함정 20가지
  • Week 5 약어 정리
  • Week 5 종합 연습 문제