본문 바로가기
Study Log/ADP

[ADP 필기 요약]_2과목 데이터 처리 기술 이해_④

by Maker_Potato 2026. 2. 11.

1. 분산 파일 시스템(DFS) 개요

  • 분산 파일 시스템(GFS, HDFS, Lustre 등)
  • 클러스터(Cluster)
  • 데이터베이스(Cluster DB, MPP 등)
  • NoSQL

분산 파일 시스템(Distributed File System)[📌암기]

  • 대용량 파일을 여러 서버(노드)에 분산 저장하고
  • 사용자는 이를 마치 하나의 파일 시스템처럼 쓰게 해주는 구조

1-2. GFS (Google File System)[📌암기]

구글이 대용량 데이터 처리를 위해 설계한 분산 파일 시스템.

 

핵심 전제(가정)

  • 저가형 서버 사용 → 고장 빈번(노드 수 많고 파일도 큼)
  • 쓰기(write)는 주로 순차적, 갱신(update)은 별로 없음
  • 낮은 지연시간보다 높은 처리량(throughput) 이 중요

청크(Chunk) 구조

  • 고정 크기 청크(기본 64MB) 가 저장 단위
  • 파일을 여러 청크로 나눠 저장하고 각 청크는:
    • 여러 개 복제본(replica) 생성
    • 여러 청크 서버에 분산 저장
  • 청크는 유일 식별자로 구분(마스터가 생성/삭제 관리)

구성 요소

  • Client: GFS 라이브러리로 파일 접근
  • Master(마스터 노드): 메타데이터 관리(데이터는 저장 X)
  • Chunk Server(청크 서버): 실제 데이터 저장(복제 저장)

📌 통신 포인트

  • 메타정보는 Master와 통신
  • 실제 데이터는 Chunk Server와 직접 통신

1-3. HDFS (Hadoop Distributed File System)[📌암기]

HDFS는 Hadoop 생태계에서 대용량 데이터를 저장하기 위한 대표 DFS

  • NameNode(네임노드): 메타데이터 관리(마스터), 시스템 상태 모니터링
  • DataNode(데이터노드): 실제 데이터 저장/입출력 처리(슬레이브)
    • 보통 3중 복제(replication factor=3) 로 데이터 유실 방지
  • Secondary NameNode(보조 네임노드): 네임노드 상태/체크포인트 보조

특징(시험 키워드)

  • 한 번 쓰이면 변경되지 않는다고 가정(Write once, read many)
  • 순차적 스트리밍 방식 → 배치 작업에 적합
  • 높은 처리량 중심

HDFS 파일 저장(Write) 과정

  1. 클라이언트가 파일을 여러 블록으로 분할
  2. 네임노드에게 “어느 데이터노드에 저장할지” 위치를 받음
  3. 클라이언트 → 1번 DataNode로 전송
  4. 1번이 저장 후 → 2번으로 전달, 2번도 저장 후 → 3번으로 전달(복제 체인)
  5. 각 노드가 저장 완료 ACK를 순차적으로 클라이언트에 전달
  6. 모든 블록이 끝날 때까지 반복

HDFS 파일 읽기(Read) 과정

  1. 클라이언트가 네임노드에 파일 정보 요청
  2. 네임노드가 블록 목록 + 블록이 있는 데이터노드 위치 반환
  3. 클라이언트가 해당 데이터노드로 직접 가서 읽음

1. 분산 파일 시스템(DFS) 개요_②

1-4. Lustre (러스터)

고속 네트워크 기반의 객체(Object) 기반 클러스터 파일 시스템으로 HPC(고성능 컴퓨팅) 환경에서 자주 언급됩니다.

 

구성 요소

  • Client Node: 로컬 디스크처럼 마운트해서 사용
  • Metadata Server(MDS): 파일 메타데이터(구조/위치) 관리, 데이터 저장 X
  • Object Storage Server(OSS): 실제 데이터 저장

특징

  • 클라이언트에서 메타데이터 변경에 대한 갱신 레코드 생성
  • 메타데이터/데이터 동시성 제어를 위해 별도 잠금(lock) 사용
  • 트래픽 최소화를 위해 인텐트 기반 잠금 프로토콜 사용(의도를 함께 전달)

1-5. 데이터베이스 클러스터 & 파티셔닝 효과

DB 클러스터: 하나의 DB를 여러 서버에 구축해 운영하는 방식
파티셔닝/샤딩: 데이터를 여러 조각으로 분할해 노드에 분산 배치

 

✅  파티셔닝 효과[📌암기]

  • 고가용성: 한 노드 장애에도 다른 노드로 서비스 지속
  • 병렬처리: 검색/처리 속도 향상
  • 성능 향상: 노드 추가 시 선형 증가(Scale-out 기대)

1-6. 공유 디스크 vs 무공유 디스크[📌암기]

구분 공유디스크 무공유디스크
디스크 구조 여러 노드가 공통 디스크 풀 사용 각 노드가 자신의 디스크만 사용
데이터 위치 논리적으로 단일 저장소 노드별로 분산 저장(샤딩/파티셔닝)
대표 예 Oracle RAC 등 MPP DB, NoSQL, Hadoop/HDFS
확장 방식 공통 스토리지가 병목되기 쉬움 **수평 확장(Scale-out)**에 유리
병목 스토리지/스토리지 네트워크 병목 노드 추가로 병목 완화 가능
장애 처리 비교적 단순(다른 노드가 같은 디스크 접근) 복제/레플리카 설계 필요
쿼리 처리 동시 접근 많아 락/일관성 중요 병렬 처리 유리(교차 조인은 비용↑)

공유 디스크 요약

  • 각 노드는 CPU/메모리/네크워크 독립, 디스크는 공유
  • SAN 같은 스토리지 네트워크 필요
  • 장점: 모든 노드가 데이터 수정 가능 , 장애 처리 단순, 폴트 톨러런스 강함
  • 단점: 규모 커질수록 I/O 병목, 수평 확장 한계

  무공유 디스크 요약

  • 각 노드가 CPU/메모리/디스크 모두 독립(자원 공유 없음)
  • 장점: 확장성 최고, 병렬 처리 유리
  • 단점: 데이터 분산 설계 복잡, 노드 간 조인/집계 비용↑, 장애 대비 복제 설계 필요
  • (시험용 문장) Oracle RAC 제외 대부분 무공유 방식 채택

1. 분산 파일 시스템(DFS) 개요_③

1-7. 데이터베이스 클러스터 종류

1) Oracle RAC

  • 공유 디스크 기반으로 데이터는 공유 스토리지에 저장됨
  • 모든 노드가 모든 테이블에 동등 접근(데이터 “소유” 개념 없음)
  • 장점: 가용성, 확장성(노드 다수), 확장성, 비용 절감(관점에 따라)

2) IBM DB2 ICE

  • 무공유 방식 클러스터링
  • 특정 노드 장애 시 페일오버 메커니즘 필요 → 실무에서는 가용성 위해 공유디스크 방식도 고려

3) Microsoft SQL Server

  • 연합 DB 형태로 확장 가능
  • 페일오버 제공, 보통 Active-Standby 방식 활용

4) MySQL Cluster(대표적으로 NDB)

  • 비공유형(메모리 기반 중심, 최근엔 디스크도 일부)
  • 구성: 관리노드 / 데이터노드 / MySQL 노드
  • 복제로 가용성 확보
  • (필기 키워드) 참여 노드 수 제한(255), 데이터 노드는 최대 48개, 운영 중 노드 추가/삭제 제약 등

1-8. NoSQL 정리[📌암기]

NoSQL(비관계형 DB)

  • 데이터 증가 + 구조 다양화로 등장
  • 스키마가 유연하고(예: JSON), 수평 확장에 강함
  • 모델: Key-Value / Document / Graph / Column

특징 요약

  • Key-Value 형태 저장, 스키마 없이 동작 가능
  • 대용량 처리 + 대규모 Scale-out 지향

대표 시스템

1) Google Bigtable (컬럼 패밀리 계열)

  • 공유 디스크 방식Row-Key 기준 사전식 정렬 저장
  • 동일 Column에 대해 타임스탬프 버전 관리 가능
  • Rowkey+Column-Key+Timestamp, 페일오버, Chubby : 장애발생불가

2) Amazon SimpleDB

  • 구성: Domain / Item / Attribute / Value
    • Domain = 테이블
    • Item = 레코드
    • Attribute = 컬럼(여러 값 저장 가능)

3) Apache HBase

  • HDFS 기반 컬럼 지향 분산 DB
  • 관계형 구조 아님, SQL 기본 미지원
  • 노드 추가 시 선형 확장에 유리(큰 테이블에 적합)

4) Microsoft SSDS

  • 컨테이너/엔티티 기반(필기 키워드 수준)

 

2. 분산 컴퓨팅 기술: MapReduce[📌암기]

 MapReduce란?

  • 구글이 대용량 데이터를 분산 병렬 처리하기 위해 만든 프레임워크
  • 핵심 아이디어: 분할정복 + 병렬처리

2-1. Hadoop MapReduce

  • NameNode: HDFS 메타데이터(마스터역할)
  • DataNode: HDFS 데이터 저장/입출력 수행
  • JobTracker: Job 관리 마스터
  • TaskTracker: 실제 작업 수행 워커(슬레이브)
  • TaskTracker는 JobTracker에게 주기적으로 하트비트 전송(생존/상태 보고)

 

처리 흐름[📌암기]

input → split → mapping → combine → shuffling → sorting → reducing → output

  • split: FileSplit 1개당 Map Task 1개 생성
  • mapping: Key-Value 쌍 생성
  • shuffling/sorting: 같은 Key를 모아 Reduce로 전달(그룹핑/정렬)

하둡의 성능

  • Map → Reduce 넘어가는 과정에서 정렬(sort)은 내부적으로 항상 발생
  • 데이터가 커질수록 sort 비용이 커져 처리 시간이 선형적으로 증가할 수 있음

2-2. Google MapReduce 

  1. Map 단계: 입력(Key, Value) → 중간 결과 생성
    • Map은 Key-Value 쌍을 입력
    • 각 입력 레코드는 사용자가 정의한 Map 함수를 거치며, 하나의 (Key, Value)가 여러 개의 새로운 (Key, Value) 로 변환
    • Map 결과(중간 데이터)는 로컬 파일 시스템에 임시 저장
     
  2. Shuffle/Sort: Reduce로 보내기 전에 자동 정리
    • Shuffling: 같은 Key끼리 모이도록 Reduce 쪽으로 데이터를 재분배
    • Sorting / Group By: Key 기준으로 정렬하고 그룹화
    그 결과 Reduce 입력은 아래 형태가 됩니다.
    • (Key, Value 리스트)
      예) (A, [1,1,1,1]), (B, [1,1,1])
  3. Reduce 단계: (Key, Value 리스트) → 최종 결과 생성
    • 동일 Key에 대한 값 목록을 받아 사용자가 정의한 Reduce 함수로 집계/요약/결합 처리 후
    • 최종 결과를 출력

✅ 폴트 톨러런스 : 각 프로세스가 Master에게 Task 진행 상태를 주기적으로 보고


3. 병렬 쿼리 시스템 & SQL on Hadoop[📌암기]

3-1. 병렬 쿼리 시스템

MapReduce는 강력하지만 “직접 코딩” 부담이 큼 → 이를 보완하려고 등장

  • Google Sawzall: MapReduce를 추상화한 스크립트 형태 언어
  • Apache Pig: 고차원 데이터 처리 언어(Pig Latin)
  • Apache Hive: SQL 유사(HiveQL), MapReduce 기능 활용 가능

3-2. SQL on Hadoop

  • 하둡에 저장된 대용량 데이터를 대화형 SQL 질의로 분석하려는 기술
  • “실시간 처리” 관점에서 하둡의 제약을 보완하려는 시도

Impala

  • 비교적 초기에 고안
  • 맵리듀스 사용 X, C++ 기반
  • 분석 중심이지만 (필기 표현상) 트랜잭션/분석 지원 언급
  • 구성 요소(키워드): 클라이언트 / 메타스토어 / 임팔라 데몬 / 스테이트 스토어 / 스토리지

  마무리: 시험용 키워드 체크

  • DFS: GFS(Chunk 64MB, Master/ChunkServer) / HDFS(NameNode/DataNode, 3중 복제, 스트리밍/배치)
  • 클러스터: 공유디스크 vs 무공유디스크 차이(병목/확장/장애처리)
  • NoSQL: 모델 4종 + Bigtable/HBase/SimpleDB
  • MapReduce: split→map→shuffle/sort→reduce + (하둡 구성 요소)
  • SQL on Hadoop: Impala(맵리듀스 X)