Ⅰ. Apache Spark 란?
대규모 데이터를 메모리(In-Memory) 위에서 처리하는 오픈소스 통합 분산 분석 엔진입니다. 하둡 맵리듀스가 매 단계마다 디스크에 결과를 쓰는 방식인 반면, Spark는 중간 데이터를 RAM에 유지하여 반복 연산 속도를 비약적으로 높입니다.
| 기존 방식 (Hadoop MapReduce) |
Spark 방식 (Apache Spark) |
| 매 단계 디스크 I/O 발생 | In-Memory 처리, 최대 100배 빠름 |
| 배치 처리 전용 | 배치·스트리밍·ML·그래프 통합 |
| Java 단일 언어 | Python, Scala, Java, R, SQL |
| 높은 지연 시간 | 낮은 지연, 실시간 대응 |
더 이상 단순한 배치 처리 도구가 아닙니다. 하나의 엔진으로 ETL, 실시간 스트리밍, 머신러닝, 그래프 분석을 모두 처리하는 올인원 빅데이터 플랫폼입니다.
Ⅱ. Apache Spark 주요 특징
Spark가 빅데이터 생태계의 표준이 된 데는 네 가지 핵심 강점이 있습니다.
ⅰ. 압도적 속도 (In-Memory Computing)
: 중간 결과를 메모리에 캐싱하여 반복 연산 시 MapReduce 대비 최대 100배 빠릅니다.
ⅱ. 멀티 언어
: Python(PySpark), Scala, Java, R, SQL을 모두 지원해 팀의 기술 스택에 맞게 선택 가능합니다.
ⅲ. 올인원 라이브러리
: Spark SQL, Spark Streaming, MLlib, GraphX를 단일 엔진 위에서 조합해 사용합니다.
ⅳ. 유연한 연동
: HDFS, S3, Azure Blob, Cassandra, Kafka 등 주요 데이터 소스를 모두 지원합니다.
Ⅲ. Apache Spark 동작 방식(RDD & DAG)
RDD(Resilient Distributed Dataset)라는 분산 데이터 추상화 위에서, DAG(Directed Acyclic Graph)로 실행 계획을 최적화합니다.

| 구분 | 개념 | 설명 | 예시 | 특징 |
| 1 | Transformation(변환) | 데이터를 변환하는 연산으로 즉시 실행되지 않고 실행 계획만 생성 | map(), filter(), groupBy() | Lazy (지연 실행), DAG에 누적 |
| 2 | Action (액션) | 결과를 요구하는 연산으로 이 시점에 실제 실행 발생 | collect(), count(), show() | 실행 트리거 역할 |
| 3 | DAG 실행 | Transformation들이 모여 DAG(실행 계획) 생성 후 Action 시 최적화 실행 | map → filter → groupBy | 스테이지 병합 및 최적화 수행 |
| 4 | Lineage (계보) | RDD가 생성된 과정을 추적하여 장애 시 재계산 가능 | 이전 RDD 참조 | Fault Tolerance 제공 |
| 5 | Lazy Evaluation | 연산을 미루고 한 번에 최적 실행 | 체이닝된 연산 | 불필요한 연산 제거, 성능 최적화 |
Ⅳ. Apache Spark 아키텍처 구성 및 흐름도
Driver → Cluster Manager → Worker Node의 Master-Worker 구조로 동작합니다. Driver가 전체 작업을 설계하고, Cluster Manager가 자원을 배분하며, Worker의 Executor가 실제 연산을 수행합니다.

| 구성요소 | 주요역할 | 상세 설명 |
| Driver Program | 컨트롤 타워 | 메인 함수를 실행하고 SparkContext를 생성합니다. 사용자 코드를 기반으로 DAG(작엄 흐름도)를 설계하고, 이를 태스크 단위로 쪼개어 분배합니다. |
| Cluster Manager | 자원 관리자 | CPU·메모리 등 클러스터 자원을 관리합니다. Standalone(자체 관리), YARN(하둡 연동), Kubernetes(컨테이너) 등 다양한 모드를 선택할 수 있습니다. |
| Worker Node | 실행 장소 | 실제 연산이 수행되는 물리·가상 머신입니다. 하나의 Worker에 하나 이상의 Executor가 실행됩니다. |
| Executor | 실행 프로세스 | Worker 위에서 구동되는 JVM 프로세스입니다. Task를 병렬 실행하고 중간 데이터를 메모리·디스크에 캐싱합니다. |
Ⅴ. Apache Spark 설치 방법
전제 조건: Java 8 또는 11 (JAVA_HOME 환경 변수 설정 필요), Python 3.7+ (PySpark 사용 시)
ⅰ. Spark 다운로드
: 공식 홈페이지에서 Hadoop 버전에 맞는 Pre-built 패키지를 선택합니다. (예: spark-3.5.x-bin-hadoop3.tgz)
ⅱ. 압축 해제 및 환경 변수 등록
: 원하는 경로에 압축을 풀고 Shell 설정 파일에 경로를 추가합니다.
ⅲ. 실행 확인
: 터미널에서 쉘을 실행해 정상 구동 여부를 확인합니다.
| Linux / macOS 기준 # 1. Spark 다운로드 및 압축 해제 tar -xzf spark-3.5.x-bin-hadoop3.tgz mv spark-3.5.x-bin-hadoop3 /opt/spark # 2. 환경 변수 설정 (~/.bashrc 또는 ~/.zshrc에 추가) export SPARK_HOME=/opt/spark export PATH=$PATH:$SPARK_HOME/bin export PYSPARK_PYTHON=python3 source ~/.bashrc # 3. 실행 확인 spark-shell # Scala 대화형 쉘 pyspark # Python 대화형 쉘 spark-submit --version # 버전 확인 |
Ⅵ. Apache Spark 사용 방법(PySpark)
가장 많이 사용되는 PySpark로 데이터를 읽고 변환하는 기본 패턴입니다.
(SparkSession 생성 → 데이터 로드 → 변환 → 액션) 의 흐름 입니다.
ⅰ. 기본 데이터 처리 흐름
| from pyspark.sql import SparkSession from pyspark.sql.functions import col, count # 1. SparkSession 생성 (애플리케이션 진입점) spark = SparkSession.builder \ .appName("MySparkApp") \ .config("spark.executor.memory", "4g") \ .getOrCreate() # 2. CSV 데이터 로드 (스키마 자동 추론) df = spark.read.csv("data.csv", header=True, inferSchema=True) # 3. 변환(Transformation) — 즉시 실행되지 않음 result = df.filter(col("age") > 20) \ .groupBy("city") \ .agg(count("*").alias("user_count")) \ .orderBy("user_count", ascending=False) # 4. 액션(Action) — 이 시점에 실제 실행 result.show(10) result.write.parquet("/output/city_stats") |
ⅱ. spark-submit 으로 클러스터에 제출
| # YARN 클러스터에 PySpark 잡 제출 예시 spark-submit \ --master yarn \ --deploy-mode cluster \ --num-executors 10 \ --executor-memory 8g \ --executor-cores 4 \ my_spark_app.py |
Ⅶ. Apache Spark 자주 쓰는 명령어
CLI 명령어부터 DataFrame API까지, 실무에서 매일 사용하는 명령어를 목적별로 정리했습니다.
| 명령어 | API | 설명 |
| spark-submit | CLI | 작성한 애플리케이션(.py/.jar)을 클러스터에 제출하여 실행합니다. 프로덕션 배포의 표준 방법입니다. |
| pyspark | CLI | 대화형 Python 쉘을 시작합니다. 데이터 탐색과 스크립트 프로토타이핑에 사용합니다. |
| df.show(n) | DataFrame | DataFrame의 상위 n개 행을 콘솔에 출력합니다. 기본값은 20입니다. |
| df.printSchema() | DataFrame | 컬럼명, 데이터 타입, nullable 여부를 트리 형태로 출력합니다. 데이터 확인 첫 단계에 필수입니다. |
| df.cache() | DataFrame | 자주 재사용하는 DataFrame을 메모리에 캐싱하여 반복 쿼리 성능을 높입니다. |
| df.explain() | DataFrame | Spark가 생성한 물리적 실행 계획을 출력합니다. 성능 튜닝 시 병목을 찾는 핵심 도구입니다. |
| spark.stop() | Session | SparkSession을 종료하고 클러스터 자원을 반납합니다. 잡 완료 후 반드시 호출합니다. |
Ⅷ. Apache Spark 활용 방안
Apache Spark가 실무에서 빛을 발하는 대표적인 세 가지 시나리오입니다.
ⅰ. 스트리밍(실시간 로그 분석)
: Kafka와 Spark Streaming을 연동하여 초당 수백만 이벤트를 실시간 분석합니다. 이상 트래픽 탐지, 보안 모니터링에 활용됩니다.
ⅱ. 머신러닝(대규모 ML 파이프라인)
: MLlib으로 수 테라바이트 데이터를 분산 학습합니다. 추천 시스템, 이상 탐지 모델, 클러스터링에 실전 적용됩니다.
ⅲ. ETL(데이터 웨어하우스 구축)
: 다양한 소스에서 데이터를 추출·변환·적재하는 ETL 파이프라인의 핵심 엔진으로, Iceberg·Delta Lake와 함께 레이크하우스 구조를 완성합니다.
'어플리케이션' 카테고리의 다른 글
| 웹 자동화의 표준, Selenium에 대해 알아보겠습니다. (0) | 2026.04.29 |
|---|---|
| Apache Iceberg 성능 최적화와 데이터 관리 전략 (0) | 2026.04.27 |
| 실시간 레이크하우스의 핵심 Apache Paimon 에 대해 알아보겠습니다. (0) | 2026.04.24 |
| 브루트 포스(Brute Force, 무차별 대입) 공격 완전 정복 (0) | 2026.03.05 |
| WinDbg (Windows Debugger) 에 대해 알아보겠습니다. (0) | 2026.02.20 |