S3 Select & Glacier Select: 전체 다운로드 없이 필요한 데이터만 쿼리하기
S3 Select와 Glacier Select로 전체 객체를 다운로드하지 않고 SQL로 필요한 데이터만 추출하여 비용과 시간을 절감하는 방법을 알아봅니다.
관련 시험 도메인
- Domain 3: Design High-Performing Architectures
핵심 요약 (BLUF)
S3 Select는 S3 객체에서 SQL을 사용하여 필요한 데이터만 추출하는 기능으로, 전체 객체를 다운로드하지 않아 데이터 전송량과 비용을 최대 80%까지 줄일 수 있습니다. Glacier Select는 아카이브 데이터에 동일한 기능을 제공합니다.
시험 팁
시험 핵심: "전체 객체 다운로드 없이 필요한 데이터만 = S3 Select", "S3 데이터 분석 = Athena (복잡한 쿼리), S3 Select (단순 필터링)"
S3 Select란?
S3에 저장된 객체에서 SQL 표현식으로 필요한 행과 열만 추출하는 서버 사이드 필터링 기능입니다.
기존 방식 vs S3 Select
기존 방식 (전체 다운로드):
[S3: 10GB CSV] ──전체 다운로드──→ [애플리케이션]
│
▼
필요한 데이터 필터링
(1GB만 필요했음)
→ 10GB 전송 비용 + 처리 시간
S3 Select (서버 사이드 필터링):
[S3: 10GB CSV] ──SQL 쿼리──→ [S3 Select 처리]
│
▼
[1GB 결과만 전송]
→ 1GB 전송 비용 + 빠른 처리
→ 약 80% 비용 절감
지원 데이터 형식
| 형식 | S3 Select | Glacier Select | 압축 지원 |
|---|---|---|---|
| CSV | ✅ | ✅ | GZIP, BZIP2 |
| JSON | ✅ | ✅ | GZIP, BZIP2 |
| Parquet | ✅ | ❌ | 컬럼 압축 (Snappy 등) |
SQL 쿼리 예시
CSV 파일 쿼리
-- 전체 CSV에서 서울 지역 주문만 추출
SELECT s.OrderId, s.ProductName, s.Amount
FROM s3object s
WHERE s.Region = 'Seoul'
AND CAST(s.Amount AS DECIMAL) > 10000
JSON 파일 쿼리
-- JSON 배열에서 특정 조건 필터링
SELECT s.name, s.age
FROM s3object[*] s
WHERE s.age > 30
집계 함수
-- 합계, 평균, 개수
SELECT COUNT(*) AS total,
SUM(CAST(s.Amount AS DECIMAL)) AS total_amount,
AVG(CAST(s.Amount AS DECIMAL)) AS avg_amount
FROM s3object s
WHERE s.Category = 'Electronics'
Glacier Select
아카이브된 데이터를 복원하지 않고 직접 쿼리할 수 있습니다.
기존 방식:
[Glacier] ──전체 복원 (수 시간)──→ [S3] ──다운로드──→ [분석]
Glacier Select:
[Glacier] ──SQL 쿼리──→ [필요한 데이터만 S3에 출력]
→ 전체 복원 불필요
Glacier Select 검색 티어
| 티어 | 소요 시간 | 비용 |
|---|---|---|
| Expedited | 1~5분 | 높음 |
| Standard | 3~5시간 | 보통 |
| Bulk | 5~12시간 | 낮음 |
S3 Select vs Athena
| 항목 | S3 Select | Amazon Athena |
|---|---|---|
| 쿼리 범위 | 단일 객체 | 여러 객체/버킷 |
| SQL 기능 | 기본 SELECT, WHERE, 집계 | 전체 SQL (JOIN, 서브쿼리 등) |
| 데이터 형식 | CSV, JSON, Parquet | CSV, JSON, Parquet, ORC, Avro 등 |
| 스키마 | 불필요 | 테이블 정의 필요 (Glue Catalog) |
| 과금 | 스캔 + 반환 데이터량 | 스캔 데이터량 ($5/TB) |
| 사용 사례 | 단일 파일 필터링 | 데이터 레이크 분석 |
| 인프라 | 없음 | 서버리스 |
S3 데이터 쿼리 선택:
│
▼
단일 객체에서 간단한 필터링?
│
Yes → [S3 Select]
│
No
│
▼
여러 파일에 대한 복잡한 SQL?
│
Yes → [Athena]
│
No
│
▼
PB 규모 지속적 분석/BI?
│
Yes → [Redshift / Redshift Spectrum]
시험 팁
S3 Select vs Athena: S3 Select은 단일 객체의 간단한 필터링, Athena는 여러 객체에 대한 복잡한 SQL 분석. 시험에서 "단일 대용량 파일에서 일부 데이터만 추출"이면 S3 Select.
비용 구조
S3 Select 비용:
- 스캔한 데이터: $0.002/GB
- 반환한 데이터: $0.0007/GB
예시: 100GB CSV에서 10GB 반환
- 스캔: 100GB × $0.002 = $0.20
- 반환: 10GB × $0.0007 = $0.007
- 합계: $0.207
비교: 전체 다운로드 시
- GET 요청 + 100GB 전송
- 전송 비용만 $9.00 (인터넷 전송 기준)
→ S3 Select로 약 97% 절감
사용 사례
1. 로그 분석
[S3: access-log-2026-01.csv.gz (5GB)]
│
▼
SELECT * FROM s3object s
WHERE s.status_code = '500'
AND s.timestamp > '2026-01-15'
│
▼
[500 에러만 추출: 50MB]
→ 5GB 전체 다운로드 불필요
2. IoT 센서 데이터 필터링
[S3: sensor-data.json (2GB)]
│
▼
SELECT s.sensor_id, s.temperature
FROM s3object[*] s
WHERE s.temperature > 40.0
│
▼
[이상 온도만 추출: 10MB]
3. Lambda에서 S3 Select 활용
[S3 이벤트] → [Lambda]
│
├── S3 Select로 필요한 데이터만 조회
├── 메모리/처리 시간 절감
└── Lambda 비용 절감
제한사항
| 제한 | 내용 |
|---|---|
| 쿼리 범위 | 단일 객체만 (여러 객체 불가) |
| SQL 기능 | JOIN, 서브쿼리 미지원 |
| 최대 결과 | 256MB (단일 레코드 1MB) |
| 암호화 | SSE-S3, SSE-KMS 지원 (SSE-C 미지원) |
| 객체 크기 | 압축되지 않은 CSV/JSON 최대 객체 크기 제한 없음 |
SAA-C03 시험 출제 포인트
- ✅ 서버 사이드 필터링: "전체 다운로드 없이 필요한 데이터만 = S3 Select"
- ✅ vs Athena: "단일 객체 필터링 = S3 Select, 여러 객체 분석 = Athena"
- ✅ 비용 절감: "데이터 전송량 감소 → 비용 절감"
- ✅ 지원 형식: "CSV, JSON, Parquet"
- ✅ Glacier Select: "아카이브 데이터를 복원 없이 쿼리"
시험 팁
시험 문제 예시: "S3에 저장된 10GB CSV 로그 파일에서 특정 에러 코드가 포함된 행만 추출하려면? 비용을 최소화하세요." → 정답: S3 Select로 SQL 쿼리 (전체 다운로드 대비 비용/시간 절감)
자주 묻는 질문 (FAQ)
Q: S3 Select는 어떤 SDK에서 사용할 수 있나요?
AWS CLI, Python(Boto3), Java, JavaScript 등 주요 AWS SDK에서 SelectObjectContent API를 통해 사용할 수 있습니다.
Q: 압축된 파일에도 S3 Select를 사용할 수 있나요?
네. CSV와 JSON 파일은 GZIP, BZIP2 압축을 지원합니다. Parquet는 컬럼 수준 압축(Snappy, GZIP 등)을 지원합니다.
Q: S3 Select와 Byte Range Fetch의 차이는?
Byte Range Fetch는 바이트 범위로 객체의 일부를 가져오고, S3 Select는 SQL로 내용을 필터링합니다. 구조화된 데이터(CSV, JSON)는 S3 Select, 바이너리 파일 일부 다운로드는 Byte Range Fetch가 적합합니다.
Q: Glacier Select는 모든 Glacier 클래스에서 사용 가능한가요?
Glacier Flexible Retrieval(구 Glacier)에서 사용 가능합니다. Glacier Deep Archive에서는 사용할 수 없습니다.
Q: S3 Select 결과를 다른 S3 객체로 저장할 수 있나요?
S3 Select는 스트리밍 응답을 반환합니다. 결과를 저장하려면 애플리케이션에서 받아 다시 S3에 업로드하거나, Athena의 CTAS(Create Table As Select) 기능을 사용하세요.