Udemy AWS DEA) Section 8 : Analytics
목차
AWS Glue
- 서버리스(Serverless) 데이터 통합 서비스
- 데이터 탐색 및 테이블 정의(메타데이터 관리) 지원
- 다양한 데이터 소스에서 스키마(Schema) 자동 감지 및 테이블 정의
- ETL(Extract, Transform, Load) 파이프라인 실행 가능
AWS Glue 주요 기능
✅ 데이터 저장소와 통합 가능
- S3 데이터 레이크 (Data Lake)
- 관계형 데이터베이스 (RDS, Redshift, DynamoDB)
- 기타 SQL 기반 데이터베이스
✅ ETL(추출, 변환, 적재) 작업 지원
- 트리거 기반 실행 (이벤트 발생 시 자동 실행)
- 스케줄 기반 실행 (정해진 일정에 따라 실행)
- 온디맨드 실행 (수동 실행 가능)
✅ 완전 관리형 서비스 (Fully Managed)
- 서버 관리 필요 없음
- 자동 확장 지원
- Apache Spark 기반으로 병렬 데이터 처리 가능
📌 AWS Glue는 데이터 탐색, 테이블 정의, 그리고 ETL 작업을 자동화하는 서버리스 솔루션이다.
AWS Glue Crawler & Data Catalog
✅ Glue Crawler:
- S3, RDS, Redshift, DynamoDB 등의 데이터 소스 스캔 → 자동으로 스키마 생성
- 주기적으로 실행 가능
- Glue Data Catalog에 테이블 정의 저장 (원본 데이터는 그대로 유지됨)
- Glue Data Catalog가 스키마를 정의하면 Athena, Redshift Spectrum, EMR, QuickSight에서 구조화된 데이터처럼 활용 가능
✅ S3 데이터 파티셔닝 (Partitioning) 전략
- S3 데이터 구조를 쿼리 방식에 맞춰 설계해야 성능 최적화 가능
- 시간 기반 쿼리가 많다면 👉 S3://bucket/yyyy/mm/dd/device/
- 디바이스별 쿼리가 많다면 👉 S3://bucket/device/yyyy/mm/dd/
✅ Glue + Hive 통합
- Glue Data Catalog는 EMR의 Hive Metastore로 활용 가능
- 기존 Hive Metastore를 Glue Data Catalog로 마이그레이션 가능
AWS Glue ETL (Extract, Transform, Load) - 중요
- 자동 코드 생성 지원
- Scala 또는 Python 사용 가능
- 암호화 지원
- 서버 측 암호화(저장 시, at rest)
- SSL 암호화(전송 중, in transit)
- 이벤트 기반 실행 가능
- 추가적인 "DPU(Data Processing Units)"를 프로비저닝하여 Spark 작업 성능 향상 가능
- 작업(Job) 메트릭을 활성화하면 필요한 최대 DPU 용량을 파악하는 데 도움됨
- Glue 콘솔에서 "최대 필요 실행기(Executors) vs. 최대 할당 실행기(Executors)" 및 ETL 데이터 이동을 시각적으로 확인 가능 (CloudWatch에서는 지원하지 않음!)
- 오류 로그는 CloudWatch에 보고됨
- SNS와 연동하여 알림(Notification) 설정 가능
-> 데이터를 자동으로 처리하고 변환할 수 있는 시스템이다. 그리고 실제 실행중 일때 암호화된 코드를 사용하여 내부적으로 Spark를 사용하여 이를 수행합니다. 원하는 경우 이벤트 기반이 되거나 일정에 따라 실행될 수 있습니다.
✅ Glue ETL 주요 기능
- 데이터 변환(Transform), 데이터 정제(Cleaning), 데이터 보강(Enrichment) 수행 (분석 전 처리 과정)
- Python 또는 Scala로 ETL 코드 자동 생성 가능하며, 직접 수정 가능
- 사용자가 직접 Spark 또는 PySpark 스크립트를 제공할 수도 있음
- 타겟 데이터 저장소:
- S3, JDBC(RDS, Redshift), Glue Data Catalog
- 완전 관리형(Fully Managed) 및 비용 효율적(Cost-Effective)
- 사용한 리소스에 대해서만 비용 부과 (Pay-as-you-go)
- 서버리스(Serverless) Spark 플랫폼에서 실행됨
- Glue 스케줄러(Glue Scheduler)를 사용하여 작업 일정 예약 가능
- 원하는 이벤트에 따라 Glue 트리거(Glue Triggers)를 활용하여 작업 실행 자동화 가능
Glue ETL – DynamicFrame
- DynamicFrame은 DynamicRecord들의 집합
- DynamicRecord는 자체적으로 스키마를 정의(Self-Describing)할 수 있음
- Spark DataFrame과 유사하지만, ETL 기능이 추가됨
- Scala 및 Python API 지원
📌 DynamicFrame은 스키마 변경이 잦거나, 데이터 정제 및 변환이 필요한 ETL 작업에 적합한 Spark DataFrame의 확장 버전!
Glue ETL – 변환(Transformations)
1. 기본 제공 변환(Bundled Transformations)
- DropFields, DropNullFields – 특정 필드 또는 NULL 값을 포함한 필드 제거
- Filter – 특정 조건을 만족하는 레코드만 필터링
- Join – 데이터를 결합하여 보강(Enrichment)
- Map – 필드 추가, 삭제, 외부 데이터 조회(Lookup) 수행
2. 머신러닝 변환(Machine Learning Transformations)
- FindMatches ML
- 중복 데이터 또는 유사한 레코드 탐지
- 고유 식별자 없이도 비슷한 데이터 식별 가능 (정확히 일치하는 필드가 없어도 유사성 분석 가능)
3. 포맷 변환(Format Conversions)
- 다양한 데이터 형식 간 변환 지원: CSV, JSON, Avro, Parquet, ORC, XML
4. Apache Spark 기반 변환
- 예제: K-Means 클러스터링 알고리즘 적용 가능
5. Spark DataFrame ↔ Glue DynamicFrame 변환 가능
- Spark DataFrame을 DynamicFrame으로 변환하여 Glue의 ETL 기능 활용 가능
- DynamicFrame을 Spark DataFrame으로 변환하여 Spark의 고급 분석 기능 활용 가능
Glue ETL – ResolveChoice 변환
ResolveChoice는 DynamicFrame에서 발생할 수 있는 데이터 모호성(ambiguity)을 해결하고 새로운 DynamicFrame을 반환하는 변환 함수이다.
1. 해결해야 할 주요 데이터 모호성 예제
- 동일한 이름을 가진 두 개의 필드가 존재하는 경우
- 하나의 컬럼에 여러 데이터 타입이 혼합된 경우
2. 해결 방법 (choice 옵션)
- make_cols – 같은 컬럼에 여러 타입이 존재할 경우, 타입별로 새로운 컬럼을 생성
- 예: price 컬럼에 double과 string 타입이 섞여 있는 경우
- 결과: price_double, price_string 두 개의 새로운 컬럼으로 분리
- cast – 모든 값을 특정 데이터 타입으로 변환
- 예: price 컬럼의 데이터를 모두 double 타입으로 변환
- make_struct – 각 데이터 타입을 포함하는 구조체(Struct) 생성
- 예: myList[].price 컬럼이 여러 타입을 포함하고 있을 경우, 이를 하나의 구조체(struct)로 묶어서 저장
- project – 모든 타입을 지정한 단일 타입으로 변환
- 예: project:string을 사용하여 모든 값을 문자열로 변환
3. 예제 코드
# 컬럼 타입별로 분리
df1 = df.resolveChoice(choice="make_cols")
# 특정 컬럼을 구조체로 변환, 특정 컬럼을 double로 변환
df2 = df.resolveChoice(specs=[
("myList[].price", "make_struct"),
("columnA", "cast:double")
])
Glue ETL – 데이터 카탈로그 수정(Modifying the Daa Catalog)
Glue ETL 스크립트는 필요에 따라 데이터 카탈로그(Schema & Partition)를 업데이트할 수 있음
1. 새로운 파티션 추가 (Adding New Partitions)
- 방법 1: 크롤러(Crawler) 다시 실행
- 방법 2: ETL 스크립트에서 enableUpdateCatalog 및 partitionKeys 옵션 사용
2. 테이블 스키마 업데이트 (Updating Table Schema)
- 방법 1: 크롤러 다시 실행
- 방법 2: ETL 스크립트에서 enableUpdateCatalog 및 updateBehavior 옵션 사용
3. 새로운 테이블 생성 (Creating New Tables)
- enableUpdateCatalog, updateBehavior와 함께 setCatalogInfo 사용
4. 제약 사항 (Restrictions)
✔ 지원되는 스토리지 → S3 전용
✔ 지원되는 파일 형식 → JSON, CSV, Avro, Parquet
✔ Parquet 파일은 특별한 코드가 필요함
✔ 중첩 스키마(Nested Schema)는 지원되지 않음
AWS Glue 개발 환경
✅ Glue Development Endpoints
- ETL 스크립트를 개발 후 Glue에서 실행 가능
- 보안 그룹을 활용한 VPC 내 개발 환경 제공
- 연결 방법:
- Apache Zeppelin (로컬 머신)
- Zeppelin Notebook (EC2)
- SageMaker Notebook
- 터미널 (Terminal)
- PyCharm Professional Edition
- Elastic IP 활용 시 Private Endpoint 접근 가능
📌 AWS Glue는 강력한 데이터 크롤링, ETL, 그리고 데이터 카탈로그 기능을 제공하는 서버리스 솔루션으로, 데이터 분석 및 머신러닝 워크플로우를 최적화하는 데 유용하다.
Glue 작업 실행 (Running Glue Jobs)
Glue 작업(Job)은 다양한 방식으로 실행 및 관리될 수 있음.
1. 시간 기반 스케줄 (Time-based Schedules)
- Cron 스타일의 일정 설정 가능
- 특정 주기(매일, 매주, 매월 등) 또는 특정 시간에 자동 실행
2. 작업 북마크 (Job Bookmarks)
- 이전 작업 실행 상태를 저장하여 중복 처리를 방지
- 새로운 데이터만 처리하도록 설정 가능
- 지원되는 데이터 소스
- S3 (다양한 파일 형식 지원)
- JDBC를 통한 관계형 데이터베이스 (단, PK가 순차적일 경우)
- 업데이트된 행이 아니라 새로운 행만 처리 가능
3. CloudWatch 이벤트 (CloudWatch Events)
- ETL 작업 성공 또는 실패 시 트리거 설정 가능
- Lambda 함수 실행
- SNS 알림 전송
- EC2 인스턴스 실행
- Kinesis 스트림에 이벤트 전송
- Step Function 활성화 가능
📌 Glue Jobs를 효과적으로 관리하면 불필요한 데이터 재처리를 방지하고, 이벤트 기반 워크플로우를 자동화할 수 있음!
AWS Glue 비용 모델
💰 과금 방식
- 크롤러(Crawler) 및 ETL 작업 실행 시간(초 단위) 기준으로 과금
- Glue Data Catalog의 첫 100만 개 객체 저장 및 접근 무료
- ETL 개발을 위한 Development Endpoint는 분 단위 과금
AWS Glue Anti-Patterns (비효율적인 사용 사례)
🚫 다중 ETL 엔진 사용
- Glue ETL은 Apache Spark 기반
- Hive, Pig 같은 다른 ETL 엔진을 사용하려면 AWS Data Pipeline 또는 EMR이 더 적합
🚫 기존에는 Glue에서 실시간 스트리밍 ETL이 비효율적이었지만, 현재는 지원됨
- 2020년 4월부터 Kinesis, Kafka와의 스트리밍 ETL 지원
- 데이터를 실시간으로 변환 및 정제 후 S3나 다른 데이터 저장소에 저장 가능
- Apache Spark Structured Streaming 기반
AWS Glue Studio: 시각적 ETL 개발 도구
✅ Glue Studio 주요 기능
- 비주얼 인터페이스를 통해 ETL 워크플로우 설계
- DAG(Directed Acyclic Graph) 기반 ETL 워크플로우 생성 가능
- S3, Kinesis, Kafka, JDBC 등 다양한 데이터 소스와 연계 가능
- 데이터 변환(Transform), 샘플링(Sample), 조인(Join) 등 기능 제공
- S3 및 Glue Data Catalog에 데이터 저장 가능
- ETL 작업의 실행 상태 및 수행 시간 대시보드 제공
AWS Glue Data Quality (데이터 품질 관리)
AWS Glue Data Quality는 AWS Glue에서 제공하는 데이터 품질 검증 기능으로, ETL(Extract, Transform, Load) 과정에서 데이터의 정확성과 신뢰성을 보장하기 위해 사용됩니다
✅ 데이터 품질 규칙 (Data Quality Rules)
- 수동 설정 가능, 또는 자동 추천 기능 지원
- Glue Job 내에서 데이터 품질 검증 가능
- Data Quality Definition Language (DQDL) 사용
- 검증 결과를 CloudWatch에 보고하거나, 품질 문제 발생 시 Glue Job 실패 처리 가능
📌 AWS Glue는 단순한 ETL 서비스가 아니라, 데이터 카탈로그 관리, 스트리밍 ETL, 시각적 개발 도구, 그리고 데이터 품질 관리까지 포함하는 강력한 데이터 처리 플랫폼이다.
AWS Glue DataBrew란?
AWS Glue DataBrew는 코드 없이 시각적으로 데이터를 준비할 수 있는 도구로, 대량의 데이터를 사전 처리(pre-processing)하고 변환하는 데 사용됩니다.
AWS Glue DataBrew 주요 기능
✅ 시각적 데이터 준비 (No-Code UI)
- 코드 없이 UI를 활용하여 데이터 변환 가능
- 대량의 데이터(빅데이터)도 처리 가능
- 250개 이상의 사전 정의된 데이터 변환 기능 제공
✅ 데이터 소스 및 출력 지원
- 입력 데이터 소스: S3, 데이터 웨어하우스(Redshift), RDS, Snowflake 등
- 출력 데이터 저장 위치: S3 (CSV, JSON, Parquet 등 지원)
✅ 데이터 변환 기능
- “Recipe” 기반 데이터 변환
- 변환 단계를 Recipe(레시피)로 저장하여 재사용 가능
- Recipe를 Glue Job으로 등록하여 자동 실행 가능
- 예제: 특정 컬럼을 Key-Value 형식으로 변환
✅ 데이터 품질 검증
- 데이터 품질 규칙을 정의하고 검증 가능
- Redshift 및 Snowflake에서 사용자 정의 SQL 쿼리를 활용한 데이터셋 생성 가능
✅ 보안 및 규정 준수
- KMS를 통한 데이터 암호화 지원 (사용자 관리 키 지원)
- SSL을 통한 데이터 전송 암호화 지원
- IAM을 통한 사용자 권한 관리 가능
- CloudWatch & CloudTrail과 통합하여 데이터 활동 모니터링 가능
AWS Glue DataBrew의 PII (Personally Identifiable Information, 개인정보 보호) 처리
DataBrew는 PII(개인 식별 정보)를 자동 감지하고 변환할 수 있습니다.
📌 주요 개인정보 보호 기능
대체 (Substitution) | 데이터를 무작위 값으로 변경 |
셔플링 (Shuffling) | 데이터 순서를 무작위로 변경 |
결정적 암호화 (Deterministic Encryption) | 동일한 입력값이 동일한 암호화 값을 가지도록 변환 |
확률적 암호화 (Probabilistic Encryption) | 입력값에 따라 무작위 암호화 수행 |
복호화 (Decryption) | 암호화된 데이터를 원래 값으로 복원 |
Null 처리 또는 삭제 (Nulling out / Deletion) | 데이터 삭제 또는 Null 값 변환 |
마스킹 (Masking) | 특정 패턴을 기반으로 데이터 마스킹 |
해싱 (Hashing) | 데이터를 암호화된 해시 값으로 변환 |
🛠️ 예제:
- 이메일을 REPLACE_WITH_RANDOM 변환으로 처리
- 이름을 MASK_CUSTOM을 사용하여 부분 마스킹 적용
AWS Glue Workflows란?
AWS Glue Workflows는 여러 개의 Glue Job 및 Crawler를 순차적으로 실행하는 오케스트레이션 기능을 제공합니다.
✅ 주요 기능
- 다양한 Glue Job 및 Crawler를 하나의 Workflow에서 실행 가능
- AWS Glue 콘솔, API 또는 Glue Blueprint를 통해 생성 가능
- 복잡한 ETL 프로세스를 자동화하는 데 사용됨
✅ Glue Workflow Trigger (트리거)
Glue에서 트리거(Triggers)를 사용하면 작업(Job) 또는 크롤러(Crawler)를 자동 실행할 수 있음.
✔ 동작 방식
트리거는 워크플로우 내에서 Job 또는 Crawler 실행을 시작 -> 이전 작업(Job) 또는 크롤러 실행 완료 시 트리거 실행 가능
✔ 트리거 유형
- 스케줄 기반 (Schedule)
- Cron 표현식을 사용하여 특정 시간에 자동 실행
- 수동(On-Demand) 실행 가능
- 이벤트 기반 (EventBridge Events)
- 단일 이벤트(Single Event) 또는 이벤트 배치(Batch of Events) 기반 실행 가능
- 예제: 새로운 객체가 S3에 업로드되었을 때 실행
✔ 배치 조건 (Optional Batch Conditions)
- Batch Size – 트리거가 실행되기 위한 이벤트 개수 설정
- Batch Window – 특정 시간(X초, 기본값: 15분) 내 발생한 이벤트를 모아서 실행
AWS Lake Formation이란?
AWS Lake Formation은 AWS에서 보안이 강화된 데이터 레이크(Data Lake)를 쉽게 구축하는 서비스입니다.
✔ 데이터 적재 및 흐름 모니터링 (Loading & Monitoring Data Flows)
✔ 파티션 설정 (Setting up Partitions)
✔ 데이터 암호화 및 키 관리 (Encryption & Managing Keys)
✔ ETL 변환 작업 정의 및 모니터링 (Defining & Monitoring Transformation Jobs)
✔ 세분화된 접근 제어 (Access Control)
✔ 사용 내역 감사 (Auditing)
✔ AWS Glue 기반으로 구축됨
AWS Lake Formation: Pricing
- Lake Formation 자체는 무료
- 하지만, 내부적으로 사용하는 AWS 서비스는 비용이 발생
- Glue • S3 • EMR • Athena • Redshift
AWS Lake Formation: 데이터 레이크 구축 과정
AWS Lake Formation을 활용하여 보안이 강화된 데이터 레이크를 구축하는 과정은 다음과 같습니다.
1. IAM 사용자 생성 (데이터 분석가)
- 데이터 접근 권한을 제어하기 위해 IAM 사용자를 생성
- 데이터 분석가에게 필요한 권한만 부여
2. AWS Glue 연결 생성
- 데이터 원본에 연결할 AWS Glue Connection을 생성
- RDS, Redshift, 온프레미스 데이터베이스 등 다양한 데이터 소스를 지원
3. S3 버킷 생성 (데이터 레이크 저장소)
- 데이터 레이크의 원본 데이터를 저장할 Amazon S3 버킷 생성
- 데이터 계층화 및 보안 설정 적용
4. S3 경로 등록 및 권한 부여
- Lake Formation에 S3 경로 등록
- 특정 사용자 및 서비스(Athena, Redshift 등)에 대한 접근 권한 설정
5. 데이터베이스 및 데이터 카탈로그 생성
- Lake Formation에서 데이터베이스 생성
- Glue Data Catalog에 테이블을 등록하여 메타데이터 관리
- 접근 권한을 부여하여 필요한 사용자만 사용할 수 있도록 설정
6. 블루프린트 기반 워크플로우 생성 및 실행
- Database Snapshot 블루프린트 활용
- 데이터베이스 백업을 주기적으로 저장하는 자동화된 ETL 워크플로우 구성
- 워크플로우 실행하여 데이터 수집 및 처리
7. 데이터 읽기 권한 부여
- Athena, Redshift Spectrum, EMR 등의 분석 도구에서 SELECT 권한을 부여
- 필요에 따라 세부적인 테이블 및 컬럼 단위의 접근 제어 설정 가능
AWS Lake Formation을 사용한 데이터 레이크 구축 과정 요약
- IAM 사용자 생성 및 권한 부여
- AWS Glue 데이터 소스 연결
- 데이터 저장을 위한 S3 버킷 생성
- S3 데이터를 Lake Formation에 등록 및 접근 권한 관리
- 데이터베이스 및 Glue Data Catalog 생성
- 블루프린트 기반의 워크플로우 실행
- Athena, Redshift Spectrum 등의 분석 서비스에 SELECT 권한 부여
📌 Lake Formation을 활용하면 데이터 관리 및 보안 설정을 간편하게 구성할 수 있다.
AWS Lake Formation: 주요 기능과 보안 관리
AWS Lake Formation은 데이터 레이크를 효율적으로 구성하고 보안을 강화할 수 있도록 다양한 기능을 제공한다. 여기에서는 크로스 계정 권한 설정, 거버넌스 테이블, 세부적인 보안 정책 등에 대해 정리한다.
1. 크로스 계정 권한 관리
AWS Lake Formation에서는 다른 AWS 계정과 데이터 레이크를 공유할 수 있다. 이를 위해 다음과 같은 설정이 필요하다.
- 데이터 수신 계정을 Lake Formation 관리자로 설정해야 한다.
- 조직 외부 계정과 공유할 경우, AWS Resource Access Manager를 사용할 수 있다.
- IAM 권한이 올바르게 설정되어 있어야 크로스 계정 액세스가 가능하다.
- Athena 및 Redshift 쿼리에서는 매니페스트(manifest) 파일을 지원하지 않음.
- KMS 암호화된 데이터 카탈로그를 사용하려면, IAM에서 KMS 키에 대한 액세스 권한이 필요하다.
- 블루프린트 및 워크플로우 생성 시에도 IAM 권한이 필요하다.
2. 거버넌스 테이블(Governed Tables) 및 보안
✔ Lake Formation은 이제 ACID 트랜잭션을 지원하는 거버넌스 테이블을 제공한다.
- 거버넌스 테이블은 S3 기반의 새로운 테이블 유형으로, 트랜잭션 일관성을 유지할 수 있다.
- 일단 거버넌스 테이블로 설정하면 변경이 불가능하다.
- Kinesis 등의 스트리밍 데이터도 지원한다.
- Athena에서 직접 쿼리 가능하다.
✔ 자동 압축(Auto Compaction) 기능을 통해 스토리지를 최적화한다.
✔ 행(Row) 및 셀(Cell) 수준의 세부적인 보안 정책을 적용할 수 있음.
✔ 이러한 추가 기능은 사용량에 따라 추가 요금이 발생할 수 있음.
3. 데이터 권한 관리
Lake Formation에서는 세밀한 권한 관리가 가능하다.
- IAM 사용자/역할(Role), SAML 인증, 외부 AWS 계정과 연결할 수 있다.
- 데이터베이스, 테이블, 컬럼 수준에서 정책 태그(Policy Tags)를 적용하여 권한을 관리할 수 있다.
- 특정 테이블이나 컬럼에 대해 세부적인 권한을 부여할 수 있다.
4. 데이터 필터링 및 보안 설정
Lake Formation에서는 세부적인 보안 정책을 적용할 수 있다.
- 컬럼(Column), 행(Row), 셀(Cell) 수준의 보안 설정 가능
- 테이블에 SELECT 권한을 부여할 때 특정 필터를 적용 가능
- 행(Row) 수준 보안: 모든 컬럼을 허용하지만 특정 행만 접근 가능
- 컬럼(Column) 수준 보안: 특정 행을 허용하지만 특정 컬럼만 접근 가능
- 셀(Cell) 수준 보안: 특정 행과 특정 컬럼만 접근 가능
- 이러한 필터는 AWS 콘솔 또는 CreateDataCellsFilter API를 통해 생성 가능
📌 AWS Lake Formation은 강력한 데이터 거버넌스 및 보안 기능 을 제공하며, 크로스 계정 데이터 공유, ACID 트랜잭션 지원, 세부적인 권한 관리 가 가능하다. 이를 활용하면 기업의 데이터 레이크 운영을 더 안전하고 효율적으로 관리 할 수 있다.
AWS Glue DataBrew vs Glue Workflows vs Lake Formation
- 서비스 주요 기능 주요 사용 사례
AWS Glue DataBrew | UI 기반 데이터 변환 | 코드 없이 데이터 정제, 품질 검증 |
AWS Glue Workflows | Glue Job 및 Crawler 자동화 | 복잡한 ETL 워크플로우 구축 |
AWS Lake Formation | 보안이 강화된 데이터 레이크 | 데이터 접근 제어, 모니터링 |
📌 AWS Glue DataBrew를 활용하면, 데이터 엔지니어링 및 분석을 위한 데이터를 손쉽게 변환하고 관리할 수 있습니다.
특히, 코드 없이도 데이터 정제 및 품질 관리를 수행할 수 있어, 비즈니스 팀과 데이터 엔지니어 모두 쉽게 사용할 수 있는 장점이 있습니다!
Amazon Athena
Amazon Athena는 서버리스 쿼리 서비스로, S3에 저장된 데이터를 SQL을 사용하여 직접 분석할 수 있도록 지원한다. 데이터를 별도로 로드할 필요 없이 S3에서 직접 분석이 가능하며, Presto 기반으로 동작한다.
Athena의 특징
- 완전 서버리스: 인프라 관리가 필요 없음
- 다양한 데이터 형식 지원:
- 텍스트 기반: CSV, TSV, JSON
- 컬럼 기반: ORC, Parquet (압축, 스플릿 가능)
- 기타: Avro, 다양한 압축 포맷(Snappy, Zlib, Gzip 등)
- 구조화되지 않은 데이터, 반구조화 데이터, 구조화된 데이터 모두 지원
주요 사용 사례
- 웹 로그 분석 (Ad-hoc Query)
- Redshift로 데이터를 적재하기 전에 임시 데이터 검토
- CloudTrail, CloudFront, VPC, ELB 로그 분석
- Jupyter, Zeppelin, RStudio 같은 노트북 도구와 통합
- QuickSight 등 BI 툴과 연동 (ODBC / JDBC 지원)
Athena + AWS Glue 연동
Athena는 Glue Data Catalog와 통합하여 메타데이터를 관리할 수 있다.
- Glue Crawler가 S3 데이터를 스캔하여 스키마를 자동으로 생성
- Glue Data Catalog를 사용하여 구조화되지 않은 데이터를 구조화된 데이터처럼 사용 가능
- Redshift Spectrum, EMR, QuickSight 등과 통합 가능
Workgroups (작업 그룹) 기능
- 사용자, 팀, 애플리케이션, 워크로드 단위로 작업 그룹 관리 가능
- 워크그룹별로 쿼리 기록, 데이터 스캔 제한, IAM 정책, 암호화 설정 가능
- CloudWatch 및 SNS와 통합하여 모니터링 가능
- 각 Workgroup(워크그룹)은 독립적인 설정을 가질 수 있음.
- 쿼리 이력 (Query History) – 특정 워크그룹 내에서 실행된 쿼리 기록 관리
- 데이터 제한 (Data Limits) – 워크그룹별로 쿼리가 스캔할 수 있는 최대 데이터 양을 제한 가능
- IAM 정책 (IAM Policies) – 특정 워크그룹에 대한 접근 제어 및 권한 설정 가능
- 암호화 설정 (Encryption Settings) – 쿼리 결과의 암호화 방식 설정 가능
비용 모델
- 사용한 만큼 지불 (Pay-as-you-go)
- $5 per TB scanned (스캔한 데이터 1TB당 $5)
- DDL 쿼리(CREATE, ALTER, DROP 등)는 무료
- 컬럼 기반 데이터 포맷(ORC, Parquet) 사용하면 비용 30~90% 절감 가능
- Glue, S3 사용 시 추가 비용 발생
보안 및 접근 제어
- IAM, ACL, S3 버킷 정책으로 접근 제어 가능
- 기본 제공 권한: AmazonAthenaFullAccess / AWSQuicksightAthenaAccess
- 쿼리 결과 암호화 지원 (S3 서버측 암호화, KMS 키 사용 가능)
- TLS를 통한 전송 중 암호화 지원
- S3 버킷 정책을 활용한 크로스 계정 접근 가능
Athena의 비효율적인 활용 (Anti-patterns)
- 고도로 서식화된 리포트 생성 → QuickSight 사용 추천
- ETL 용도로 사용 → AWS Glue 사용 추천
Athena 성능 최적화 전략 (Optimizing performance)
- 컬럼 기반 저장 형식(ORC, Parquet) 사용
- 작은 파일 여러 개보다 큰 파일 몇 개로 저장하는 것이 성능에 유리
- 파티션 사용 (MSCK REPAIR TABLE 명령어로 추가 가능)
Athena ACID 트랜잭션 지원 (Apache Iceberg)
- Athena는 Apache Iceberg를 통해 ACID 트랜잭션을 지원
- CREATE TABLE 시 'table_type' = 'ICEBERG' 옵션 추가
- 동시 사용자가 안전하게 행 수준(row-level) 수정 가능
- EMR, Spark 등과도 호환 가능
- 레코드 잠금 기능 필요 없음
- 과거 데이터 복구(Time Travel) 기능 제공 (삭제된 데이터 복원 가능)
- 주기적인 데이터 압축 (OPTIMIZE table REWRITE DATA USING BIN_PACK)
Glue Data Catalog에 대한 Athena 세밀한 접근 제어 (Fine-Grained Access Control)
- IAM 기반 데이터베이스 및 테이블 수준 보안 설정 가능
- Lake Formation의 데이터 필터보다 더 광범위한 제한 가능
- 특정 테이블 버전에 대한 접근 제한 불가능
- IAM 정책을 활용하여 특정 데이터베이스 및 Glue Data Catalog에 대한 접근 제어 가능
- 예: DROP TABLE 권한을 제한하는 정책 설정 가능
📌 Amazon Athena는 S3 데이터를 SQL로 쉽게 분석할 수 있는 강력한 도구다. 서버리스 환경에서 빠르게 쿼리를 실행할 수 있으며, 비용 효율성을 극대화하려면 ORC, Parquet 같은 컬럼 기반 데이터 포맷과 파티션을 활용하는 것이 좋다.
📌Glue와 연동하면 메타데이터 관리 및 ETL을 보다 쉽게 수행할 수 있으며, IAM과 Lake Formation을 활용하면 세밀한 보안 정책을 설정할 수도 있다.
Amazon Athena Federated Queries
Athena Federated Queries를 사용하면 S3가 아닌 다양한 데이터 소스에서 직접 쿼리 실행이 가능하다.
1. 주요 기능
- S3 외 다른 데이터 소스에서 데이터 조회 가능
- 데이터 소스 커넥터(Data Source Connector)를 사용하여 Athena와 데이터 소스를 변환
- 커넥터는 AWS Lambda를 통해 실행됨
- AWS에서 기본 제공하는 다양한 커넥터 사용 가능
2. 지원되는 데이터 소스 예시
✔ AWS 서비스
- CloudWatch, DynamoDB, DocumentDB, RDS, OpenSearch
✔ JDBC 커넥터 기반 데이터 소스 - MySQL, PostgreSQL, SQL Server 등
✔ 서드파티(Third-party) 데이터 소스 - Cloudera, HBase, Kafka, Oracle, Snowflake, Teradata 등
3. 추가 기능 및 특징
- AWS Glue를 통해 페더레이션된 데이터 소스의 뷰(View) 저장 가능
- AWS Secrets Manager와 연동 가능
- VPC 프라이빗 엔드포인트 구성 가능
- 일부 커넥터는 AWS Glue와 통합되어 세밀한 접근 제어 지원 (Lake Formation 활용 가능)
- Redshift, BigQuery, DynamoDB, Snowflake, MySQL 등 다양한 데이터 소스 지원
- Cross-account 페더레이션 쿼리 지원 (적절한 권한 필요)
- Passthrough Queries 기능 제공 → 원본 데이터 소스의 네이티브 쿼리 언어 사용 가능
- Spark 데이터 소스로도 활용 가능
4. 예제 쿼리 (CloudWatch 로그 분석)
SELECT
log_stream AS ec2_instance,
Regexp_extract(message, '.*orderId=(\d+) .*', 1) AS orderId,
message AS order_processor_log,
Regexp_extract(message, '(.*):.*', 1) AS log_level
FROM MyCloudwatchCatalog."/var/ecommerce-engine/orderprocessor".all_log_streams
WHERE Regexp_extract(message, '(.*):.*', 1) != 'INFO';
설명
- CloudWatch 로그 데이터를 Athena에서 직접 조회
- 정규 표현식(Regexp_extract)을 사용하여 orderId 및 로그 레벨(log_level) 추출
- INFO 수준 로그 제외 후 로그 분석 수행
5. 활용 예시
- DynamoDB 데이터 분석
- CloudWatch 로그 실시간 조회
- RDS 또는 Snowflake에서 직접 데이터 조회
- 온프레미스 또는 다른 AWS 계정의 데이터 소스와 연결
📌 Athena Federated Queries를 활용하면 다양한 AWS 및 서드파티 데이터 소스에 대한 SQL 기반 쿼리를 실행하여 빠르게 분석할 수 있음.
Apache Spark
- 분산 처리 기반의 빅데이터 프레임워크
- 인메모리 캐싱(In-Memory Caching) 및 최적화된 쿼리 실행 지원
- Java, Scala, Python, R 언어 지원
- 다양한 데이터 처리 방식에 사용 가능
- Spark는 OLTP(온라인 트랜잭션 처리) 용도가 아님
활용 사례
- 배치 처리 (Batch Processing)
- 인터랙티브 쿼리 (Interactive Queries)
- Spark SQL을 통한 구조화된 데이터 처리
- 실시간 분석 (Real-Time Analytics)
- 기계 학습 (Machine Learning) – MLLib 라이브러리 제공
- 그래프 데이터 처리 (Graph Processing)
- 스트리밍 데이터 처리 (Spark Streaming)
- EMR에서 Kinesis, Kafka와 통합 가능
Spark의 작동 방식
- Spark 애플리케이션은 클러스터에서 독립적인 프로세스로 실행됨
- Driver Program(스파크 컨텍스트, SparkContext)이 전체 실행을 조정
- SparkContext는 클러스터 매니저(Spark 자체, YARN 등)를 통해 작업을 관리
- Executor(실행기)는 실제 연산을 수행하고 데이터를 저장
- SparkContext는 애플리케이션 코드 및 작업(Task)을 실행기에 전달
Spark 클러스터 구성 요소
- Driver Program: 애플리케이션 실행을 제어하는 핵심 엔진
- Cluster Manager: 리소스를 관리하고 스케줄링 (Spark Standalone, YARN 등)
- Executors: 실제 연산 수행, 데이터 캐싱, 병렬 작업 실행
Spark는 이러한 구조를 통해 대규모 데이터를 분산 처리하며 높은 성능을 제공할 수 있음.
Spark의 주요 구성 요소
1. Spark Core
- Spark의 기본 엔진으로 작동
- 메모리 관리, 장애 복구, 작업 스케줄링, 분산 및 모니터링 기능 제공
- 다양한 언어 지원: Scala, Python, Java, R
- MapReduce보다 최대 100배 빠른 성능 제공
- 다양한 데이터 소스와 연결 가능: JDBC, ODBC, JSON, HDFS, ORC, Parquet, HiveQL
2. Spark Streaming
- 실시간 스트리밍 분석 지원
- Structured Streaming을 통한 강력한 스트림 처리 기능 제공
- 지원되는 데이터 소스: Twitter, Kafka, Flume, HDFS, ZeroMQ
3. Spark SQL
- 구조화된 데이터(SQL 기반 쿼리) 처리 가능
- ETL, 데이터 분석 및 BI(Business Intelligence)용으로 활용 가능
- 다양한 스토리지와 연동: HDFS, Hive, Parquet, ORC 등
4. MLlib (Machine Learning Library)
- 기계 학습(머신러닝) 라이브러리 제공
- 주요 기능: 분류, 회귀, 군집화, 협업 필터링, 패턴 마이닝
- HDFS, HBase 등의 데이터 소스에서 읽기 가능
5. GraphX
- 그래프 데이터 처리 및 분석 가능
- ETL, 그래프 알고리즘, 반복적 그래프 연산 지원
- 하지만 최근에는 널리 사용되지 않음
Spark는 이러한 다양한 컴포넌트를 통해 실시간 데이터 처리, 기계 학습, 구조화된 데이터 분석 등 다양한 빅데이터 처리 요구를 충족할 수 있음.
Spark Structured Streaming A constantly growing DataSet
- Spark Structured Streaming은 Spark SQL 기반의 실시간 데이터 스트리밍 처리 엔진
- 데이터를 지속적으로 수신하면서 DataFrame 또는 Dataset을 처리
코드 예제 분석
val inputDF = spark.readStream.json("s3://logs")
- S3에서 JSON 형식의 스트리밍 데이터를 지속적으로 읽음
- readStream 메서드를 사용하여 스트리밍 데이터 소스로부터 DataFrame 생성
inputDF.groupBy($"action", window($"time", "1 hour")).count()
- 1시간 단위로 action 필드를 기준으로 그룹화 후 개수 집계
- window($"time", "1 hour") → 시간 기반 윈도우 집계를 수행
.writeStream.format("jdbc").start("jdbc:mysql//...")
- JDBC를 사용하여 MySQL에 스트리밍 데이터를 저장
- start()를 호출하면 스트리밍 처리가 시작됨
Structured Streaming의 주요 특징
- 배치와 동일한 코드로 스트리밍 데이터 처리 가능
- Event Time(이벤트 발생 시간) 기반 처리 가능
- Windowing(시간 창) 기능 제공
- S3, Kafka, HDFS 등 다양한 데이터 소스 지원
- JDBC, Parquet, Kafka 등 다양한 싱크(Sink)로 데이터 저장 가능
CREATE TABLE AS SELECT
- CREATE TABLE AS SELECT (CTAS)는 쿼리 결과를 기반으로 새로운 테이블을 생성하는 기능이다.
- Amazon Athena뿐만 아니라 다양한 데이터베이스에서도 사용 가능하다.
1. CTAS 기능
- 쿼리 결과를 기반으로 새로운 테이블 생성
- 기존 테이블의 부분 데이터를 추출하여 새로운 테이블 생성 가능
- 데이터의 저장 형식을 변경하는 데 활용 가능
- Amazon Athena에서 S3에 저장된 데이터를 변환하는 용도로 사용 가능
2. CTAS 사용 예시
(1) 기존 테이블에서 새로운 테이블 생성
CREATE TABLE new_table
WITH (
format = 'Parquet',
write_compression = 'SNAPPY'
) AS
SELECT * FROM old_table;
✅ old_table의 데이터를 Parquet 형식으로 변환하여 new_table을 생성한다.
✅ 데이터를 새로운 포맷으로 저장하는 변환 트릭으로 사용 가능하다.
(2) 외부 위치를 지정하여 테이블 생성
CREATE TABLE my_orc_ctas_table
WITH (
external_location = 's3://my_athena_results/my_orc_stas_table/',
format = 'ORC'
) AS
SELECT * FROM old_table;
✅ S3의 특정 위치에 ORC 형식으로 데이터를 저장한다.
✅ external_location을 설정하면 S3에서 직접 쿼리할 수 있는 테이블이 된다.
Spark Streaming + Kinesis 연동 개요
- Amazon Kinesis에서 실시간 데이터를 수집하여 Spark Streaming에서 처리
- Kinesis Producer가 데이터를 스트림으로 전송
- Spark Streaming이 Dataset 형태로 데이터를 수신하고 처리 가능
- 실시간 분석, 이벤트 기반 데이터 처리에 유용
📌 Spark Streaming과 Kinesis를 연동하면 대규모 실시간 데이터 처리 및 분석이 가능.
Spark + Redshift 연동 개요
- spark-redshift 패키지를 사용하여 Spark에서 Amazon Redshift 데이터셋을 읽고 저장 가능
- Spark SQL 데이터 소스로 활용 가능
- ETL 작업에서 Spark를 사용하여 Redshift 데이터를 변환 및 적재하는 데 유용
📌 Spark를 활용하면 Redshift 데이터를 더 빠르고 유연하게 처리할 수 있음.
Amazon Athena for Apache Spark 개요
- Jupyter Notebook을 실행할 수 있으며, Athena 콘솔에서 Spark 사용 가능
- 자동 암호화 또는 KMS(Key Management Service) 기반 암호화 지원
- 완전 서버리스(Serverless) 환경 제공
- Athena SQL 대신 Spark을 분석 엔진으로 선택 가능
- Firecracker를 사용하여 Spark 리소스를 빠르게 프로비저닝
주요 기능
- API 및 CLI 지원 : create-work-group, create-notebook, start-session, start-calculation-execution 등의 명령어 제공
- DPU(Data Processing Unit) 조정 가능 : Coordinator 및 Executor 크기 조절 가능
- 비용DPU 사용량(시간 단위) 기반 과금
📌 Athena for Apache Spark는 서버리스 환경에서 빠르게 Spark을 실행하고 분석할 수 있는 강력한 옵션.