Skip to main content
이 문서는 선행 지식 섹션의 일부입니다.

현재 빅데이터 생태계의 전체 그림

빅데이터 생태계는 매우 넓고 다양한 도구들이 존재합니다. 이 문서에서는 각 영역별로 어떤 솔루션이 있고, 주요 벤더들이 어떤 포지션을 차지하고 있는지 정리해 드리겠습니다.
💡 왜 생태계를 알아야 하나요? Databricks를 사용하더라도 주변 도구들과 연동하는 경우가 많습니다. “우리 팀은 이미 Kafka를 쓰고 있는데, Databricks와 어떻게 연결하나요?” “기존 Tableau 대시보드를 Databricks SQL과 연결할 수 있나요?” 같은 질문에 답하려면, 전체 생태계를 알아야 합니다. 또한 기술 선택 회의에서 “왜 Databricks인가?”를 설명하려면, 경쟁 도구들의 강점과 약점을 이해하고 있어야 합니다.

빅데이터의 등장 배경

전통 RDBMS의 한계

관계형 데이터베이스(RDBMS, Relational Database Management System)는 수십 년간 기업 데이터를 관리해온 핵심 기술입니다. Oracle, MySQL, PostgreSQL 같은 시스템은 엄격한 스키마(Schema), ACID 트랜잭션, SQL 기반 조회를 제공하며 OLTP(Online Transaction Processing) 워크로드에 최적화되어 있습니다. 그러나 인터넷이 확산되고 모바일 기기가 폭발적으로 증가하면서, 전통 RDBMS가 처리하기 어려운 새로운 데이터 특성이 등장했습니다.

3V: 빅데이터를 정의하는 세 가지 특성

2001년 Gartner의 애널리스트 Doug Laney가 제안한 3V 프레임워크는 빅데이터를 정의하는 가장 널리 사용되는 모델입니다. 이후 Veracity (정확성), Value (가치) 를 추가한 5V 모델로 발전했지만, 핵심은 동일합니다. 기존 RDBMS로는 이 특성들을 모두 만족시키기 어려웠고, 이를 해결하기 위한 새로운 기술들이 등장했습니다.
💡 실무에서의 관점: “우리 데이터가 빅데이터인가요?”라는 질문을 자주 받습니다. 절대적인 크기보다 “현재 도구로 처리하기 어려운가?” 가 더 실용적인 기준입니다. 수십 GB라도 초당 처리해야 한다면 빅데이터 기술이 필요하고, 수 TB라도 월 1회 배치 처리라면 기존 도구로 충분할 수 있습니다.

Hadoop 생태계

Hadoop의 등장

2004년 Google이 발표한 두 편의 논문이 분산 처리의 패러다임을 바꿨습니다.
  • GFS (Google File System): 수천 대의 범용 서버에 데이터를 분산 저장하는 방법
  • MapReduce: 분산된 데이터를 병렬로 처리하는 프로그래밍 모델
Yahoo!의 Doug Cutting과 Mike Cafarella는 이 논문을 기반으로 오픈소스 구현체인 Apache Hadoop 을 만들었습니다(2006년). 이후 Facebook, LinkedIn, Twitter 등 주요 인터넷 기업들이 Hadoop을 채택하면서 빅데이터 시대가 열렸습니다.

Hadoop의 핵심 컴포넌트

Hadoop 클러스터 구조 HDFS (Hadoop Distributed File System) HDFS는 데이터를 128MB 단위의 블록(Block)으로 나누어 여러 DataNode에 분산 저장합니다. 기본적으로 각 블록을 3개 노드에 복제(Replication Factor=3)하여 내결함성(Fault Tolerance)을 확보합니다.
  • NameNode: 파일 시스템의 메타데이터(어떤 블록이 어느 노드에 있는지)를 관리하는 마스터 노드
  • DataNode: 실제 데이터 블록을 저장하는 워커 노드
  • 한계: NameNode가 단일 장애점(SPOF, Single Point of Failure)이며, 소규모 파일을 많이 저장하면 메타데이터 과부하가 발생합니다
MapReduce MapReduce는 두 단계로 데이터를 처리합니다. YARN (Yet Another Resource Negotiator) YARN은 Hadoop 2.0에서 도입된 리소스 관리 레이어입니다. 클러스터의 CPU와 메모리 자원을 관리하고, MapReduce 외의 다른 처리 프레임워크(Spark, Tez 등)도 Hadoop 위에서 실행할 수 있게 합니다.

Hadoop의 한계 — 왜 Spark로 넘어갔는가

Hadoop은 혁신적이었지만, 실무에서는 심각한 단점이 있었습니다.
💡 역사적 맥락: 2010년대 초 Hadoop을 운영한 엔지니어라면 “Container killed by YARN for exceeding memory limits” 에러를 수도 없이 보았을 것입니다. 또한 Hive에서 간단한 JOIN 쿼리를 실행하면 수십 분이 걸리는 것이 당연했습니다. 이런 고통이 Spark의 등장을 환영받게 만들었습니다.

Apache Spark — 왜 100배 빠른가

Spark의 탄생

Apache Spark는 2009년 UC Berkeley AMPLab에서 Matei Zaharia가 박사 연구 프로젝트로 시작했습니다. “MapReduce의 반복 처리 문제를 인메모리(In-Memory) 처리로 해결하자”는 아이디어가 출발점이었습니다. 2014년 Apache Top-Level 프로젝트로 승격되었고, 같은 해 Matei Zaharia를 포함한 창업자들이 Databricks 를 설립하여 Spark의 상용 플랫폼을 만들었습니다.

MapReduce 대비 100배 빠른 이유

1. 인메모리 처리 (In-Memory Processing) Spark의 가장 큰 혁신은 중간 결과를 메모리(RAM)에 저장한다는 점입니다. MapReduce는 모든 중간 결과를 디스크에 기록하지만, Spark는 가능한 한 메모리에 유지합니다.
메모리 접근 속도는 디스크 대비 수십~수백 배 빠릅니다. ML처럼 같은 데이터를 100번 반복하는 작업에서는 이 차이가 더욱 극명하게 나타납니다. 2. DAG (Directed Acyclic Graph) 실행 계획 Spark는 작업 전체를 DAG 로 표현하고, Catalyst Optimizer가 최적의 실행 계획을 수립한 뒤 한 번에 실행합니다.
반면 MapReduce는 작업을 독립된 Map-Reduce 쌍으로 표현하기 때문에, 복잡한 쿼리를 여러 개의 MapReduce 잡으로 나눠야 하고 각각 디스크를 경유해야 합니다. 3. Lazy Evaluation (지연 실행) Spark는 변환(Transformation) 명령을 즉시 실행하지 않고, 실제 결과가 필요한 액션(Action)이 호출될 때 한 번에 처리합니다. 이를 통해 불필요한 연산을 최소화하고 최적화 기회를 극대화합니다.

RDD → DataFrame → Dataset 진화

Spark의 API는 세 단계를 거쳐 발전했습니다. RDD (Resilient Distributed Dataset) — Spark 1.0 RDD는 Spark의 가장 기본적인 데이터 구조입니다. 분산된 불변(Immutable) 데이터 컬렉션으로, 파티션 단위로 클러스터 노드에 분산됩니다.
  • 장점: 완전한 제어권, 타입 안전성(Type Safety), 복잡한 커스텀 로직 구현 가능
  • 단점: 최적화를 개발자가 수동으로 해야 함, verbose한 코드, SQL과 연동 어려움
DataFrame — Spark 1.3 (2015년) DataFrame은 이름이 있는 컬럼으로 구성된 분산 데이터셋입니다. pandas DataFrame과 유사한 개념이지만, 클러스터에서 분산 처리됩니다. Catalyst Optimizer 가 자동으로 실행 계획을 최적화하여 RDD보다 빠른 경우도 많습니다.
  • 장점: SQL과 완벽하게 통합, 자동 최적화, 직관적인 API
  • 단점: 컴파일 타임 타입 체크 없음 (Python/R에서는 런타임에 오류 발견)
Dataset — Spark 1.6 (Scala/Java 전용) Dataset은 DataFrame의 타입 안전성 버전입니다. Scala/Java에서 사용 가능하며, 컴파일 타임에 타입 오류를 잡을 수 있습니다. Python에서는 DataFrame이 사실상 Dataset과 동일하게 동작합니다.
💡 현업에서의 선택: 현재 대부분의 Spark 코드는 DataFrame API (Python/SQL)를 사용합니다. RDD는 DataFrame으로 표현하기 어려운 복잡한 커스텀 로직에만 제한적으로 사용합니다. Databricks에서는 대부분의 작업을 SQL이나 PySpark DataFrame으로 처리할 수 있습니다.
참고: Apache Spark 공식 문서 | Databricks: Apache Spark 최적화 가이드