티스토리 뷰

내가 헷갈린 지점

프로젝트에서 Kafka 메시지를 S3에 적재하는 단계를 설계하면서 이런 생각이 들었다.

"Kafka → S3 적재에 Spark Structured Streaming을 쓰려고 했는데 왜 AI는 Glue Streaming Job을 쓰라고하지?"

 

Glue라는 이름만 보고 Spark와 관계없는 별도 기술처럼 보였고, 둘이 다른 기술이라고 착각했다.

결론부터 말하면 Glue Structured Streaming Job은 Spark Structured Streaming 위에서 동작한다.

대립 관계가 아니라 포함 관계다.


Spark Structured Streaming이란

Apache Spark의 스트리밍 처리 API다.

Kafka 같은 메시지 큐에서 데이터를 읽어 실시간으로 처리하고 저장하는 코드를 작성하는 프레임워크다.

 

핵심 개념은 스트리밍 데이터를 "끊임없이 늘어나는 테이블"처럼 다루는 것이다. 

 

Spark에는 원래 DStream이라는 스트리밍 API가 있었는데, 배치 처리 API와 완전히 달라서 따로 배워야 했다.

Structured Streaming은 이 문제를 해결했다.

`read` → `readStream`, `write` → `writeStream`으로만 바꾸면 나머지 변환 코드는 배치와 동일하게 쓸 수 있다.

# 배치 처리
df = spark.read.parquet("s3://bucket/bronze/ad-clicks")
df.filter(df.event_type == "click").count()

# 스트리밍 처리 — filter, count 등 변환 코드는 그대로
df = spark.readStream.format("kafka") \
    .option("subscribe", "ad-clicks").load()
df.filter(df.event_type == "click").writeStream \
    .format("iceberg").start()

 

배치용으로 짠 DataFrame 코드를 스트리밍에 거의 그대로 재사용할 수 있다.

스트리밍이라고 완전히 새로운 API를 배울 필요가 없다는게 Structured Streaming의 핵심 장점이다.

 

# Spark Structured Streaming 코드 예시
df = spark.readStream \
    .format("kafka") \
    .option("kafka.bootstrap.servers", "localhost:9092") \
    .option("subscribe", "ad-clicks") \
    .load()

df.writeStream \
    .format("iceberg") \
    .outputMode("append") \
    .option("path", "s3://bucket/bronze/ad-clicks") \
    .start()

 

여기까지가 코드(프레임워크) 수준의 이야기다.

이 코드를 어디서 실행하느냐는 별개의 문제다.


AWS Glue Streaming Job이란

AWS Glue는 Spark를 관리형으로 실행해주는 서비스다.

Glue Streaming Job을 만들면 내부적으로 Spark 클러스터가 뜨고,

위에서 작성한 Spark Structured Streaming 코드가 그 위에서 돌아간다.

 

개발자가 신경 쓸 것:

  • Spark 코드 작성
  • IAM 권한 설정
  • DPU(처리 단위) 개수 설정

AWS가 대신 처리하는 것:

  • Spark 클러스터 프로비저닝
  • 노드 장애 복구
  • 체크포인트 관리
  • Spark 버전 패치

Glue 말고 Spark를 실행하는 다른 방법

Spark 코드를 실행하는 선택지는 여러가지다.

실행 환경 특징
AWS Glue 서버리스, 클러스터 관리 불필요, AWS 생태계 네이티브
AWS EMR EC2 클러스터 직접 구성, 자유도 높음, 비용 높음
Spark on EKS Kubernetes 위에서 Spark 실행, 가장 높은 자유도
Databricks Spark 특화 관리형 플랫폼, MLflow 등 생태계 풍부
로컬 Spark 개발/테스트용

이 프로젝트에서 Glue를 선택한 이유

이 프로젝트의 목표는 AWS 기반 광고 이벤트 레이크하우스 구축이다. 

 

Glue를 선택한 근거:

  • S3, Glue Data Catalog, Iceberg 네이티브 연동 -- 별도 설정 없이 바로 쓸 수 있다.
  • 서버리스 -- 클러스터 관리에 시간을 쓰지 않고 데이터 파이프라인 로직에 집중할 수 있다.
  • Free tier 범위 -- 월 10 DPU-hour 무료, 개발/테스트 단계에서 비용 없이 검증 가능

EMR이나 Spark on EKS도 같은 Spark 코드로 동작하므로, 나중에 규모가 커지면 실행 환경만 교체하면 된다.


정리

  • 헷갈렸던 것: Glue Streaming Job vs Spark Structured Streaming
  • 실제 관계: Spark Structured Streaming 코드를 AWS Glue라는 관리형 서비스 위에서 실행하는 것
Glue Streaming Job을 쓴다는 말은 Spark Structured Streaming 코드를 AWS의 관리형 Spark 서비스 위에서 실행한다는 뜻
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함