<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>개념 이해 on Advanced Beginner</title><link>https://advanced-beginner.github.io/ko/docs/spark/concepts/</link><description>Recent content in 개념 이해 on Advanced Beginner</description><generator>Hugo</generator><language>ko-KR</language><managingEditor>d8lzz1gpw@mozmail.com (kimbenji)</managingEditor><webMaster>d8lzz1gpw@mozmail.com (kimbenji)</webMaster><lastBuildDate>Mon, 23 Mar 2026 19:08:15 +0900</lastBuildDate><atom:link href="https://advanced-beginner.github.io/ko/docs/spark/concepts/index.xml" rel="self" type="application/rss+xml"/><item><title>아키텍처</title><link>https://advanced-beginner.github.io/ko/docs/spark/concepts/architecture/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/concepts/architecture/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;Spark는 Driver(조율자) + Executor(작업자) + Cluster Manager(리소스 관리)로 구성&lt;/li&gt;
&lt;li&gt;모든 Transformation은 DAG로 표현되고, Action 호출 시 Job → Stage → Task로 분할되어 실행&lt;/li&gt;
&lt;li&gt;메모리는 Execution(연산)과 Storage(캐시)가 동적으로 공유하는 Unified Memory 모델 사용&lt;/li&gt;
&lt;li&gt;Java/Spring 개발자에게 SparkSession은 Spring Container, Executor는 Thread Pool Worker와 유사&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;: Java/Spring 기반 백엔드 개발 경험이 있는 개발자&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;선수 지식&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Java 기본 문법 및 JVM 메모리 구조 이해&lt;/li&gt;
&lt;li&gt;멀티스레딩 기초 개념 (Thread, ExecutorService)&lt;/li&gt;
&lt;li&gt;분산 시스템의 기본 개념 (선택 사항)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;소요 시간&lt;/strong&gt;: 약 25-30분&lt;/p&gt;</description></item><item><title>RDD 기초</title><link>https://advanced-beginner.github.io/ko/docs/spark/concepts/rdd/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/concepts/rdd/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;RDD(Resilient Distributed Dataset)는 분산 불변 데이터 컬렉션으로 Spark의 기본 데이터 추상화&lt;/li&gt;
&lt;li&gt;Transformation(지연 평가)과 Action(즉시 실행)으로 데이터 처리&lt;/li&gt;
&lt;li&gt;Lineage를 통해 장애 발생 시 자동 복구 가능&lt;/li&gt;
&lt;li&gt;현재는 DataFrame/Dataset을 권장하지만, 저수준 제어가 필요할 때 RDD 사용&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;: Java/Spring 개발자, Spark 기본 개념을 학습하려는 초급자&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;선수 지식&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Java 컬렉션 API (List, Map 등)&lt;/li&gt;
&lt;li&gt;람다 표현식 및 함수형 프로그래밍 기초&lt;/li&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/architecture/"&gt;아키텍처&lt;/a&gt; 문서 이해&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;소요 시간&lt;/strong&gt;: 약 25-30분&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;RDD는 Spark의 가장 기본적인 데이터 추상화입니다. DataFrame과 Dataset의 기반이 되는 저수준 API로, Spark의 동작 원리를 이해하는 데 필수적입니다.&lt;/p&gt;</description></item><item><title>DataFrame과 Dataset</title><link>https://advanced-beginner.github.io/ko/docs/spark/concepts/dataframe-dataset/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/concepts/dataframe-dataset/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;DataFrame은 스키마가 있는 분산 테이블, Dataset은 타입 안전한 분산 컬렉션&lt;/li&gt;
&lt;li&gt;Java에서 DataFrame = &lt;code&gt;Dataset&amp;lt;Row&amp;gt;&lt;/code&gt;, 타입 Dataset = &lt;code&gt;Dataset&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Catalyst Optimizer를 통한 자동 최적화로 RDD보다 성능 우수&lt;/li&gt;
&lt;li&gt;SQL 스타일 작업은 DataFrame, 복잡한 비즈니스 로직은 Dataset 권장&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;: Java/Spring 개발자, Spark 데이터 처리를 시작하는 중급자&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;선수 지식&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Java Generics 및 함수형 인터페이스 (Function, Consumer 등)&lt;/li&gt;
&lt;li&gt;SQL 기본 문법 (SELECT, WHERE, GROUP BY)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/rdd/"&gt;RDD 기초&lt;/a&gt; 문서 이해 권장&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;소요 시간&lt;/strong&gt;: 약 25-30분&lt;/p&gt;</description></item><item><title>Spark SQL</title><link>https://advanced-beginner.github.io/ko/docs/spark/concepts/spark-sql/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/concepts/spark-sql/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;Spark SQL은 SQL 문법으로 DataFrame을 쿼리할 수 있는 모듈&lt;/li&gt;
&lt;li&gt;Catalyst Optimizer가 4단계(Analysis → Optimization → Planning → CodeGen)로 쿼리 최적화&lt;/li&gt;
&lt;li&gt;AQE(Adaptive Query Execution)로 런타임 최적화 (Spark 3.0+)&lt;/li&gt;
&lt;li&gt;DataFrame API와 SQL은 동일한 실행 엔진 사용, 성능 차이 없음&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;: SQL에 익숙한 데이터 엔지니어 및 분석가&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;선수 지식&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;표준 SQL 문법 (SELECT, JOIN, GROUP BY, Window 함수)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/dataframe-dataset/"&gt;DataFrame과 Dataset&lt;/a&gt; 기본 이해&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;소요 시간&lt;/strong&gt;: 약 25-30분&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Spark SQL은 구조화된 데이터 처리를 위한 Spark 모듈입니다. SQL 쿼리와 DataFrame API를 모두 지원하며, 동일한 실행 엔진(Catalyst Optimizer)을 사용합니다.&lt;/p&gt;</description></item><item><title>Transformation과 Action</title><link>https://advanced-beginner.github.io/ko/docs/spark/concepts/transformations-actions/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/concepts/transformations-actions/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;Transformation은 지연 평가(Lazy)되어 DAG에 추가만 됨&lt;/li&gt;
&lt;li&gt;Action 호출 시 전체 DAG가 실행되어 Job 생성&lt;/li&gt;
&lt;li&gt;Narrow(셔플 없음) vs Wide(셔플 발생) Transformation 구분이 성능 핵심&lt;/li&gt;
&lt;li&gt;같은 DataFrame을 여러 번 사용하면 매번 재계산 → 캐싱 필요&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;: Spark 연산의 실행 시점을 이해하고자 하는 개발자&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;선수 지식&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/architecture/"&gt;아키텍처&lt;/a&gt; 문서의 Job, Stage, Task 개념&lt;/li&gt;
&lt;li&gt;Java Stream API의 지연 평가 개념&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;소요 시간&lt;/strong&gt;: 약 25-30분&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Spark의 모든 연산은 &lt;strong&gt;Transformation&lt;/strong&gt;과 &lt;strong&gt;Action&lt;/strong&gt; 두 가지로 분류됩니다. 이 구분을 이해하는 것이 Spark 프로그래밍의 핵심입니다.&lt;/p&gt;</description></item><item><title>파티셔닝과 셔플</title><link>https://advanced-beginner.github.io/ko/docs/spark/concepts/partitioning/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/concepts/partitioning/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;파티션은 데이터의 논리적 분할 단위, 각 파티션이 하나의 Task로 처리&lt;/li&gt;
&lt;li&gt;셔플은 파티션 간 데이터 재분배로 Spark에서 가장 비용이 높은 연산&lt;/li&gt;
&lt;li&gt;권장 파티션 크기: 100&lt;del&gt;200MB, 파티션 수 = 코어 수 x 2&lt;/del&gt;4&lt;/li&gt;
&lt;li&gt;AQE(Spark 3.0+)가 런타임에 파티션 수 자동 조정&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;: Spark 성능 튜닝을 시작하는 데이터 엔지니어&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;선수 지식&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/architecture/"&gt;아키텍처&lt;/a&gt; 문서의 Stage, Task 개념&lt;/li&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/transformations-actions/"&gt;Transformation과 Action&lt;/a&gt;의 Wide/Narrow 구분&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;소요 시간&lt;/strong&gt;: 약 25-30분&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;파티셔닝은 Spark 성능의 핵심입니다. 데이터가 어떻게 분산되는지 이해하고 최적화하는 것이 대규모 데이터 처리의 관건입니다.&lt;/p&gt;</description></item><item><title>캐싱과 영속성</title><link>https://advanced-beginner.github.io/ko/docs/spark/concepts/caching/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/concepts/caching/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;cache() = persist(MEMORY_ONLY), 여러 Action에서 재사용할 데이터 캐싱&lt;/li&gt;
&lt;li&gt;Storage Level: MEMORY_ONLY(빠름), MEMORY_AND_DISK(안정), *_SER(메모리 절약)&lt;/li&gt;
&lt;li&gt;캐시는 첫 Action 시 저장되고, unpersist()로 해제&lt;/li&gt;
&lt;li&gt;체크포인트는 Lineage를 끊어 장애 복구와 긴 계보 문제 해결&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;: 반복 연산 최적화가 필요한 데이터 엔지니어&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;선수 지식&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/transformations-actions/"&gt;Transformation과 Action&lt;/a&gt; 지연 평가 이해&lt;/li&gt;
&lt;li&gt;JVM 메모리 구조 기초&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;소요 시간&lt;/strong&gt;: 약 25-30분&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Spark의 인메모리 컴퓨팅 능력을 활용하여 중간 결과를 캐시하고 재사용하는 방법을 알아봅니다.&lt;/p&gt;
&lt;h2 id="비유로-이해하는-캐싱"&gt;비유로 이해하는 캐싱&lt;a class="anchor" href="#%eb%b9%84%ec%9c%a0%eb%a1%9c-%ec%9d%b4%ed%95%b4%ed%95%98%eb%8a%94-%ec%ba%90%ec%8b%b1"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;개념&lt;/th&gt;
 &lt;th&gt;비유&lt;/th&gt;
 &lt;th&gt;핵심 아이디어&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;cache()&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;자주 쓰는 재료 냉장고 보관&lt;/td&gt;
 &lt;td&gt;매번 장 보러 가는 대신 냉장고에서 바로 꺼내 사용&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;persist()&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;보관 위치 선택&lt;/td&gt;
 &lt;td&gt;냉장고(메모리) vs 창고(디스크) vs 진공포장(직렬화)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;MEMORY_ONLY&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;냉장 보관&lt;/td&gt;
 &lt;td&gt;빠르게 꺼내 쓰지만 공간 많이 차지&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;MEMORY_AND_DISK&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;냉장고 + 창고&lt;/td&gt;
 &lt;td&gt;냉장고 가득 차면 창고로 이동&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;직렬화 (_SER)&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;진공 포장&lt;/td&gt;
 &lt;td&gt;부피는 줄지만 사용 시 포장 해체 시간 필요&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;checkpoint&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;요리 중간 상태 사진 촬영&lt;/td&gt;
 &lt;td&gt;실수해도 사진 시점부터 다시 시작 가능&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;unpersist()&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;냉장고 정리&lt;/td&gt;
 &lt;td&gt;안 쓰는 재료 치워서 공간 확보&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;핵심 원리&lt;/strong&gt;: 캐싱은 &amp;ldquo;계산 시간&amp;quot;과 &amp;ldquo;저장 공간&amp;quot;을 교환하는 것입니다. 자주 사용하는 데이터는 저장해두고, 한 번만 쓰는 데이터는 매번 계산하는 게 효율적입니다.&lt;/p&gt;</description></item><item><title>Structured Streaming</title><link>https://advanced-beginner.github.io/ko/docs/spark/concepts/structured-streaming/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/concepts/structured-streaming/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;Structured Streaming은 스트림을 무한히 추가되는 테이블로 처리&lt;/li&gt;
&lt;li&gt;배치와 동일한 DataFrame API 사용 (readStream/writeStream만 변경)&lt;/li&gt;
&lt;li&gt;Output Mode: append(새 행), complete(전체), update(변경분)&lt;/li&gt;
&lt;li&gt;Watermark로 늦게 도착하는 데이터(late data) 처리&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;: 실시간 데이터 처리가 필요한 데이터 엔지니어&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;선수 지식&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/dataframe-dataset/"&gt;DataFrame과 Dataset&lt;/a&gt; API&lt;/li&gt;
&lt;li&gt;Kafka 기본 개념 (선택 사항)&lt;/li&gt;
&lt;li&gt;이벤트 시간 vs 처리 시간 개념&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;소요 시간&lt;/strong&gt;: 약 25-30분&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Structured Streaming은 Spark의 스트림 처리 엔진입니다. 배치 처리와 동일한 DataFrame/Dataset API를 사용하여 실시간 데이터를 처리합니다.&lt;/p&gt;</description></item><item><title>MLlib</title><link>https://advanced-beginner.github.io/ko/docs/spark/concepts/mllib/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/concepts/mllib/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;MLlib은 DataFrame 기반 분산 머신러닝 라이브러리 (spark.ml 패키지)&lt;/li&gt;
&lt;li&gt;Pipeline으로 전처리 → 학습 → 예측 단계를 연결&lt;/li&gt;
&lt;li&gt;Transformer(변환), Estimator(학습), Evaluator(평가) 패턴&lt;/li&gt;
&lt;li&gt;CrossValidator/TrainValidationSplit로 하이퍼파라미터 튜닝&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;: 대규모 데이터에서 머신러닝을 수행하려는 ML 엔지니어&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;선수 지식&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/dataframe-dataset/"&gt;DataFrame과 Dataset&lt;/a&gt; API&lt;/li&gt;
&lt;li&gt;머신러닝 기본 개념 (분류, 회귀, 클러스터링)&lt;/li&gt;
&lt;li&gt;특성 공학(Feature Engineering) 기초&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;소요 시간&lt;/strong&gt;: 약 25-30분&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;MLlib은 Spark의 분산 머신러닝 라이브러리입니다. 대규모 데이터셋에서 머신러닝 모델을 학습하고 예측할 수 있습니다.&lt;/p&gt;
&lt;h2 id="비유로-이해하는-mllib"&gt;비유로 이해하는 MLlib&lt;a class="anchor" href="#%eb%b9%84%ec%9c%a0%eb%a1%9c-%ec%9d%b4%ed%95%b4%ed%95%98%eb%8a%94-mllib"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;개념&lt;/th&gt;
 &lt;th&gt;비유&lt;/th&gt;
 &lt;th&gt;핵심 아이디어&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Transformer&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;재료 손질사&lt;/td&gt;
 &lt;td&gt;원재료(데이터)를 조리 가능한 형태로 변환. 학습 없이 규칙대로 처리&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Estimator&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;요리사&lt;/td&gt;
 &lt;td&gt;레시피(알고리즘)로 연습(학습)하여 실력(모델)을 갖춤&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Model&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;숙련된 요리사&lt;/td&gt;
 &lt;td&gt;학습 완료된 상태. 새 재료가 와도 바로 요리(예측) 가능&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Pipeline&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;조리 라인&lt;/td&gt;
 &lt;td&gt;재료 손질 → 양념 → 조리 → 플레이팅을 하나로 연결&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Evaluator&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;음식 평론가&lt;/td&gt;
 &lt;td&gt;완성된 요리(모델)의 품질(정확도)을 평가&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;CrossValidator&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;맛 테스트 반복&lt;/td&gt;
 &lt;td&gt;여러 번 맛보고 가장 좋은 레시피(하이퍼파라미터) 선택&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Feature Vector&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;표준화된 재료 목록&lt;/td&gt;
 &lt;td&gt;모든 재료를 동일한 형식(벡터)으로 정리&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;핵심 원리&lt;/strong&gt;: MLlib은 &amp;ldquo;전처리 → 학습 → 예측 → 평가&amp;quot;의 반복 가능한 파이프라인을 구축하여, 대규모 데이터에서도 일관된 ML 워크플로우를 제공합니다.&lt;/p&gt;</description></item><item><title>성능 튜닝</title><link>https://advanced-beginner.github.io/ko/docs/spark/concepts/tuning/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/concepts/tuning/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;튜닝 순서: 코드 최적화 → 데이터 구조 → 리소스 설정 → 세부 설정&lt;/li&gt;
&lt;li&gt;핵심 전략: 셔플 최소화, 조기 필터링, Broadcast Join, 캐싱&lt;/li&gt;
&lt;li&gt;Executor 권장: 코어당 5GB, 4~5코어가 최적&lt;/li&gt;
&lt;li&gt;AQE + Kryo 직렬화 + 적절한 파티션 수가 기본 설정&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;: 프로덕션 Spark 워크로드를 최적화하는 시니어 엔지니어&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;선수 지식&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/partitioning/"&gt;파티셔닝과 셔플&lt;/a&gt; 이해&lt;/li&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/caching/"&gt;캐싱과 영속성&lt;/a&gt; 이해&lt;/li&gt;
&lt;li&gt;Spark UI 기본 사용법&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;소요 시간&lt;/strong&gt;: 약 25-30분&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Spark 애플리케이션의 성능을 최적화하는 전략과 구체적인 설정 방법을 알아봅니다.&lt;/p&gt;</description></item><item><title>배포와 클러스터 관리</title><link>https://advanced-beginner.github.io/ko/docs/spark/concepts/deployment/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/concepts/deployment/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;클러스터 매니저: Local(개발), Standalone(소규모), YARN(Hadoop), K8s(클라우드)&lt;/li&gt;
&lt;li&gt;배포 모드: Client(디버깅), Cluster(프로덕션)&lt;/li&gt;
&lt;li&gt;동적 할당으로 워크로드에 따라 Executor 자동 조절&lt;/li&gt;
&lt;li&gt;Fat JAR로 의존성 포함하여 spark-submit 실행&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;: Spark 클러스터를 운영하는 DevOps/플랫폼 엔지니어&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;선수 지식&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/architecture/"&gt;아키텍처&lt;/a&gt; 문서의 Driver/Executor 개념&lt;/li&gt;
&lt;li&gt;Docker/Kubernetes 기초 (K8s 배포 시)&lt;/li&gt;
&lt;li&gt;Hadoop YARN 기초 (YARN 배포 시)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;소요 시간&lt;/strong&gt;: 약 25-30분&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Spark 애플리케이션을 다양한 클러스터 환경에 배포하고 관리하는 방법을 알아봅니다.&lt;/p&gt;
&lt;h2 id="비유로-이해하는-배포"&gt;비유로 이해하는 배포&lt;a class="anchor" href="#%eb%b9%84%ec%9c%a0%eb%a1%9c-%ec%9d%b4%ed%95%b4%ed%95%98%eb%8a%94-%eb%b0%b0%ed%8f%ac"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;개념&lt;/th&gt;
 &lt;th&gt;비유&lt;/th&gt;
 &lt;th&gt;핵심 아이디어&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Local 모드&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;1인 식당 운영&lt;/td&gt;
 &lt;td&gt;주방장(Driver)이 혼자 요리(Executor 역할)도 함. 빠른 테스트용&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Standalone&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;소규모 자체 주방&lt;/td&gt;
 &lt;td&gt;직접 관리하는 주방. 간단하지만 확장에 한계&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;YARN&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;대형 호텔 총괄 주방&lt;/td&gt;
 &lt;td&gt;호텔(Hadoop) 전체 리소스를 관리하는 주방장이 따로 있음&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Kubernetes&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;푸드코트 공유 주방&lt;/td&gt;
 &lt;td&gt;컨테이너 단위로 공간 임대. 유연하게 확장/축소 가능&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Client 모드&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;주방장이 손님 옆에서 조리&lt;/td&gt;
 &lt;td&gt;바로 피드백 가능하지만, 손님(클라이언트)이 떠나면 요리 중단&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Cluster 모드&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;주방장이 백주방에서 조리&lt;/td&gt;
 &lt;td&gt;손님이 떠나도 요리 계속. 완성되면 전달&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;동적 할당&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;바쁠 때만 알바생 추가&lt;/td&gt;
 &lt;td&gt;주문량(워크로드)에 따라 인력 자동 조절&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;핵심 원리&lt;/strong&gt;: 배포 환경 선택은 &amp;ldquo;기존 인프라&amp;rdquo;, &amp;ldquo;확장 요구&amp;rdquo;, &amp;ldquo;운영 복잡도&amp;quot;의 균형점을 찾는 것입니다.&lt;/p&gt;</description></item><item><title>Spark Connect</title><link>https://advanced-beginner.github.io/ko/docs/spark/concepts/spark-connect/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/concepts/spark-connect/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;Spark Connect는 gRPC 기반 클라이언트-서버 분리 아키텍처 (Spark 3.4+)&lt;/li&gt;
&lt;li&gt;경량 클라이언트(~10MB)로 원격 Spark 클러스터 접근&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SparkSession.builder().remote(&amp;quot;sc://host:port&amp;quot;)&lt;/code&gt; 로 연결&lt;/li&gt;
&lt;li&gt;DataFrame API 완전 지원, RDD API/Streaming은 제한적&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;: 마이크로서비스 환경에서 Spark를 사용하려는 개발자&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;선수 지식&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/architecture/"&gt;아키텍처&lt;/a&gt; 문서의 Driver/Executor 개념&lt;/li&gt;
&lt;li&gt;gRPC 기본 개념 (선택 사항)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/spark/concepts/dataframe-dataset/"&gt;DataFrame과 Dataset&lt;/a&gt; API&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;소요 시간&lt;/strong&gt;: 약 25-30분&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Spark Connect는 Spark 3.4에서 도입된 새로운 클라이언트-서버 아키텍처입니다. 씬 클라이언트(Thin Client)로 원격 Spark 클러스터에 연결할 수 있습니다.&lt;/p&gt;
&lt;h2 id="비유로-이해하는-spark-connect"&gt;비유로 이해하는 Spark Connect&lt;a class="anchor" href="#%eb%b9%84%ec%9c%a0%eb%a1%9c-%ec%9d%b4%ed%95%b4%ed%95%98%eb%8a%94-spark-connect"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;개념&lt;/th&gt;
 &lt;th&gt;비유&lt;/th&gt;
 &lt;th&gt;핵심 아이디어&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;기존 방식&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;자가용 직접 운전&lt;/td&gt;
 &lt;td&gt;내 차(Driver)에 모든 장비 실어서 직접 운전. 차가 고장나면 여행 중단&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Spark Connect&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;택시 호출&lt;/td&gt;
 &lt;td&gt;스마트폰(Thin Client)으로 택시(서버) 호출. 기사(Driver)가 목적지까지 데려다줌&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;gRPC&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;무전기 통신&lt;/td&gt;
 &lt;td&gt;표준화된 통신 규약으로 어떤 택시든 같은 방식으로 호출&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Thin Client&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;가벼운 스마트폰 앱&lt;/td&gt;
 &lt;td&gt;목적지만 입력하면 됨. 내비게이션은 택시 기사가 알아서&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;서버 업그레이드&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;택시 회사 차량 교체&lt;/td&gt;
 &lt;td&gt;앱 업데이트 없이 새 차량(Spark 버전) 이용 가능&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;핵심 원리&lt;/strong&gt;: Spark Connect는 &amp;ldquo;무거운 연산 로직&amp;quot;을 클라이언트에서 서버로 분리합니다. 클라이언트는 &amp;ldquo;무엇을 원하는지&amp;quot;만 전달하고, 서버가 &amp;ldquo;어떻게 할지&amp;quot;를 결정합니다.&lt;/p&gt;</description></item></channel></rss>