핵심 인사이트 (3줄 요약)

  1. 본질: Apache Spark는 데이터를 메모리(RAM)에 올려 병렬 연산하는 통합 분석 엔진으로, MapReduce의 디스크 I/O 병목을 제거하여 반복 처리와 실시간 처리에서 10~100배 빠른 성능을 실현한다.
  2. 가치: 배치(Spark Core)·SQL(SparkSQL)·스트리밍(Structured Streaming)·머신러닝(MLlib)·그래프(GraphX)를 단일 엔진으로 통합하여, 데이터 엔지니어·데이터 과학자·분석가 모두를 하나의 플랫폼에서 지원한다.
  3. 판단 포인트: Spark의 성능은 메모리에 의존한다. 데이터가 메모리를 초과하면 디스크로 spill이 발생하여 성능이 급격히 저하된다. 데이터 크기에 맞는 적절한 executor 메모리 설정이 Spark 튜닝의 핵심이다.

Ⅰ. 개요 및 필요성

2009년 UC Berkeley AMP Lab의 Matei Zaharia가 개발한 Spark는 MapReduce의 근본적 한계—매 처리 단계마다 디스크에 중간 결과를 쓰는 것—을 해결하기 위해 탄생했다. 특히 머신러닝의 반복 알고리즘(로지스틱 회귀, k-평균 클러스터링)은 수십~수백 번 데이터를 반복 처리하는데, MapReduce로는 각 반복마다 HDFS 읽기/쓰기가 발생하여 극도로 느렸다.

Spark의 핵심 아이디어: 메모리에 데이터를 유지한다(Keep Data In Memory). 첫 번째 읽기 시에만 디스크에서 메모리로 로딩하고, 이후 처리는 모두 메모리에서 수행한다. 100번 반복이 필요한 ML 알고리즘에서 MapReduce 대비 최대 100배 빠른 이유다.

2014년 Apache 최상위 프로젝트로 승격, 2016년 기준으로 GitHub에서 가장 활발한 빅데이터 프로젝트가 됐다. 현재 넷플릭스·우버·알리바바·어도비 등 수천 개 회사가 Spark를 핵심 데이터 처리 엔진으로 사용한다.

📢 섹션 요약 비유: Spark는 메모리(RAM)가 큰 컴퓨터를 쓰는 것과 같다. 책(데이터)을 한 번 꺼내서 책상(메모리)에 펼쳐두고 반복적으로 참조하는 것이 MapReduce처럼 매번 서가에서 꺼냈다 넣는 것보다 훨씬 빠르다.


Ⅱ. 아키텍처 및 핵심 원리

Spark 아키텍처

  ┌──────────────────────────────────────────────────────────┐
  │                    Spark 애플리케이션                      │
  ├──────────────────────────────────────────────────────────┤
  │                                                           │
  │  ┌─────────────────┐                                     │
  │  │   Driver Program │  ← 사용자 코드 실행, Job 생성        │
  │  │   SparkContext   │  ← 클러스터 연결 및 실행 조율         │
  │  └────────┬─────────┘                                     │
  │           │ Task 분배                                     │
  │           ▼                                               │
  │  ┌─────────────────────────────────────────────────────┐ │
  │  │           Cluster Manager (YARN/K8s/Standalone)      │ │
  │  └────────────────────┬────────────────────────────────┘ │
  │                        │ Executor 할당                    │
  │     ┌──────────────────┼─────────────────┐               │
  │     ▼                  ▼                 ▼               │
  │  ┌───────────┐   ┌───────────┐   ┌───────────┐          │
  │  │ Executor 1│   │ Executor 2│   │ Executor 3│          │
  │  │ (노드1)   │   │ (노드2)   │   │ (노드3)   │          │
  │  │ [Task1]   │   │ [Task3]   │   │ [Task5]   │          │
  │  │ [Task2]   │   │ [Task4]   │   │ [Task6]   │          │
  │  │ [메모리 캐시] │ [메모리 캐시] │ [메모리 캐시] │        │
  │  └───────────┘   └───────────┘   └───────────┘          │
  └──────────────────────────────────────────────────────────┘

Spark 통합 라이브러리

라이브러리용도주요 API
Spark Core기반 분산 처리, RDD 연산map, filter, reduce
Spark SQL구조화 데이터 SQL 처리DataFrame, SparkSQL
Spark Streaming실시간 스트림 처리DStream (구버전)
Structured Streaming스트림 처리 (DataFrame API)readStream, writeStream
MLlib머신러닝 알고리즘Pipeline, LinearRegression
GraphX그래프 데이터 처리Graph, Pregel

PySpark 예시 (단어 빈도)

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("WordCount") \
    .getOrCreate()

# 텍스트 파일 로드
text_df = spark.read.text("s3://mybucket/data/input.txt")

# DataFrame API로 단어 빈도 계산
from pyspark.sql.functions import explode, split, col

word_count = text_df \
    .select(explode(split(col("value"), " ")).alias("word")) \
    .groupBy("word") \
    .count() \
    .orderBy("count", ascending=False)

word_count.show(10)
word_count.write.csv("s3://mybucket/output/wordcount")

📢 섹션 요약 비유: Spark Driver는 건설 현장 감독이고, Executor는 실제 공사를 하는 인부다. 감독이 설계도(실행 계획)를 만들고 인부들에게 역할을 배분하면, 인부들이 자신의 구역(파티션)을 메모리에 올려두고 빠르게 처리한다.


Ⅲ. 비교 및 연결

Spark vs MapReduce 성능 비교

시나리오MapReduceSpark배율
단순 배치 처리기준3~5배 빠름3~5x
반복적 ML 학습기준최대 100배 빠름100x
인터랙티브 쿼리수 분수 초~수십 초10~30x
실시간 스트리밍불가가능 (마이크로 배치)

Spark 실행 모드

모드설명
Local단일 로컬 머신 (개발·테스트)
StandaloneSpark 내장 클러스터 관리자
YARN하둡 YARN 위에서 실행
KubernetesK8s 위에서 실행 (클라우드 표준)
AWS EMRAmazon 관리형 Spark
Databricks상용 최적화 Spark 플랫폼

📢 섹션 요약 비유: Spark의 실행 모드는 주차 방식과 같다. Local은 집 앞 주차(개발), YARN은 공용 주차장(하둡 클러스터), K8s는 스마트 주차 타워(클라우드 네이티브), EMR은 발렛파킹(완전 관리형)이다.


Ⅳ. 실무 적용 및 기술사 판단

Spark 성능 튜닝 핵심:

spark = SparkSession.builder \
    .config("spark.executor.memory", "8g") \  # executor 메모리
    .config("spark.executor.cores", "4") \    # executor CPU 코어
    .config("spark.default.parallelism", "200") \  # 파티션 수
    .config("spark.sql.shuffle.partitions", "200") \  # 셔플 파티션
    .config("spark.memory.fraction", "0.8") \  # 메모리 중 실행에 사용할 비율
    .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer") \
    .getOrCreate()

# 자주 사용되는 DataFrame은 cache()로 메모리에 유지
df = spark.read.parquet("s3://data/large_table/")
df.cache()  # 이후 여러 번 사용 시 재로딩 없이 메모리에서 처리
df.count()  # 이 시점에 실제 캐시 실행 (Lazy Evaluation)

데이터 스큐(Skew) 문제 해결:

# Salting 기법: 키에 랜덤 접미사 추가하여 파티션 분산
from pyspark.sql.functions import concat, lit, rand, floor

df_skewed = df.withColumn(
    "salted_key",
    concat(col("key"), lit("_"), (floor(rand() * 10)).cast("string"))
)

기술사 판단 포인트:

  • Spark의 cache() vs persist(): 기본 cache()는 메모리에만 저장, persist(StorageLevel.MEMORY_AND_DISK)는 메모리 초과 시 디스크를 사용해 유실 방지.
  • 파티션 수 = 병렬 처리 단위. 파티션이 너무 적으면 병렬화 부족, 너무 많으면 스케줄링 오버헤드. 데이터 크기 / 파티션 크기(100~500MB) 공식으로 설정.
  • Databricks는 Delta Lake + Photon(최적화 실행 엔진)으로 오픈소스 Spark보다 2~3배 빠른 성능을 제공한다.

📢 섹션 요약 비유: Spark의 cache()는 자주 보는 책을 서가에서 꺼내 책상 위에 항상 펼쳐두는 것과 같다. 처음 한 번만 들고 오면, 이후엔 손만 뻗으면 된다.


Ⅴ. 기대효과 및 결론

기대효과설명
10~100배 빠른 처리메모리 기반 연산으로 MapReduce 대비 극적 속도 향상
통합 플랫폼배치·스트리밍·ML·SQL을 단일 API로 처리
풍부한 언어 지원Python·Scala·Java·R·SQL 모두 지원
클라우드 최적화AWS EMR·GCP Dataproc·Databricks 완전 통합

Apache Spark는 현재 빅데이터 처리의 사실상 표준(De facto Standard)이다. 메모리 기반 처리, 통합 API, 광범위한 클라우드 지원으로 데이터 엔지니어링·데이터 과학의 핵심 도구가 됐다. Spark를 이해하면 현대 데이터 파이프라인의 80%를 이해한 것이다.

📢 섹션 요약 비유: Spark는 빅데이터 처리의 스마트폰이다. 전화(배치)·인터넷(SQL)·카메라(ML)를 하나의 기기로 처리하듯, 모든 데이터 처리를 하나의 플랫폼에서 처리한다.


📌 관련 개념 맵

개념연결 포인트
RDDSpark의 핵심 데이터 모델, 분산 불변 데이터셋
DataFrame / DatasetRDD의 진화, 스키마 기반 최적화
지연 평가 (Lazy Evaluation)Spark 최적화의 핵심 메커니즘
YARN / KubernetesSpark 실행을 위한 클러스터 관리 레이어
Databricks상용 최적화 Spark 플랫폼, Delta Lake 창시자
Structured Streaming실시간 데이터 처리, 카프카 소스 통합

👶 어린이를 위한 3줄 비유 설명

  1. Spark는 책(데이터)을 서가에서 꺼낼 때마다 원위치시키는 MapReduce와 달리, 자주 보는 책은 책상 위에 계속 펼쳐두어서(메모리 캐시) 훨씬 빠르게 찾을 수 있어.

📈 관련 키워드 및 발전 흐름도

MapReduce: 단계마다 디스크 I/O (느림)
    │
    ▼
Spark: In-Memory 처리 (DAG 기반 실행 계획)
    ├─► Spark SQL · DataFrame: 구조화 데이터
    ├─► Spark Streaming: 마이크로배치 스트리밍
    └─► MLlib · GraphX: ML + 그래프 연산
    │
    ▼
Spark on K8s · Databricks Lakehouse
  1. 배치 처리도, SQL 쿼리도, 머신러닝도, 실시간 분석도 모두 Spark 하나로 할 수 있어. 스위스 군용 칼처럼 다기능이야.
  2. 단, 책상이(메모리가) 작은데 너무 많은 책을 올리면 바닥에 쌓이게 되어(디스크 spill) 다시 느려지니까, 책상 크기에 맞게 조절해야 해.