AWS GLUE

최윤·2025년 3월 27일

AWS Glue는 서버리스(Serverless) 데이터 통합 서비스입니다. 쉽게 말해, 데이터를 크롤링하고, 변환(ETL), 이동시키는 데 특화된 플랫폼이에요.
데이터 엔지니어링 파이프라인을 자동화하고 관리하는 데 굉장히 유용하죠.

🔧 주요 기능

기능설명
ETL(Extract, Transform, Load)다양한 데이터 소스에서 데이터를 추출, 가공, 저장
크롤러 (Crawler)S3, RDS 등에서 데이터를 스캔하고, 자동으로 스키마를 생성
Data CatalogGlue가 수집한 메타데이터 저장소 (데이터베이스 + 테이블 형태)
Glue StudioGUI 기반 시각적 파이프라인 작성 도구
Job (작업)PySpark, Scala, Python 등으로 작성된 변환 작업
Trigger & Workflow파이프라인 실행 자동화 및 순서 제어

🧱 구성 요소 예시

✔ 데이터가 S3에 저장되어 있음

✔ Glue Crawler로 메타데이터 분석 → Data Catalog에 등록

✔ Glue Job으로 변환 작업 작성 (예: 날짜 필터, 포맷 변경)

✔ 결과를 다시 S3 / Redshift / RDS로 저장

✅ 특징

서버리스: 클러스터 관리할 필요 없이 자동으로 리소스 할당

Auto-scaling Spark 기반 실행

다양한 데이터 소스 지원 (S3, RDS, Redshift, JDBC, DynamoDB 등)

다양한 출력 포맷 지원 (Parquet, JSON, CSV 등)

📌 예시 시나리오

“매일 S3에 업로드된 CSV 파일을 읽어서 필요한 컬럼만 추출하고, Redshift에 저장하고 싶어요.”

→ Glue Crawler로 스키마 생성 → Glue Job으로 변환 → Glue Trigger로 자동화

💬 비유로 쉽게 말하면…

Glue는 데이터 요리사예요.
식재료(S3, RDS 등)를 찾아(Crawler), 조리법(Job)을 따라 요리(ETL)해서, 접시에 담아(Data Catalog or S3/Redshift)에 내놓는 역할을 하죠

🛠 구현 예시

시나리오 :

S3에 매일 업로드되는 CSV 파일이 있다.
이 파일에서 'price'가 100 이상인 데이터만 필터링해서
Parquet 포맷으로 다시 S3에 저장하고 싶다.

1️⃣ Glue Crawler로 테이블 생성
S3에 있는 원본 데이터 위치 지정

Crawler 실행

Glue Data Catalog에 테이블 자동 생성

예:

Database: mydb

Table: sales_data

2️⃣ Glue Job (PySpark 코드)

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

# Glue Job 파라미터 처리
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

# 스파크 및 Glue 컨텍스트 초기화
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# Data Catalog에서 데이터 불러오기
datasource = glueContext.create_dynamic_frame.from_catalog(
    database = "mydb",
    table_name = "sales_data"
)

# price가 100 이상인 데이터만 필터링
filtered_data = Filter.apply(datasource, lambda row: row["price"] >= 100)

# 결과를 Parquet 포맷으로 저장
glueContext.write_dynamic_frame.from_options(
    frame = filtered_data,
    connection_type = "s3",
    connection_options = {"path": "s3://my-output-bucket/filtered_sales/"},
    format = "parquet"
)

job.commit()

3️⃣ 실행 및 스케줄링
Glue 콘솔에서 Job을 수동 실행하거나,

Trigger를 만들어 매일 정해진 시간에 자동 실행할 수 있음

✅ 결과
원본: s3://my-bucket/sales/ (CSV)

결과: s3://my-output-bucket/filtered_sales/ (Parquet, price >= 100 필터됨)

💡 확장 아이디어
결과를 S3가 아니라 Redshift, RDS, DynamoDB 등에 저장 가능

전처리 작업을 복잡하게 설정하고 싶다면 Glue Studio에서 시각적으로 구성

여러 Job을 조합하고 싶으면 Glue Workflow 또는 Step Functions 사용

0개의 댓글