SAABlog
데이터베이스중급

Amazon Athena: S3 데이터를 SQL로 분석하는 서버리스 쿼리 서비스

Amazon Athena로 S3 데이터를 인프라 없이 SQL로 분석하는 방법. 파티셔닝으로 비용 97% 절감하기, S3 Select/Redshift 비교.

PHILOLAMB-
Athena서버리스SQLS3 분석데이터 레이크

관련 시험 도메인

  • 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

비교 표

비교 항목AthenaS3 SelectRedshift
쿼리 범위여러 파일/테이블단일 객체전체 데이터 웨어하우스
SQL 기능전체 SQL (JOIN, 집계, 윈도우)기본 SELECT/WHERE전체 SQL + 분석 함수
스키마Glue Catalog 필요불필요테이블 정의 필요
인프라서버리스서버리스클러스터 (서버리스 옵션)
적합한 데이터GB~TBKB~GBTB~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 시험 출제 포인트

자주 출제되는 시나리오

  1. 서비스 선택: "S3 로그를 SQL로 분석" → Athena
  2. 비용 최적화: "Athena 비용 줄이기" → 파티셔닝 + Parquet
  3. 서비스 비교: "S3 Select vs Athena" → 단일 객체 vs 다중 객체
  4. 통합: "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)이 가능합니다.


관련 글

참고 자료