
이번에는 S3에 대해 알아보자!
Amazon S3(Simple Storage Service)
🚀 무한대로 확장 가능한 스토리지
- 다양한 AWS 서비스와 연동 가능
- 정적인 파일 저장에 최적화된 서비스
언제 사용하는가?
✅ DB 또는 캐시 백업
✅ 장애 복구
✅ 로그, 이미지 등 리소스 저장
✅ 정적 웹사이트 호스팅
✅ 미디어 처리
✅ 데이터 분석용 파일 저장 및 가져오기
✅ 정적 파일이 필요한 대부분의 서비스에서 사용됨
Bucket 🪣
- S3의 가장 큰 단위, 디렉토리 개념으로 오브젝트 관리 (e.g. C드라이브, D드라이브와 유사)
- 모든 리전과 계정에서 유일한 이름을 가져야 함
- 리전 단위로 생성됨
네이밍 컨벤션
❌ 대문자 & _
사용 불가
❌ 3~63자 이내만 가능
❌ IP 주소 불가
❌ 숫자 또는 영어 소문자로 시작해야 함
❌ xn-
으로 시작 불가
❌ -s3alias
로 끝날 수 없음
👉 퍼블릭 액세스 차단이 기본 (보안 문제 방지) 🔐
👉 버킷 내 폴더는 실제 디렉토리가 아닌 prefix 개념임
Object 📁
- 각 오브젝트(파일)는 Key(경로) 를 가짐
s3://my-bucket/my_test.jpg
s3://my-bucket/my_test_images/image.png
my_test_images/image.png
전체가 KeyName
- UI에서는 폴더처럼 보이지만, 실제로는 경로명 (prefix)일 뿐
오브젝트 특징
- 최대 크기 5TB (5GB 이상은 Multi-Part Upload 필요)
- 메타데이터: 키-값 형태 저장
- 태그: 보안, 라이프사이클 관리 용도
- 버전 ID: 버저닝 설정 시 적용
버저닝 🔄
- 오브젝트의 버전 관리 가능
- 버킷 단위로 활성화/비활성화 가능
- 삭제 방지 및 롤백 용이
- 활성화 시 기존 오브젝트의 버전은
null
로 설정됨
복제 ✨
- 버저닝이 활성화된 경우에만 사용 가능
- 유형
- CRR (Cross Region Replication) 🌍: 컴플라이언스, 지연율 감소 목적
- SRR (Same Region Replication) 🏠: 로그 통합, 테스트 환경 동기화 목적
복제 특징
- 비동기 복사 방식
- 다른 AWS 계정으로도 복사 가능
- 신규 오브젝트만 복제됨 (기존 오브젝트는 S3 Batch Replication 사용 필요)
- 삭제 복제 불가 (삭제 마커만 전달됨)
- A → B → C 식의 연쇄 복제는 불가능 ❌
- A → B로 복제된 파일은 C로 자동 복제되지 않음 (중간 단계 없음)
스토리지 클래스 🏗️
스토리지 클래스 | 특징 |
---|
Standard | 기본값, 높은 내구성 & 가용성 |
Standard-IA | 비교적 적은 접근이 예상될 때 적합 |
One Zone-IA | 단일 AZ에서 운영, 비용 절감 가능 |
Glacier | 장기 보관용 (저렴함) |
Glacier Instant Retrieval | 즉시 검색 가능 |
Glacier Flexible Retrieval | Expedited(1~5분), Standard(3~5시간), Bulk(5~12시간) |
Glacier Deep Archive | 최소 180일 이상 장기 보관용 |
Intelligent-Tiering | 자동 티어 조정 (자주 사용 여부에 따라 이동) |
✅ 라이프사이클 정책을 통해 자동 전환 가능
내구성과 가용성
- 내구성
- 멀티AZ간 오브젝트 내구성은 매우 높음
- 천만개의 오브젝트를 저장한다고 가정할때 1만년에 1개 오브젝트가 손실되는수준
- 모든 스토리지 클래스에 동일적용
- 가용성
- 서비스가 얼마나 쉽게 가용 가능한지 측정
- 클래스마다 약간 씩 차이있음
- standard의 경우 99.99%가용성 가지고있음
이벤트처리

- S3:ObjectCreated, S3:ObjectRemoved, S3:objectRestore, S3:Replication 등의 액션에 사용가능
- 오브젝트 명 필터를 적용할 수 있음
- 이미지의 썸네일을 사용하는 등 후처리작업(이미지리사이징, 썸네일 생성, 워터마크생성)이 필요한 경우 사용하기에 적합
- 이벤트 숫자에는 제한이 없다
- 람다, SQS, SNS등의 서비스를 통해 이벤트를 핸들링
- 대부분 1초 이내 이벤트가 전달되지만, 가끔은 1분 이상이 걸림
이벤트 브릿지 🔀
Multi-Part Upload 🚀
- 100MB 이상 파일 업로드 추천
- 5GB 이상 필수 (단일 업로드 불가)
- 병렬 업로드 가능 → 속도 향상
S3 Transfer Acceleration 🌍
- AWS 엣지 로케이션을 통해 데이터 전송 속도 가속화
- 멀티 파트 업로드와 호환 가능
S3 Byte-Range Fetches 📡
- 특정 바이트 범위만 요청 가능 (병렬 다운로드 가능)
- 대용량 파일에서 필요한 부분만 가져올 때 유용
S3 Select & Glacier Select 🎯

- 서버 측에서 SQL 기반 필터링 후 데이터 전송
- 네트워크 전송량을 줄이고, 클라잉언트의 cpu비용을 줄 일 수 있음
-> 내가 원하는 데이터만 가져옴
S3 Select: S3 내부 파일에서 SQL을 이용해 필요한 데이터만 가져오기
Glacier Select: Glacier에 저장된 데이터에서 SQL을 이용해 필요한 데이터만 추출
=> ✅ 네트워크 비용 절감 & 데이터 처리 속도 향상에 유용
S3-pre signed URL
- 특정 시간이 지나면 만료되는 url 을 생성 할 수 있음
- pre-signed url은 s3콘솔, cli, sdk에서 사용가능
- s3 콘솔에서 만든 url은 1분에서 720분까지 유효
- cli를 통해 생성한 경우 168시간까지 셋팅가능
- 생성할때 만들어진 GET/PUT에 대한 권한을 최종 사용자도 동일하게 가져옴
- 언제 사용하나?
- 로그인 한 사용자만 다운로드 할수있을때
- 일시적으로 사용자가 업로드또는 다운로드를 해야하는 기능
S3 Batch Operation 🛠️
- 대량의 S3 오브젝트 작업을 자동화하는 기능
- 활용 사례
- 오브젝트 태그 변경
- 데이터 암호화 변경
- 메타데이터 업데이트
- 대량의 오브젝트 복사 및 삭제
분석 도구 활용법 🔍
- AWS CloudTrail: S3 액세스 로깅 및 추적
- AWS Cost Explorer: S3 비용 분석
- AWS S3 Storage Lens: 스토리지 사용량과 액세스 패턴 분석
- Amazon Macie: S3 데이터 보안 및 민감 정보 탐지
이 도구들을 통해 워크로드를 분석하고 최적화할 수 있음
S3 오브젝트 암호화 🔒
- 서버 사이드 암호화 (SSE)와 클라이언트 사이드 암호화 (CSE)로 나뉨
SSE - 서버 사이드 암호화
1️⃣ SSE-S3: AWS가 관리하는 기본 암호화 🔑
2️⃣ SSE-KMS: KMS 키를 이용한 암호화 🏦
3️⃣ SSE-C: 사용자가 직접 제공한 키로 암호화 🔏 (HTTPS 필수)
CSE - 클라이언트 사이드 암호화
- 클라이언트가 직접 암호화 후 S3에 업로드
- Amazon S3 Client-Side Encryption Library 활용 가능
- 암호화 키와 프로세스는 사용자가 완전히 관리
암호화 정책 적용 🛡️
- Bucket Policy가 기본 암호화보다 먼저 실행됨 (요청을 받을지 거부할지 결정)
- 기본적으로 SSE-S3 자동 적용 (모든 신규 오브젝트)
- SSE-KMS 또는 SSE-C 사용 시 Bucket Policy를 통해 접근 제어 가능
🛠️ byte-range fetches, Multi-Part upload, S3 Transfer Acceleration 사례
필자 경우 이게 어떤작업을 할때 유용할까라는 생각이 들었다 특히, 이게 어떤 것인지 이론은 알겠으나 어떤 예시 상황에서 활용이 되는지 궁금했었다.
1️⃣ Byte-Range Fetches 📡
- 특정 바이트 범위만 요청 가능 → 대용량 파일에서 필요한 부분만 다운로드 가능
- 예시:
- 동영상 스트리밍: 사용자 요청에 따라 필요한 부분만 로드
- 빅데이터 분석: 로그 파일에서 특정 날짜의 데이터만 가져오기
- 파일 복구: 대용량 압축 파일에서 특정 파일만 추출
2️⃣ Multi-Part Upload 🚀
- 5GB 이상의 파일 업로드 필수 / 100MB 이상이면 권장
- 여러 조각으로 나누어 병렬 업로드 가능 → 속도 향상
- 예시:
- 비디오 파일 업로드: 10GB 이상의 영상 파일을 빠르게 업로드
- 백업 시스템: 대용량 DB 백업 파일을 효율적으로 전송
- 클라우드 마이그레이션: 대량의 데이터를 안전하게 이전
3️⃣ S3 Transfer Acceleration 🌍
- AWS 엣지 로케이션을 활용하여 데이터 전송 속도 향상
- 예시:
- 전 세계 사용자 대상 파일 업로드 가속화 (예: 글로벌 콘텐츠 플랫폼)
- 멀티 지역에서 대량 데이터 수집 (IoT 센서 데이터 업로드)
- 사용자가 AWS와 먼 위치에 있는 경우 (예: 한국에서 미국 리전에 S3 업로드)
3개를 다 써야 하는 예시 상황
💡 글로벌 영상 스트리밍 플랫폼 운영
📌 상황
한 글로벌 영상 스트리밍 플랫폼이 있으며, 사용자는 전 세계에 분포해 있음.
이 플랫폼에서는 초고화질(4K, 8K) 영상을 업로드, 저장, 스트리밍해야 함.
🚀 3가지 기능이 모두 필요한 이유
1️⃣ 사용자가 초고화질 영상을 업로드하는 경우 (Multi-Part Upload)
- 50GB 이상의 대용량 영상 파일을 업로드해야 함
- 네트워크 중간에 끊기더라도 다시 이어서 업로드할 수 있어야 함
- 업로드 속도를 최적화하고 빠르게 전송할 필요가 있음
✅ 해결책: Multi-Part Upload를 사용해 파일을 여러 조각으로 나누어 병렬 업로드
2️⃣ 전 세계 사용자가 영상을 업로드하는 경우 (S3 Transfer Acceleration)
- 사용자가 한국, 미국, 유럽, 동남아 등 다양한 지역에서 파일을 업로드
- 기본적으로 AWS 리전과 거리가 멀면 업로드 속도가 느려짐
- 글로벌 서비스이므로 업로드 지연이 발생하면 안 됨
✅ 해결책: S3 Transfer Acceleration을 사용하여 AWS 엣지 로케이션을 통해 전송 속도를 가속 🌍
3️⃣ 사용자가 특정 시간대의 영상을 스트리밍하는 경우 (Byte-Range Fetches)
- 사용자가 2시간짜리 영화에서 1시간 30분 위치부터 보기 시작
- 전체 파일을 다운로드할 필요 없이, 해당 바이트 범위의 데이터만 요청하면 됨
- 특정 부분만 로딩하는 기능이 필요
✅ 해결책: Byte-Range Fetches를 사용하여 특정 바이트 범위의 데이터만 스트리밍 📡