Amazon Athena: S3 데이터를 SQL로 분석하는 서버리스 쿼리 서비스
Amazon Athena로 S3 데이터를 인프라 없이 SQL로 분석하는 방법. 파티셔닝으로 비용 97% 절감하기, S3 Select/Redshift 비교.
관련 시험 도메인
- Domain 3: Design High-Performing Architectures
- Domain 4: Design Cost-Optimized Architectures
핵심 요약
Amazon Athena는 S3에 저장된 데이터를 인프라 없이 SQL로 바로 분석하는 서버리스 쿼리 서비스입니다. 스캔한 데이터량만큼만 과금되며($5/TB), 파티셔닝과 Parquet 형식으로 비용을 최대 97%까지 절감할 수 있습니다.
시험 팁
시험 핵심: "S3 데이터 ad-hoc 분석" → Athena, "단일 객체 필터링" → S3 Select, "대규모 데이터 웨어하우스" → Redshift
Athena는 언제 사용해야 할까?
적합한 경우
Athena 추천 시나리오:
├── 웹 로그/애플리케이션 로그 분석
├── CloudTrail/VPC Flow 로그 쿼리
├── S3에 저장된 CSV/JSON/Parquet 분석
├── 빠른 ad-hoc 분석이 필요할 때
├── 데이터 레이크 쿼리 레이어
└── 인프라 관리 없이 SQL 실행
부적합한 경우
Athena가 적합하지 않은 경우:
├── 실시간 쿼리 (밀리초 응답 필요)
│ → ElastiCache, DynamoDB
├── 복잡한 ETL 변환
│ → AWS Glue, EMR
├── 대규모 조인/정교한 리포팅
│ → Amazon Redshift
└── 단일 파일 간단한 필터링
→ S3 Select
핵심 아키텍처
Athena 작동 방식
┌─────────────────────────────────────────────────────────────┐
│ Amazon Athena │
├─────────────────────────────────────────────────────────────┤
│ │
│ [SQL Query] │
│ │ │
│ ▼ │
│ ┌──────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Athena │────▶│ AWS Glue │────▶│ S3 │ │
│ │ Engine │ │ Data Catalog│ │ (데이터) │ │
│ │ (Trino) │ │ (메타데이터) │ │ │ │
│ └──────────┘ └──────────────┘ └──────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ │
│ │ S3 │ ← 쿼리 결과 저장 │
│ │ (결과) │ │
│ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
AWS Glue Data Catalog 통합
Glue Data Catalog 역할:
├── 데이터베이스/테이블 메타데이터 저장
├── 스키마 정의 (컬럼명, 데이터 타입)
├── 파티션 정보 관리
└── Athena, Redshift Spectrum, EMR 공유 사용
지원 데이터 형식
| 형식 | 유형 | 특징 | 비용 효율 |
|---|---|---|---|
| Parquet | 컬럼형 | 압축률 높음, 컬럼 선택 가능 | ⭐⭐⭐⭐⭐ |
| ORC | 컬럼형 | Hive 최적화, 압축 우수 | ⭐⭐⭐⭐⭐ |
| JSON | 행 기반 | 중첩 구조 지원 | ⭐⭐⭐ |
| CSV | 행 기반 | 단순, 범용 | ⭐⭐ |
| Avro | 행 기반 | 스키마 진화 지원 | ⭐⭐⭐ |
시험 팁
시험 포인트: Athena 비용 최적화 = Parquet/ORC 형식 + 파티셔닝 + 압축(Snappy, GZIP)
비용 구조
기본 과금
Athena SQL 쿼리 비용:
├── $5 / TB (스캔된 데이터 기준)
├── 최소 10MB 단위 과금
└── 쿼리 결과 S3 저장 비용 별도
예시:
├── 1TB 텍스트 파일 전체 스캔 → $5
├── 100GB 파티션만 스캔 → $0.50
└── 10GB Parquet 컬럼 선택 → $0.05
비용 최적화 전략
비용 절감 효과:
┌─────────────────────────────────────────────────────────────┐
│ 최적화 방법 │ 비용 절감율 │
├─────────────────────────────────────────────────────────────┤
│ Parquet/ORC 형식 변환 │ 3-5배 절감 │
│ 파티셔닝 적용 │ 10-100배 절감 │
│ 컬럼 압축 (Snappy/GZIP) │ 2-3배 절감 │
│ SELECT * 대신 필요 컬럼만 │ 2-10배 절감 │
│ 버킷팅 (고카디널리티 컬럼) │ 최대 97% 절감 │
└─────────────────────────────────────────────────────────────┘
파티셔닝: 비용 최적화의 핵심
Hive 스타일 파티셔닝
파티셔닝 없는 구조:
s3://logs-bucket/access-logs/
├── log-001.parquet
├── log-002.parquet
└── ... (1년치 모든 로그)
→ 1년치 전체 스캔: $50 (10TB 가정)
파티셔닝 적용 구조:
s3://logs-bucket/access-logs/
├── year=2026/
│ ├── month=01/
│ │ ├── day=01/
│ │ │ └── log-001.parquet
│ │ └── day=02/
│ └── month=02/
└── year=2025/
→ 특정 날짜만 스캔: $0.50 (100GB)
파티션 프로젝션
-- 파티션 프로젝션 설정 (MSCK REPAIR 불필요)
CREATE EXTERNAL TABLE access_logs (
request_id STRING,
user_id STRING,
action STRING
)
PARTITIONED BY (year INT, month INT, day INT)
LOCATION 's3://logs-bucket/access-logs/'
TBLPROPERTIES (
'projection.enabled' = 'true',
'projection.year.type' = 'integer',
'projection.year.range' = '2020,2030',
'projection.month.type' = 'integer',
'projection.month.range' = '1,12',
'projection.day.type' = 'integer',
'projection.day.range' = '1,31',
'storage.location.template' =
's3://logs-bucket/access-logs/year=${year}/month=${month}/day=${day}'
);
시험 팁
파티션 프로젝션: Glue Data Catalog 대신 테이블 속성에 파티션 규칙 저장. 대규모 파티션에서 MSCK REPAIR TABLE 불필요, 쿼리 계획 성능 향상.
Athena vs S3 Select vs Redshift
비교 표
| 비교 항목 | Athena | S3 Select | Redshift |
|---|---|---|---|
| 쿼리 범위 | 여러 파일/테이블 | 단일 객체 | 전체 데이터 웨어하우스 |
| SQL 기능 | 전체 SQL (JOIN, 집계, 윈도우) | 기본 SELECT/WHERE | 전체 SQL + 분석 함수 |
| 스키마 | Glue Catalog 필요 | 불필요 | 테이블 정의 필요 |
| 인프라 | 서버리스 | 서버리스 | 클러스터 (서버리스 옵션) |
| 적합한 데이터 | GB~TB | KB~GB | TB~PB |
| 지연시간 | 초~분 | 밀리초 | 밀리초~초 |
| 비용 | $5/TB 스캔 | $0.002/GB 스캔 | 시간당 과금 |
선택 기준 흐름도
S3 데이터 분석이 필요하다
│
▼
단일 객체에서 간단한 필터링?
│
Yes → [S3 Select]
│
No
│
▼
여러 파일에서 ad-hoc SQL 분석?
│
Yes → [Athena]
│
No
│
▼
복잡한 조인/대규모 ETL/BI 리포팅?
│
Yes → [Redshift / Redshift Spectrum]
연합 쿼리 (Federated Query)
다양한 데이터 소스 쿼리
┌─────────────────────────────────────────────────────────────┐
│ Athena Federated Query │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ Athena │ │
│ └──────┬──────┘ │
│ │ │
│ ┌────────────┼────────────┬─────────────┐ │
│ ▼ ▼ ▼ ▼ │
│ ┌─────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐ │
│ │ S3 │ │DynamoDB │ │ RDS │ │ Redshift │ │
│ └─────┘ └─────────┘ └─────────┘ └──────────┘ │
│ │
│ → Lambda 커넥터를 통해 다양한 소스 조인 가능 │
└─────────────────────────────────────────────────────────────┘
Athena Spark
Apache Spark 통합
Athena Spark 특징:
├── 노트북 인터페이스로 Spark 코드 실행
├── Python, Scala 지원
├── 복잡한 데이터 변환 가능
├── ML 라이브러리 사용 가능
└── DPU-hour 기준 과금 ($0.35/DPU-hour)
SAA-C03 시험 출제 포인트
자주 출제되는 시나리오
- ✅ 서비스 선택: "S3 로그를 SQL로 분석" → Athena
- ✅ 비용 최적화: "Athena 비용 줄이기" → 파티셔닝 + Parquet
- ✅ 서비스 비교: "S3 Select vs Athena" → 단일 객체 vs 다중 객체
- ✅ 통합: "Glue Catalog 역할" → 메타데이터 저장소
시험 문제 예시
시험 팁
시험 문제 예시 1: "회사는 S3에 매일 수 TB의 로그를 저장합니다. 특정 날짜의 오류만 분석하려고 합니다. 비용을 최소화하는 방법은?"
→ 정답: 날짜별 파티셔닝 + Athena 쿼리 (필요한 파티션만 스캔)
시험 팁
시험 문제 예시 2: "S3에 저장된 1GB JSON 파일에서 특정 조건의 레코드만 추출하려고 합니다. 가장 비용 효율적인 방법은?"
→ 정답: S3 Select (단일 객체 간단한 필터링)
자주 묻는 질문 (FAQ)
Q: Athena와 Redshift Spectrum의 차이점은?
Athena는 독립적인 서버리스 쿼리 서비스이고, Redshift Spectrum은 Redshift 클러스터에서 S3 데이터를 쿼리하는 기능입니다. Redshift가 이미 있다면 Spectrum, 순수 S3 분석만 필요하면 Athena.
Q: Athena 쿼리 결과는 어디에 저장되나요?
쿼리 결과는 지정한 S3 버킷에 CSV 형식으로 저장됩니다. 결과 버킷은 필수 설정이며, S3 저장 비용이 별도 발생합니다.
Q: MSCK REPAIR TABLE은 언제 필요한가요?
새 파티션이 추가되면 Glue Catalog에 등록해야 합니다. MSCK REPAIR TABLE로 파티션을 자동 탐지하거나, 파티션 프로젝션을 사용하면 이 작업이 불필요합니다.
Q: Athena는 실시간 쿼리에 적합한가요?
아니요. Athena는 초~분 단위 응답 시간으로 ad-hoc 분석에 적합합니다. 밀리초 응답이 필요하면 ElastiCache, DynamoDB, 또는 프로비저닝된 Redshift를 고려하세요.
Q: Athena에서 UPDATE/DELETE가 가능한가요?
기본적으로 불가능합니다. Athena는 읽기 전용 쿼리 서비스입니다. 단, Apache Iceberg 테이블을 사용하면 ACID 트랜잭션(INSERT, UPDATE, DELETE)이 가능합니다.