데이터 분석을 처음 배울 때는 보통 작은 CSV 파일 하나를 열고, 필터링하고, 평균을 구하는 정도에서 시작합니다.
이때는 굳이 복잡한 도구가 필요하지 않습니다. 노트북 한 대에서 Python과 pandas만으로도 충분히 처리할 수 있습니다.
그런데 데이터가 점점 커지면 이야기가 달라집니다.
수백 MB였던 파일이 수십 GB, 수백 GB, 더 나아가 TB 단위로 커지면 한 대의 컴퓨터가 데이터를 읽고 계산하고 저장하는 데 한계가 생깁니다. 이때 필요한 개념이 바로 분산 병렬처리이고, 이 흐름에서 등장한 대표적인 엔진이 Apache Spark입니다.
Apache Spark는 대량의 데이터를 여러 컴퓨터에 나누어 처리하고, SQL 분석, 스트리밍, 머신러닝, 그래프 처리까지 하나의 흐름으로 연결할 수 있게 해주는 오픈소스 데이터 처리 엔진입니다.
1. 데이터가 많아지면 왜 처리 속도가 느려질까?
데이터가 많아진다는 것 =/ 파일 크기만 커진다는 뜻.
데이터를 읽는 시간, 메모리에 올리는 시간, 계산하는 시간, 중간 결과를 저장하는 시간, 다시 불러오는 시간이 모두 같이 늘어납니다.
예를 들어 쇼핑몰 주문 데이터를 분석한다고 생각해보겠습니다. 처음에는 하루 주문 1,000건 정도라서 한 파일로도 충분히 처리할 수 있습니다. 하지만 서비스가 커지면 상황이 바뀝니다.
- 주문 데이터가 매일 수백만 건씩 쌓임
- 사용자 클릭 로그가 초 단위로 들어옴
- 상품 조회, 장바구니, 결제, 환불 데이터가 각각 따로 저장됨
- 분석뿐 아니라 추천 모델, 실시간 대시보드, 이상 탐지에도 같은 데이터를 사용해야 함
이런 상황에서 한 대의 컴퓨터가 모든 데이터를 순서대로 처리하면 시간이 오래 걸릴 수밖에 없습니다. 마치 식당에 손님이 1,000명 왔는데 요리사 한 명이 모든 주문을 처음부터 끝까지 혼자 처리하는 것과 비슷합니다.
빅데이터에서 느려지는 이유는 단순히 데이터가 커서가 아닙니다. 데이터를 한 곳에서, 한 번에, 순서대로 처리하려는 구조 자체가 병목이 되기 때문입니다.
2. 병렬처리란 무엇인가?
병렬처리는 하나의 큰 작업을 여러 개의 작은 작업으로 나누고, 여러 작업자가 동시에 처리하는 방식입니다.
앞의 식당 예시로 다시 보면, 요리사 한 명이 1,000개의 주문을 처리하는 대신 요리사 10명이 주문을 나누어 처리하는 구조입니다.
데이터 처리에서도 비슷한 일이 일어납니다. 하나의 거대한 데이터를 여러 조각으로 나누고, 각 조각을 여러 서버가 동시에 처리합니다. 그리고 마지막에 결과를 다시 합칩니다.
| 구분 | 처리 방식 | 비유 |
|---|---|---|
| 일반 처리 | 한 대의 컴퓨터가 데이터를 순서대로 처리 | 요리사 한 명이 모든 주문 처리 |
| 병렬처리 | 여러 컴퓨터가 데이터를 나누어 동시에 처리 | 여러 요리사가 주문을 나누어 처리 |
여기서 중요한 점은 단순히 컴퓨터를 여러 대 붙인다고 자동으로 병렬처리가 되는 것은 아니라는 점입니다.
데이터를 어떻게 나눌지, 어떤 작업을 어느 서버에 보낼지, 실패한 작업은 어떻게 다시 실행할지, 마지막 결과는 어떻게 합칠지를 관리하는 엔진이 필요합니다.
Apache Spark는 바로 이 역할을 합니다.
3. Spark가 등장한 이유
Apache Spark는 빅데이터 분석을 위한 오픈소스 데이터 처리 프레임워크입니다.
조금 더 쉽게 말하면, 대량의 데이터를 여러 컴퓨터에 나누어 빠르게 처리하도록 도와주는 엔진입니다.
Spark가 중요한 이유는 단순히 “빠르다”는 데서 끝나지 않습니다.
Spark는 배치 처리, SQL 분석, 실시간 처리, 머신러닝, 그래프 처리까지 하나의 엔진 위에서 연결할 수 있도록 설계되었습니다.
Spark는 대량 데이터를 빠르게 처리하기 위한 분산 병렬처리 엔진이면서, SQL, 스트리밍, 머신러닝, 그래프 분석을 하나의 플랫폼에서 다룰 수 있게 해주는 통합 데이터 처리 엔진입니다.
예를 들어 온라인 쇼핑몰 데이터를 Spark로 처리한다고 하면 다음과 같은 흐름을 만들 수 있습니다.
1. 주문 로그와 클릭 로그를 대량으로 읽기
2. Spark SQL로 상품별 매출 집계
3. Structured Streaming으로 실시간 주문 데이터 처리
4. MLlib으로 추천 모델 학습
5. 분석 결과를 테이블로 저장하고 대시보드에서 활용
즉 Spark는 “데이터를 빨리 계산하는 도구”이기도 하지만, 실무에서는 데이터 파이프라인 전체를 연결하는 중심 엔진에 가깝습니다.
4. Spark의 핵심 특징
Spark의 특징은 여러 가지가 있지만, 처음 배울 때는 아래 네 가지를 먼저 이해하면 됩니다.
1) 메모리 기반 처리
Spark는 메모리 기반 처리를 지원합니다. 메모리 기반 처리란 데이터를 매번 디스크에 저장하고 다시 읽는 대신, 가능한 한 메모리에 올려두고 빠르게 계산하는 방식입니다.
디스크는 창고에 가서 물건을 꺼내오는 느낌이고, 메모리는 책상 위에 자료를 펼쳐두고 바로 보는 느낌입니다. 자주 반복해서 계산해야 하는 작업이라면 책상 위에 올려둔 자료를 보는 쪽이 훨씬 빠릅니다.
2) 다양한 처리 방식 지원
Spark는 하나의 처리 방식만 지원하지 않습니다. 정해진 시간마다 데이터를 모아 처리하는 배치 처리, 사용자가 SQL로 바로 조회하는 대화형 분석, 계속 들어오는 데이터를 처리하는 스트리밍, 머신러닝과 그래프 처리까지 지원합니다.
| 처리 방식 | 의미 | 예시 |
|---|---|---|
| Batch Processing | 모아둔 데이터를 한 번에 처리 | 전날 매출 집계 |
| Interactive SQL | SQL로 데이터를 즉시 조회 | 상품별 주문 수 분석 |
| Real-time Processing | 계속 들어오는 데이터를 처리 | 실시간 이상 거래 감지 |
| Machine Learning | 대량 데이터로 모델 학습 | 추천 시스템, 이탈 예측 |
| Graph Processing | 관계 중심 데이터 분석 | 소셜 네트워크, PageRank |
3) 여러 언어 지원
Spark는 Scala, Java, Python, SQL 등 여러 언어를 지원합니다.
이 점은 실무에서 꽤 중요합니다. 데이터 엔지니어는 Python이나 Scala를 사용할 수 있고, 데이터 분석가는 SQL로 데이터를 조회할 수 있습니다.
즉 Spark는 특정 언어를 쓰는 사람만을 위한 도구가 아니라, 여러 직군이 같은 데이터 처리 엔진을 공유할 수 있게 해줍니다.
4) 통합 엔진 구조
Spark의 가장 큰 장점 중 하나는 다양한 처리를 서로 다른 도구로 흩어놓지 않고, 하나의 엔진 위에서 연결할 수 있다는 점입니다.
예를 들어 예전에는 SQL 분석은 A 도구, 스트리밍은 B 도구, 머신러닝은 C 도구처럼 따로 사용하는 경우가 많았습니다.
그러면 데이터가 도구 사이를 계속 이동해야 하고, 그 과정에서 시간과 비용이 늘어납니다. Spark는 이런 데이터 이동을 줄이고 같은 추상화 위에서 여러 처리를 연결할 수 있게 해줍니다.
5. Spark SQL, Structured Streaming, MLlib, GraphX 간단 정리
Spark는 내부적으로 여러 구성 요소를 가지고 있습니다.
처음부터 깊게 외울 필요는 없지만, 각각이 어떤 역할을 하는지는 알아두는 것이 좋습니다.
| 구성 요소 | 역할 | 쉽게 말하면 |
|---|---|---|
| Spark Core | Spark의 기본 실행 엔진 | 분산 처리의 중심 엔진 |
| Spark SQL | SQL과 DataFrame 기반 데이터 분석 | 큰 데이터를 SQL처럼 조회하는 기능 |
| DataFrame | 행과 열 구조의 분산 데이터 객체 | pandas DataFrame의 빅데이터 버전처럼 이해 가능 |
| Structured Streaming | 실시간 데이터 스트림 처리 | 계속 들어오는 데이터를 테이블처럼 처리 |
| MLlib | 머신러닝 알고리즘 라이브러리 | 대량 데이터로 모델을 학습하는 도구 |
| GraphX | 그래프 데이터와 반복 그래프 알고리즘 처리 | 사람, 페이지, 상품 간 관계를 분석하는 기능 |
Spark SQL과 DataFrame
Spark SQL은 다양한 데이터 소스에 저장된 데이터를 SQL로 조회할 수 있게 해줍니다.
외부 데이터베이스, 구조화된 파일, Hive 테이블 같은 데이터를 다룰 수 있고, Python, Scala, Java 같은 언어 안에서도 사용할 수 있습니다.
DataFrame은 표처럼 생긴 데이터 구조입니다. 행과 열이 있고, 필터링, 그룹화, 집계 같은 작업을 할 수 있습니다. pandas DataFrame과 비슷하게 느껴질 수 있지만, Spark DataFrame은 여러 서버에 분산되어 처리될 수 있다는 점이 다릅니다.
Structured Streaming
Structured Streaming은 스트리밍 데이터를 처리하기 위한 Spark의 기능입니다.
여기서 스트리밍 데이터란 한 번에 끝나는 데이터가 아니라 계속 들어오는 데이터입니다.
예를 들어 IoT 센서 데이터, 앱 클릭 로그, 주문 이벤트, Kafka 메시지 같은 데이터가 여기에 해당합니다.
Structured Streaming의 중요한 특징은 배치 처리와 스트리밍 처리를 비슷한 방식으로 다룰 수 있다는 점입니다.
즉, 정적인 테이블을 다루듯이 계속 증가하는 데이터도 처리할 수 있게 해줍니다.
데이터가 한 번에 들어오는 것이 아니라 계속 추가되는 테이블이라고 생각하면 됩니다. Spark는 새로 들어온 데이터만 계속 반영하면서 결과를 업데이트합니다.
MLlib
MLlib은 Spark의 머신러닝 라이브러리입니다. 대량 데이터를 기반으로 분류, 회귀, 군집화, 추천 같은 머신러닝 작업을 수행할 수 있습니다.
특히 추천 시스템처럼 데이터가 많고 사용자와 아이템의 관계를 다뤄야 하는 작업에서는 Spark MLlib이 유용하게 사용될 수 있습니다.
GraphX
GraphX는 그래프 데이터를 처리하기 위한 Spark 구성 요소입니다.
그래프 데이터는 점과 선으로 표현되는 관계형 데이터입니다
. 예를 들어 사용자는 점, 친구 관계는 선으로 볼 수 있습니다. 웹 페이지는 점, 링크는 선으로 볼 수도 있습니다.
GraphX는 PageRank, Connected Components, Triangle Count 같은 그래프 알고리즘을 지원합니다.
그래서 소셜 네트워크 분석, 추천, 관계 탐색 같은 문제에 사용할 수 있습니다.
6. Spark와 Databricks의 관계 예고
여기까지 보면 Spark만 있으면 모든 것이 해결될 것처럼 느껴질 수 있습니다.
하지만 실무에서는 Spark 엔진 자체만 있다고 끝나지 않습니다.
Spark를 사용하려면 클러스터를 구성해야 하고, 라이브러리를 맞춰야 하고, 노트북이나 작업 환경을 준비해야 하며, 여러 사람이 협업할 수 있는 구조도 필요합니다. 운영 환경에서는 스케줄 실행, 로그 확인, 권한 관리, 비용 관리도 중요해집니다.
이때 등장하는 플랫폼이 Databricks입니다. Databricks는 Spark를 더 쉽게 사용할 수 있도록 만든 분석 플랫폼입니다.
특히 Azure 환경에서 제공되는 Azure Databricks는 Spark 기반 분석을 Azure의 보안, 저장소, Power BI, Data Factory 같은 서비스와 연결할 수 있게 해줍니다.
| 구분 | 역할 | 비유 |
|---|---|---|
| Apache Spark | 대량 데이터를 분산 병렬처리하는 엔진 | 강력한 엔진 |
| Databricks | Spark를 쉽게 쓰고 운영할 수 있게 해주는 플랫폼 | 엔진을 얹은 작업장과 관리 시스템 |
이 글에서는 Spark가 왜 필요한지와 어떤 역할을 하는지만 다룹니다. Databricks의 Workspace, Compute, Job, Delta Lake, Unity Catalog 같은 내용은 이후 글에서 따로 설명하는 것이 좋습니다.
7. 정리
Apache Spark는 빅데이터를 빠르게 처리하기 위해 등장한 오픈소스 데이터 처리 엔진입니다.
데이터가 커지면 한 대의 컴퓨터에서 순서대로 처리하는 방식은 한계가 생기고, 이 문제를 해결하기 위해 데이터를 여러 조각으로 나누어 여러 서버에서 동시에 처리하는 병렬처리 구조가 필요해집니다.
Spark는 단순한 병렬처리 엔진을 넘어, SQL 분석, 스트리밍 처리, 머신러닝, 그래프 처리까지 하나의 흐름으로 연결합니다.
그래서 실무에서는 대량 데이터 분석, 실시간 파이프라인, 추천 시스템, 머신러닝 데이터 준비 등 다양한 영역에서 활용됩니다.
그리고 Spark를 더 쉽게 사용하고 운영할 수 있도록 만든 플랫폼이 Databricks입니다. Spark가 엔진이라면, Databricks는 그 엔진을 실무에서 편하게 사용할 수 있도록 작업 공간, 실행 환경, 협업 기능, 운영 기능을 제공하는 플랫폼이라고 볼 수 있습니다.
8. 전체 흐름 한 번에 정리
| 단계 | 핵심 질문 | 답 |
|---|---|---|
| 1 | 데이터가 많아지면 왜 느려질까? | 한 대의 컴퓨터가 모든 데이터를 순서대로 처리하기 때문이다. |
| 2 | 어떻게 해결할 수 있을까? | 데이터를 나누고 여러 컴퓨터가 동시에 처리하는 병렬처리가 필요하다. |
| 3 | Spark는 무엇을 해줄까? | 분산 병렬처리를 관리하고 대량 데이터를 빠르게 처리한다. |
| 4 | Spark는 어디까지 지원할까? | SQL, 스트리밍, 머신러닝, 그래프 처리까지 지원한다. |
| 5 | Databricks는 왜 나올까? | Spark를 더 쉽게 사용하고 운영하기 위해 등장한다. |
9. 핵심 키워드 정리
| 키워드 | 의미 |
|---|---|
| Apache Spark | 대량 데이터를 분산 병렬처리하기 위한 오픈소스 데이터 처리 엔진 |
| Big Data | 기존 방식으로 처리하기 어려울 만큼 크고 다양한 데이터 |
| 병렬처리 | 큰 작업을 작은 작업으로 나누어 동시에 처리하는 방식 |
| In-memory Processing | 데이터를 메모리에 올려두고 빠르게 계산하는 처리 방식 |
| Spark SQL | Spark에서 SQL과 DataFrame으로 데이터를 분석하는 기능 |
| DataFrame | 행과 열 구조로 표현되는 Spark의 분산 데이터 객체 |
| Structured Streaming | 계속 들어오는 데이터를 테이블처럼 처리하는 Spark 스트리밍 기능 |
| MLlib | Spark에서 제공하는 머신러닝 라이브러리 |
| GraphX | 그래프 데이터와 관계 기반 알고리즘을 처리하는 Spark 구성 요소 |
| Databricks | Spark를 쉽게 사용하고 운영할 수 있도록 만든 데이터 분석 플랫폼 |
10. 다음 글 예고
이번 글에서는 Apache Spark가 왜 필요한지, 그리고 Spark가 대량 데이터를 어떻게 빠르게 처리하는지 살펴보았습니다. 다음 글에서는 Spark를 더 쉽게 사용하고 운영할 수 있게 해주는 플랫폼인 Azure Databricks가 무엇인지 알아보겠습니다.