클라우드, AI, 빅데이터 시대의 도래
- 2013년부터 핸드폰 보급률 증가 → 빅데이터 시대 도래
- 2020년 이후 IoT 보급 → 초연결 사회로 진입
- 클라우드는 가상화(Virtualization) 기술을 통해 시스템의 유연성과 확장성을 크게 향상시킴
- AI는 미래 사회의 필수 기반 기술이 됨
🔧 AI 시대의 핵심 요소
- 컴퓨팅 파워 (GPU, Parallel Processing)
- Advanced Algorithm (딥러닝, 머신러닝 등)
- Massive Dataset (대규모 데이터셋)
이 3가지 요소가 결합되며, 2017년 이후 본격적인 AI 대중화가 시작됨.
빅데이터의 정의: 3V
빅데이터는 다음의 3V 특성으로 정의된다.
- Volume (크기): 대규모 데이터, TB → PB → ZB 단위로 확장
- Variety (다양성): 정형(Structured) vs 비정형(Unstructured) 데이터
- Velocity (속도): 빠르게 생성되고 빠르게 처리되어야 하는 데이터
💡 데이터 단위 이해
- KB (10^3), MB (10^6), GB (10^9), TB (10^12), PB (10^15), EB (10^18), ZB (10^21)
- 2020년 기준: 매일 수십 ZB의 데이터가 생성됨
Structured vs Unstructured Data
🧱 Structured Data
- 전통적인 데이터베이스(DBMS)에서 사용하는 테이블 형태
- 예: Oracle, MySQL 등의 관계형 데이터베이스(RDBMS)
- 쉽게 질의(Query)할 수 있고, 정해진 스키마를 가짐
🌊 Unstructured Data
- 정해진 형식 없이 생성된 데이터
- 예: 이미지, 비디오, 오디오, 로그 파일, SNS 글 등
- 최근 데이터의 대부분은 이 형태로 증가하고 있음
- Oracle 같은 전통적인 DB는 이런 데이터를 다루기 어려움 → NoSQL, HDFS 등의 도입
데이터의 생성과 저장의 변화
- 과거: 사람이 만든 데이터(트랜잭션 기반 시스템 중심)
- 현재: 머신이 만든 데이터 (IoT, 센서, CCTV, 차량, 위성 등)
- 문제는 저장소 부족이 아니라 저장된 데이터의 분석과 활용임
📸 데이터의 생성 예시
- CCTV: 영상 데이터는 용량이 큼 → 대부분 실시간 확인 후 삭제됨
- IoT 센서: 수많은 센서가 초당 데이터를 전송함
- 위성, 병원 장비(X-ray), 웨어러블 헬스 기기 등에서 지속적으로 데이터 생성 중
빅데이터의 3V 심화
1️⃣ Volume (데이터 양)
- 기업은 수십~수백 TB 수준의 데이터를 보유
- 개인도 수 TB 정도 데이터를 다룸
- 2020년 기준 매일 40 ZB 이상의 데이터가 생성됨
2️⃣ Variety (데이터 다양성)
- 텍스트, 이미지, 오디오, 비디오, 센서 데이터 등 다양한 포맷 존재
- 데이터 소스도 과거의 중앙 집중형에서 완전 분산형(Fully Distributed) 으로 변화
3️⃣ Velocity (데이터 속도)
- Batch 처리, Near Real-time 처리, Real-time 스트리밍 처리로 나뉨
- 데이터가 생성되자마자 분석하고 반응해야 하는 Streaming 처리가 중요해짐
빅데이터 처리 방식: 배치 vs 스트리밍
방식 | 설명 |
Batch | 데이터를 일정 단위로 모아서 한 번에 처리 |
Streaming | 실시간으로 연속적인 데이터를 처리 (예: 주식 거래, 맥박 감지) |
- 리얼타임 주가 변동, IoT 센서 반응 등은 스트리밍 방식이 필요
- 배치는 대량 데이터에 대한 통계 및 분석 (예: 수년간의 소비 패턴 분석)
Lambda Architecture (람다 아키텍처)
람다 아키텍처는 대규모 데이터를 처리하기 위해 배치 처리와 실시간 처리를 결합한 아키텍처 구조이다. 데이터의 정밀한 분석 결과와 실시간 응답성을 동시에 달성하기 위해 고안되었다.
🏗 람다 아키텍처 구성
계층 (Layer) | 주요 역할 | 대표 기술 |
Batch Layer | 전체 데이터 저장 및 정밀 분석 | Hadoop, MapReduce, Hive, Pig |
Speed Layer | 최신 실시간 데이터 처리 | Kafka, Spark Streaming, Flink |
Serving Layer | 분석 결과 저장 및 사용자 응답 제공 | HBase, Cassandra, Elasticsearch |
📌 계층별 상세 설명
1. Batch Layer (배치 계층)
- 역할: 대량의 데이터를 저장하고 정기적으로 분석
- 특징: 느리지만 매우 정확한 분석 가능
- 예시: 지난 3개월 사용자 행동 데이터 기반 인기 상품 분석
2. Speed Layer (속도 계층)
- 역할: 들어오는 실시간 데이터를 빠르게 처리
- 특징: 반응성이 빠르며, 최근 데이터에 집중
- 예시: 현재 접속 중인 사용자의 클릭 패턴 실시간 분석
3. Serving Layer (결과 제공 계층)
- 역할: 두 계층의 결과를 통합하여 사용자 질의에 응답
- 특징: 빠른 응답, 조회 최적화된 저장 방식
- 예시: Elasticsearch를 통해 검색 기반 대시보드 제공
💡 시각적 흐름
[전체 로그 데이터 저장소 - HDFS]
│
[Batch Layer - MapReduce]
│
[Speed Layer - Kafka + Spark]
│
[Serving Layer - HBase, Elastic]
│
[사용자 응답]
✅ 장단점 요약
구분 | 설명 |
장점 | 정확한 분석(Batch), 실시간 응답(Speed) 모두 가능, 유연한 아키텍처 설계 |
단점 | 이중 처리 로직으로 인한 복잡성, 다양한 컴포넌트 관리로 운영 부담 |
🆚 Lambda vs Kappa Architecture
항목 | Lambda Architecture | Kappa Architecture |
계층 구조 | Batch + Speed + Serving | 단일 스트리밍 계층 중심 |
처리 방식 | 이중 파이프라인 | 단일 스트리밍 처리로 통합 |
대표 기술 | MapReduce, Spark, Storm 등 | Kafka, Flink 등 |
복잡성 | 높음 | 상대적으로 단순함 |
🔎 실용 예시
실시간 주식 데이터 분석 시스템
- Kafka: 거래 데이터를 수신
- Spark Streaming: 실시간 분석 (예: 급등 종목 탐지)
- Hadoop MapReduce: 전일 또는 주간 거래량 평균 분석
- Elasticsearch: 결과를 통합하여 사용자 질의에 응답
Big Data Processing Pipeline
- 수집 (Collect): 다양한 소스로부터 데이터 수집 (IoT, 앱, 웹 등)
- 저장 (Store): 데이터 웨어하우스, NoSQL, HDFS 등 저장소에 저장
- 변환 (Transform): 분석하기 쉬운 형태로 가공 (ETL, 전처리)
- 분석 (Analyze): 통계, 머신러닝, AI 모델링
- 시각화 (Visualize): 그래프, 차트 등으로 결과 표현
- 예측/추론 (Predict): 패턴 파악, 이상 탐지, 미래 행동 예측
빅데이터 처리 기술과 대표 프레임워크
🗃 저장 기술
기술 | 설명 |
HDFS (Hadoop Distributed File System) | 대용량 파일을 여러 블록으로 나누어 다수의 노드에 분산 저장 |
Ceph | 객체 기반 분산 파일 시스템, 하둡보다 안정성과 유연성이 높음 |
SAP HANA | 인메모리 기반의 고속 데이터베이스 |
💬 메시징 시스템
기술 | 설명 |
Kafka | 대규모 실시간 데이터 스트리밍 처리, Pub/Sub 구조 |
RabbitMQ | 메시지 브로커, 다양한 프로토콜 지원, 비교적 간단한 구성 |
데이터 처리 프레임워크
🧩 Hadoop
- 대표적인 배치 처리 프레임워크
- 구성 요소:
- HDFS: 분산 파일 저장
- MapReduce: 분산 처리 연산 수행
- YARN: 클러스터 리소스 관리
⚡ Spark
- 배치와 스트림 처리를 모두 지원하는 인메모리 기반 프레임워크
- RDD (Resilient Distributed Dataset): Spark의 핵심 개념
- MapReduce보다 훨씬 빠른 처리 가능
🌪 Storm
- 실시간 데이터 스트리밍 처리 전용
- Event 기반, Tuple 단위의 처리
- Latency가 매우 짧고 빠른 응답 가능
🧠 Flink
- Spark보다 더 정교한 스트리밍 처리 지원
- 이벤트 시간 기반 처리(Event Time) 가능
- 상태 기반 스트리밍 처리가 가능하여, 복잡한 이벤트 처리에 적합
빅데이터 프레임워크의 역할 요약
📦 수집 → 저장 → 처리 → 분석 → 활용
수집 | Kafka, Flume |
저장 | HDFS, Ceph, Cassandra |
처리 | Hadoop, Spark, Storm, Flink |
분석 | Spark MLlib, TensorFlow |
시각화 | Kibana, Superset, Tableau |
활용 | MLOps, Business Intelligence 시스템 |
빅데이터 기반 시스템의 예시 구성도
예: Lambda Architecture 기반 처리 시스템 구성
- 데이터 수집: Kafka → 실시간 로그, 센서, 트랜잭션 수집
- Batch Storage: HDFS
- Batch Processing: Hadoop MapReduce
- Stream Processing: Spark Streaming 또는 Flink
- Serving Layer: HBase / Cassandra / Elasticsearch
- Frontend: 분석 결과 시각화 대시보드
분산 시스템 품질 속성 (Quality Attributes)
속성 | 설명 |
Scalability | 데이터 증가에 따라 시스템 확장 가능 |
Fault Tolerance | 일부 노드가 고장나도 전체 시스템은 작동 유지 |
Availability | 항상 접근 가능하고 고가용성을 유지함 |
Maintainability | 유지보수와 수정이 용이함 |
Usability | 사용자와 개발자가 쉽게 사용할 수 있음 |
Performance | 처리 속도, 응답 속도 등의 성능 지표 만족 |
Hadoop 생태계 요약
구성 요소 | 역할 |
HDFS | 분산 저장 |
MapReduce | 분산 처리 |
YARN | 리소스 관리 |
HBase | 컬럼 기반 NoSQL 저장 |
Hive | SQL 형태로 데이터 조회 가능 |
Pig | 스크립트 기반 데이터 흐름 처리 |
Sqoop | RDB ↔ HDFS 데이터 전송 |
Zookeeper | 분산 환경에서의 동기화와 구성 관리 |
Oozie | 워크플로우 관리 |
CEP (Complex Event Processing)
CEP는 연속적으로 발생하는 이벤트 스트림을 실시간으로 분석하고, 그 중 의미 있는 패턴이나 이벤트를 탐지하여 즉각적인 반응을 유도하는 기술이다.
🧠 핵심 개념
- 수많은 이벤트 중에서 의미 있는 이벤트(Complex Event)를 추출
- 실시간 필터링, 집계, 윈도잉(windowing), 조인(join) 등의 기능 수행
- 일반적인 쿼리 방식이 아니라 시간 순서와 조건 조합에 따라 분석 수행
⚙️ 처리 흐름
- 이벤트 스트림 수신 (IoT, 센서, 로그 등)
- 이벤트 간 패턴 또는 상관관계 분석
- 특정 조건이 만족되면 이벤트 생성 및 알림 또는 자동 제어
💡 예시 1: 증권 거래 시스템
- 실시간으로 거래 이벤트를 수신
- 특정 종목의 "골든 크로스" (단기 이평선이 장기 이평선을 상향 돌파) 발생 시 자동 매수
- 활용 도구: Esper, Flink CEP 등
💡 예시 2: 스마트홈 보안 시스템
조건: "온도가 30도를 초과하고, 1분 이내 출입 감지 발생 시" 반응: 에어컨 자동 가동 + 보안 강화 모드로 전환
🚀 대표 오픈소스 도구
도구 | 설명 |
Esper | Java 기반의 CEP 엔진, SQL 유사 언어 지원 |
Apache Flink CEP | Flink 내에 내장된 CEP 기능, 이벤트 시간 기반 패턴 매칭 |
Drools Fusion | 규칙 기반 이벤트 처리 엔진 (BRMS 연동) |
📊 주요 활용 분야
- 증권/금융: 고빈도 트레이딩, 패턴 감지
- IoT: 센서 이벤트 이상 징후 탐지
- 헬스케어: 웨어러블 기기 상태 모니터링
- 사이버 보안: 보안 로그에서 이상 이벤트 감지
- 실시간 추천: 사용자 행동 기반 실시간 추천
빅데이터 저장소 시스템 비교 (HDFS vs Ceph)
항목 | HDFS | Ceph |
구조 | Master-Slave 구조 (NameNode, DataNode) | 완전 분산 구조 (No Single Point of Failure) |
확장성 | 수평 확장 가능하나 NameNode는 병목 가능성 있음 | 완전한 수평 확장 가능 |
복제 방식 | 3중 복제 기본 | CRUSH 알고리즘 기반 복제 |
장애 대응 | NameNode 복제 및 Zookeeper로 대응 | 자체 알고리즘으로 장애 시 자동 복구 |
메타데이터 관리 | NameNode가 전담 | 모든 노드가 분산 저장 |
사용 예시 | Hadoop 기반 배치 처리 환경 | OpenStack, Object Storage, 클라우드 환경 |
설치 및 구성 | 비교적 단순 | 상대적으로 복잡 |
마이크로서비스 아키텍처(MSA)에서의 데이터 처리
- 각 서비스는 독립된 데이터 저장소를 사용
- 데이터 통합보다는 API 기반 공유에 중점
- 대규모 로그 분석 및 사용자 행동 분석에 빅데이터 플랫폼 접목
Hadoop YARN과 리소스 관리 방식
YARN (Yet Another Resource Negotiator) 는 Hadoop 2.x 이후에 도입된 클러스터 리소스 관리 플랫폼이다.
주요 구성 요소
구성 요소 | 역할 설명 |
ResourceManager | 전체 클러스터 자원 관리, 노드 상태 모니터링 |
NodeManager | 각 노드에서 자원 상태 보고 및 컨테이너 관리 |
ApplicationMaster | 애플리케이션 단위의 리소스 요청 및 작업 관리 |
Container | 실제 작업이 실행되는 자원 단위 (CPU, 메모리 등) |
처리 흐름
- 사용자가 작업 제출 → ResourceManager
- ResourceManager는 ApplicationMaster를 실행할 노드 지정
- ApplicationMaster는 Container 할당 요청
- NodeManager가 Container 생성 및 작업 수행
HDFS (Hadoop Distributed File System) 구조 및 장애 대응
HDFS는 Hadoop의 핵심 구성요소로, 대용량 데이터를 분산 환경에서 효율적으로 저장하고 관리하기 위한 분산 파일 시스템이다.
🏗 기본 구성 요소
구성 요소 | 역할 |
NameNode | 메타데이터 관리 (파일 이름, 블록 위치, 접근 권한 등) |
DataNode | 실제 데이터 블록을 저장하고, NameNode에 상태 보고 |
Secondary NameNode | 주기적으로 메타데이터 체크포인트 생성 (백업 X, 보조 역할) |
🧱 데이터 저장 방식
- 파일은 블록(Block) 단위로 나뉘어 저장됨 (기본 128MB)
- 각 블록은 기본적으로 3중 복제(replication) 되어 서로 다른 노드에 저장됨
- 데이터는 "쓰기 한 번, 여러 번 읽기" 패턴에 최적화됨
🔄 데이터 복제 및 전략
항목 | 설명 |
복제 수 | 기본 3개 (configurable) |
복제 위치 | Rack-aware 알고리즘 적용: 동일 랙 내 1개, 다른 랙에 2개 |
장점 | 장애 대비, 네트워크 병목 최소화, 데이터 안정성 확보 |
⚠️ 장애 대응 메커니즘
- NameNode 장애
- HA 구성 필수 (Active-Standby 또는 Zookeeper 기반 Failover)
- 메타데이터 이중화 필요: JournalNode 또는 Quorum Journal Manager 사용
- DataNode 장애
- Heartbeat & Block Report 미수신 시 장애로 간주
- NameNode가 자동으로 블록 복제 요청 (다른 노드에서 복구)
- 데이터 손실 없는 자동 복구 지원
- Mapper/Reducer 실패
- YARN이 실패 Task를 감지하고 다른 노드에 재시작
💬 장애 상황 예시
- 노드 A가 꺼짐 → A에 있던 블록은 사라짐
- NameNode가 인지 → 다른 노드에 해당 블록 복제
- 복구 후 블록 수가 다시 3개가 되도록 유지
🔐 데이터 신뢰성 확보 요소
요소 | 설명 |
Replication | 데이터 복제를 통한 장애 대응 |
Heartbeat | DataNode의 생존 상태 모니터링 |
Failover Mechanism | NameNode 장애 시 자동 전환 |
Block Integrity Check | 주기적인 블록 손상 검사 및 복구 |
📌 핵심 요약
- 데이터는 절대 이동하지 않는다, 대신 코드가 이동하여 처리됨
- 블록 단위 복제와 HA 구성으로 장애에 강한 시스템
- 전체 아키텍처의 신뢰성과 확장성을 확보하는 핵심 인프라
분산 시스템 설계 시 고려할 점
- 데이터 분산 저장 구조
- 파일 단위 or 블록 단위
- 복제 전략
- 컴퓨팅 리소스 분산 구조
- 노드 간 병렬 처리
- Task Scheduler 구조
- 리소스 및 장애 관리
- 마스터-슬레이브 or 완전 분산
- YARN, Kubernetes 등 활용
- 프레임워크 구조화
- 사용자 코드는 최소한으로 유지 (Framework-Component 구조)
- 예: 사용자 컴포넌트가 들어가는 MapReduce 프레임워크
설계 방향
- 데이터 저장 구조
- HDFS 기반 분산 파일 시스템
- 블록 단위로 데이터 저장 및 3중 복제
- NameNode는 메타데이터만 관리 (파일명, 위치 정보 등)
- 컴퓨팅 구조
- MapReduce 기반 배치 처리 프레임워크 사용
- 코드가 데이터를 찾아가는 방식 (code-to-data)
- YARN을 이용해 리소스 스케줄링 및 실행 관리
- 장애 대응
- NameNode의 HA 구성 (Active-Standby)
- DataNode는 Heartbeat로 상태 체크, 복제 손실 시 자동 보완
- 프레임워크 설계
- 사용자 컴포넌트를 넣는 방식의 프레임워크 구조
- 사용자는 분석 코드만 구현하면 됨
- 분산 실행 및 데이터 분할/병합은 시스템이 자동 수행
프레임워크의 컴포넌트 구조
구조도 요약
[ 사용자 코드 ] → [ Framework Container ] → [ Hadoop Cluster (HDFS + YARN) ]
주요 흐름
- 사용자가 Mapper, Reducer 인터페이스 구현
- 시스템은 이를 적절한 노드에 배치
- 각 노드는 데이터를 로컬에서 처리 (Map)
- 중간 결과를 모아 최종 처리 (Reduce)
- 결과를 HDFS에 저장
데이터 이동 vs 코드 이동
방식 | 설명 | 장점 |
데이터 이동 | 중앙 서버에서 전체 데이터를 가져와 처리 | 단순한 로직 가능 |
코드 이동 | 데이터가 있는 노드로 코드 전송 | 빠르고 효율적인 분산 처리 가능 |
→ Hadoop은 코드 이동 방식을 채택
시스템 레이어 구분
레이어 | 설명 |
Storage Layer | HDFS, 복제 전략, NameNode 관리 |
Resource Layer | YARN, 노드 상태 감시, 스케줄링 |
Processing Layer | MapReduce, Spark 등 프레임워크 |
Application Layer | 사용자 작업 (예: 최대값 계산, AI 훈련 등) |
마스터 노드 설계 고려사항
- 메타데이터만 저장하므로 상대적으로 가벼움
- HA 구성 필수
- Active-Passive 형태 또는 Zookeeper 기반 자동 전환
- 장애 발생 시 빠르게 복구 가능하도록 메타정보 백업
빅데이터 처리를 위한 실제 동작 흐름 예시 (최댓값 찾기)
예시 시나리오: 전체 데이터에서 최댓값 찾기
목표: 여러 노드에 분산 저장된 데이터에서 전체 최댓값을 빠르게 구함
Step 1: 사용자 코드 작성
- 사용자(개발자)는 Mapper, Reducer 형태의 코드를 작성함
// Mapper: 각 데이터 블록에서 최댓값 찾기
public class MaxMapper extends Mapper<LongWritable, Text, NullWritable, IntWritable> {
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
int number = Integer.parseInt(value.toString());
context.write(NullWritable.get(), new IntWritable(number));
}
}
// Reducer: 전체 중 최댓값 구하기
public class MaxReducer extends Reducer<NullWritable, IntWritable, NullWritable, IntWritable> {
public void reduce(NullWritable key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int max = Integer.MIN_VALUE;
for (IntWritable val : values) {
if (val.get() > max) max = val.get();
}
context.write(NullWritable.get(), new IntWritable(max));
}
}
Step 2: 분산 실행 흐름
- Job 요청: 사용자가 작성한 MapReduce 작업을 Hadoop 클러스터에 제출
- YARN 스케줄링: YARN이 클러스터 내 자원을 점검하고 실행 노드 할당
- Mapper 실행: 각 DataNode는 자신이 저장한 블록을 기반으로 MaxMapper 실행
- 데이터 이동 없이 로컬에서 처리
- 블록마다 중간 최댓값 계산
- Reducer 실행: 모든 Mapper의 결과가 한 곳으로 모임
- MaxReducer가 전체 최댓값 산출
- 결과 저장: HDFS에 최종 결과 저장
Step 3: 장애 대비 구조
- Mapper 장애 발생: YARN이 해당 Task를 다른 노드에서 재시작
- Reducer 장애 발생: Reducer 또한 재시작 가능
- NameNode 장애 대비: Active-Standby 구성으로 자동 전환
- 데이터 손실 방지: 각 블록은 3중 복제, 하나의 노드 장애 시에도 데이터 유지
Hadoop을 통한 분산 처리의 효과
항목 | Hadoop 적용 전 | Hadoop 적용 후 |
처리 시간 | 단일 노드에 의존 → 느림 | 병렬 분산 처리 → 빠름 |
장애 발생 시 | 전체 작업 실패 | 장애 노드만 재시작 |
자원 활용 | 단일 CPU, RAM | 클러스터 자원 전체 |
사용자 복잡도 | 모든 분산 처리 직접 구현 | 프레임워크가 분산 처리 담당 |
전체 아키텍처 요약
[ 사용자 Job ]
↓
[YARN 스케줄러]
↓
[Mapper 실행 - 각 DataNode]
↓
[Reducer 실행]
↓
[HDFS 결과 저장]
- 코드가 데이터로 이동
- YARN이 실행 제어
- 중간 실패 시 자동 복구
- 고가용성 보장
다른 예: YouTube 데이터 흐름 (실시간 및 배치 혼합)
- 사용자들이 업로드한 영상 → Kafka → HDFS 저장
- 최근 업로드 영상에 대한 분석 → Spark Streaming
- 과거 전체 데이터 기반 추천 알고리즘 학습 → MapReduce
- 사용자에게 추천 결과 제공 → Elasticsearch
반응형
'CS 지식 > 분산시스템과 컴퓨팅' 카테고리의 다른 글
Ceph의 소개와 HDFS와 차이 (0) | 2025.04.03 |
---|---|
HDFS(하둡 분산 파일 시스템) 구조 및 작동 방식 (0) | 2025.04.03 |
하둡(Hadoop)의 아키텍처, 병렬처리, 장애처리 전략 (0) | 2025.04.02 |
분산시스템의 아키텍처와 운영체제의 종류 (0) | 2025.03.16 |
분산시스템과 컴퓨팅의 소개 (0) | 2025.03.10 |
댓글