Amazon Athena: S3의 서버리스 SQL
Athena에서 표준 SQL로 S3 데이터를 직접 쿼리하고, Parquet 및 ORC와 같은 열 형식을 사용해 최적화하며, 비용 관리를 위해 파티션을 구성합니다.
Amazon Athena: S3의 서버리스 SQL은(는) CoddyKit의 무료 Cloud & IT Cert Prep 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cloud & IT Cert Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
Amazon Athena란?
Amazon Athena는 Amazon S3에 저장된 데이터를 대상으로 표준 SQL을 직접 실행할 수 있게 해 주는 서버리스 대화형 쿼리 서비스입니다. 프로비저닝할 서버나 관리할 클러스터가 없으며, 쿼리마다 스캔한 데이터에 대해서만 비용을 지불합니다(스캔한 데이터 1TB당 약 5달러). Athena는 내부적으로 Presto를 사용하며 테이블 메타데이터를 위해 Glue Data Catalogue와 기본적으로 통합됩니다.
Athena 설정: 작업 그룹과 출력 위치
쿼리를 실행하기 전에 Athena Workgroup을 구성하고 쿼리 결과를 출력할 S3 경로를 지정해야 합니다. Workgroup을 사용하면 팀별로 쿼리 기록과 비용 추적을 분리하고, 결과에 암호화를 적용하며, 쿼리별 데이터 스캔 한도를 설정해 예상치 못한 비용 증가를 방지할 수 있습니다. 각 쿼리 결과는 구성된 S3 출력 버킷에 CSV로 기록됩니다.
# Create a workgroup with an encrypted output location
aws athena create-work-group \
--name analytics-team \
--configuration '{
"ResultConfiguration": {
"OutputLocation": "s3://athena-results-123/analytics-team/",
"EncryptionConfiguration": {"EncryptionOption": "SSE_S3"}
},
"EnforceWorkGroupConfiguration": true,
"PublishCloudWatchMetricsEnabled": true,
"BytesScannedCutoffPerQuery": 10737418240
}'첫 번째 쿼리 실행
Athena를 Glue Data Catalogue 데이터베이스에 연결하고 ANSI SQL을 실행해 보세요. Athena는 SELECT, JOIN, GROUP BY, 윈도 함수 및 CTE를 지원합니다. 또한 CREATE TABLE AS SELECT (CTAS)를 사용해 쿼리 결과를 Parquet 형식의 새 테이블로 저장할 수 있으며, 이를 통해 중간 결과를 실체화하여 후속 쿼리를 더 빠르게 실행할 수 있습니다.
-- Query total sales by month from partitioned S3 data
SELECT
year,
month,
SUM(order_total) AS monthly_revenue
FROM my_db.curated_sales
WHERE year = '2024'
GROUP BY year, month
ORDER BY month;
-- CTAS: materialise result as Parquet for reuse
CREATE TABLE my_db.monthly_revenue
WITH (format = 'PARQUET', external_location = 's3://my-data-lake-123/curated/monthly_revenue/')
AS
SELECT year, month, SUM(order_total) AS revenue
FROM my_db.curated_sales
GROUP BY year, month;비용 최적화: 파티션 가지치기
Athena는 스캔한 데이터 1TB 단위로 비용을 부과합니다. 가장 효과적인 비용 절감 방법은 파티션 가지치기이므로, 항상 WHERE 절에 파티션 열을 포함해야 합니다. 데이터가 year/month/day로 파티션되어 있다면 이러한 열로 필터링할 때 Athena가 다른 파티션을 스캔하지 않습니다. 페타바이트 규모의 테이블에서 파티션 필터 없이 간단한 쿼리를 실행하면 비용이 수백 달러에 이를 수 있습니다.
-- EXPENSIVE: No partition filter -> scans all data
SELECT * FROM my_db.curated_sales WHERE customer_id = '12345';
-- CHEAP: Partition filter applied -> scans only Jan 2024
SELECT * FROM my_db.curated_sales
WHERE year = '2024' AND month = '01' AND customer_id = '12345';비용 최적화: 열 기반 형식
CSV나 JSON 대신 Apache Parquet 또는 ORC에 데이터를 저장하면 쿼리마다 Athena가 스캔하는 데이터 양을 크게 줄일 수 있습니다. 열 기반 쿼리가 50개 열 중 3개 열에만 접근한다면 디스크에서 해당 3개 열의 데이터만 스캔합니다. 기본 제공 압축(Snappy, Zstd)을 함께 사용하면 Parquet 파일은 일반적으로 동일한 CSV보다 5~10배 작아져 비용을 더욱 절감할 수 있습니다.
-- After converting raw CSV to Parquet:
-- CSV version: 500 GB table, query scans 500 GB -> $2.50
-- Parquet version: same data compressed to 50 GB,
-- query reads only 2 columns -> scans ~2 GB -> $0.01
-- Verify table format in Glue Catalogue
SHOW CREATE TABLE my_db.curated_sales;데이터 소스 커넥터를 사용하는 페더레이션 쿼리
Athena Federated Query는 Lambda 기반 데이터 소스 커넥터를 사용해 Athena의 쿼리 범위를 S3 외에도 RDS, DynamoDB, Redshift, Elasticsearch 및 사용자 지정 소스로 확장합니다. Serverless Application Repository에서 커넥터 Lambda 함수를 배포하고 Athena 데이터 소스로 등록하면, 데이터를 먼저 이동하지 않고도 단일 SQL JOIN에서 S3 테이블과 실시간 데이터베이스를 함께 쿼리할 수 있습니다.
-- Federated query: join S3 Parquet with live RDS table
SELECT s.order_id, s.total, c.email
FROM my_db.curated_sales s
JOIN rds_lambda.prod_db.customers c
ON s.customer_id = c.id
WHERE s.year = '2024' AND s.month = '01';Athena와 QuickSight 통합
Amazon QuickSight는 Athena에 데이터 소스로 직접 연결되므로, 비즈니스 분석가가 중간 데이터베이스 없이 S3 데이터로 대화형 대시보드를 만들 수 있습니다. QuickSight는 SPICE(Super-fast, Parallel, In-memory Calculation Engine)를 사용해 Athena 쿼리 결과를 캐시하고 대시보드를 빠르게 렌더링합니다. 이 서버리스 BI 스택(S3 + Glue + Athena + QuickSight)은 비용 효율적인 분석을 위한 대표적인 시험 출제 유형입니다.
Athena 쿼리 성능 튜닝
파티셔닝과 열 기반 형식 외에도 다음과 같은 방법으로 Athena 쿼리를 추가로 튜닝할 수 있습니다. 큰 파일을 분할하고(병렬 처리를 위해 파일당 128MB~1GB를 목표로 함), 자주 JOIN하는 열에 버킷팅을 사용하며, SELECT *를 피하고, 정확한 값이 필요하지 않을 때는 approx_distinct() 및 approx_percentile()과 같은 근사 집계 함수를 사용합니다. 이러한 기법은 비용과 지연 시간을 모두 줄여 줍니다.
-- Use approx_distinct for fast cardinality estimate
SELECT
year,
approx_distinct(customer_id) AS approx_unique_customers
FROM my_db.curated_sales
WHERE year = '2024'
GROUP BY year;Athena 액세스 제어
Athena는 액세스 제어를 위해 IAM과 통합됩니다. 사용자는 Athena 쿼리 실행 권한(athena:StartQueryExecution), S3 출력 버킷 액세스 권한, 그리고 기본 S3 데이터 읽기 권한이 필요합니다. 열과 행 단위의 세분화된 액세스를 위해서는 Athena를 Lake Formation과 함께 사용하세요. Workgroup ARN에 IAM 조건 키를 적용하면 특정 데이터베이스로 Workgroup의 사용 범위를 제한할 수도 있습니다.
# Minimum IAM policy for an Athena analyst
{
"Effect": "Allow",
"Action": [
"athena:StartQueryExecution",
"athena:GetQueryExecution",
"athena:GetQueryResults",
"athena:StopQueryExecution",
"glue:GetDatabase",
"glue:GetTable",
"glue:GetPartitions",
"s3:GetObject",
"s3:PutObject"
],
"Resource": "*"
}쿼리 결과 저장 및 예약 쿼리
Athena 쿼리 결과는 S3에 CSV 파일로 저장되며 7일 동안 캐시됩니다. 따라서 이 기간에 동일한 쿼리를 다시 실행해도 데이터를 다시 스캔하지 않습니다. 정기적인 보고가 필요하다면 Athena Scheduled Queries를 사용해 cron 일정에 따라 쿼리를 실행하고 결과를 새 S3 위치나 테이블에 저장하세요. 또는 Step Functions 상태 머신이나 EventBridge 규칙에서 Athena 쿼리를 트리거할 수도 있습니다.
# Start an Athena query via CLI and retrieve results
QUERY_ID=$(aws athena start-query-execution \
--query-string 'SELECT COUNT(*) FROM my_db.curated_sales WHERE year=2024' \
--work-group analytics-team \
--query 'QueryExecutionId' --output text)
# Wait and fetch results
aws athena get-query-results --query-execution-id $QUERY_IDAthena와 Redshift 비교: 적합한 도구 선택
SAA-C03 시험에서는 Athena와 Redshift 중 언제 무엇을 추천해야 하는지 알아야 합니다. 관리할 인프라 없이 S3에서 비정기적인 임시 쿼리를 실행하려면 Athena를 선택하세요. 복잡한 JOIN에서 1초 미만의 응답 시간이 필요하거나, 전담 분석 팀이 수백 개의 동시 쿼리를 실행하거나, Redshift Spectrum을 사용해 S3 데이터로 데이터 웨어하우스를 확장하려면 Redshift를 선택하세요. 핵심 판단 기준은 쿼리의 빈도와 복잡도입니다.
빠른 확인
이 레슨에서 다룬 AWS Solutions Architect (SAA-C03) 개념을 제대로 이해했는지 확인해 보세요.
레슨 요약
이 레슨에서는 Athena가 스캔한 데이터 1TB 단위로 비용을 부과하므로 파티션 가지치기와 Parquet 형식이 핵심적인 비용 제어 수단이라는 점, Athena Federated Query가 Lambda 커넥터를 통해 SQL을 S3가 아닌 데이터 소스까지 확장한다는 점, 임시 쿼리에는 Athena가 가장 적합하고 높은 동시성이 필요한 분석에는 Redshift가 적합하다는 점을 배웠습니다. 다음으로는 실시간 데이터 스트리밍과 분석을 위한 Kinesis를 살펴보겠습니다.
자주 묻는 질문
“Amazon Athena: S3의 서버리스 SQL” 강의는 무료인가요?
네 — “Amazon Athena: S3의 서버리스 SQL” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cloud & IT Cert Prep 강의 전체를 잠금 해제할 수 있습니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“Amazon Athena: S3의 서버리스 SQL”에서 뭘 배우나요?
Athena에서 표준 SQL로 S3 데이터를 직접 쿼리하고, Parquet 및 ORC와 같은 열 형식을 사용해 최적화하며, 비용 관리를 위해 파티션을 구성합니다. 브라우저에서 직접 실행하는 실습 코드로 Cloud & IT Cert Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cloud & IT Cert Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cloud & IT Cert Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Amazon Athena: S3의 서버리스 SQL” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cloud & IT Cert Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cloud & IT Cert Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- S3에서 데이터 레이크 구축
- AWS Glue: ETL 및 데이터 카탈로그
- Amazon Athena: S3의 서버리스 SQL
- Kinesis Streams, Firehose 및 실시간 분석