ClickHouse 실무 스터디 가이드

데이터 엔지니어 · 데이터 사이언티스트를 위한 핵심 요약

olap columnar analytics 2026.03 작성

1. ClickHouse란?

ClickHouse는 Yandex에서 개발된 오픈소스 컬럼 지향 OLAP(Online Analytical Processing) 데이터베이스 관리 시스템입니다. 초고속 쿼리 처리와 대용량 데이터 분석에 특화되어 있으며, 실시간 분석 워크로드를 효율적으로 처리합니다. 데이터 엔지니어와 데이터 사이언티스트가 대규모 로그, 시계열, 이벤트 데이터를 다룰 때 필수 도구입니다.

주요 특징: 압축률이 높고, 벡터화된 쿼리 실행, 분산 처리 지원으로 TB~PB급 데이터를 초 단위로 분석 가능.

1. Columnar Storage

행 지향 DB와 달리 컬럼 단위 저장으로 압축 효율 ↑, 읽기 성능 ↑. 분석 쿼리에서 필요한 컬럼만 로드.

2. Vectorized Execution

SIMD 명령어 활용으로 CPU 캐시 최적화. 집계/필터링 속도 10~100배 향상.

3. Distributed & Scalable

샤딩/복제 지원. ZooKeeper로 클러스터 관리. 수평 확장 용이.

2. 왜 써야 하는가?

전통 RDBMS(MySQL, PostgreSQL)는 OLTP에 강하지만 OLAP에서 병목. ClickHouse는 분석 쿼리에 최적화되어 비용/성능 우위.

기능 ClickHouse PostgreSQL MySQL BigQuery
쿼리 속도 (1TB 집계) 초 단위 분~시간 분~시간 초~분 (유료)
스토리지 비용 낮음 (압축 10x) 중간 중간 높음 (스토리지 별도)
오픈소스 예 예 예 아니오
실시간 삽입 100만+ TPS 10만 TPS 10만 TPS 스트리밍 지원
클러스터링 내장 확장 필요 (Citus) 확장 필요 관리됨
실무 사례: Netflix, Cloudflare, eBay에서 로그 분석/모니터링에 사용. 비용 90% 절감.

3. 핵심 개념

MergeTree 엔진: 기본 테이블 엔진. 데이터 파티션/정렬/기본키로 최적화. 배경 Merge로 데이터 병합.

Materialized View: 자동 집계 뷰. 실시간 대시보드에 유용.

샤딩/복제: ReplicatedMergeTree로 고가용성 확보.

아키텍처 다이어그램 (ASCII)

+----------------+ +----------------+ +----------------+ | Client |<--->| Load |<--->| ZooKeeper | | (Python/CLI) | | Balancer | | (Coordination) | +----------------+ +----------------+ +----------------+ | v +-----------------------------------------------------+ | ClickHouse Cluster | | +----------+ +----------+ +----------+ +----------+ | | | Shard 1 | | Shard 2 | | Shard 3 | | ... | | | | Replica1 | | Replica1 | | Replica1 | | | | | +----------+ +----------+ +----------+ +----------+ | | | Replica2 | | Replica2 | | Replica2 | | | +----------+ +----------+ +----------+ | +-----------------------------------------------------+ ^ | Data Parts (MergeTree) (Mutable → Immutable → Merged)

클라이언트 → 로드밸런서 → 샤드(데이터 분할) → 레플리카(복제본). ZooKeeper가 메타데이터 동기화.

4. 퀵스타트

1. 설치 (Docker 추천)

docker run -d --name ch-server --ulimit nofile=262144:262144 \ -p 8123:8123 -p 9000:9000 \ --volume /path/to/data:/var/lib/clickhouse \ clickhouse/clickhouse-server

2. CLI 연결

docker exec -it ch-server clickhouse-client

3. Python 클라이언트 설치 & 첫 예제

pip install clickhouse-connect
import clickhouse_connect client = clickhouse_connect.get_client(host='localhost', port=8123) # 테이블 생성 client.command(''' CREATE TABLE IF NOT EXISTS events ( timestamp DateTime, user_id UInt64, event_type String, value Float64 ) ENGINE = MergeTree() ORDER BY (timestamp, user_id) ''') # 데이터 삽입 client.insert_df('events', df) # pandas DataFrame 사용 # 쿼리 result = client.query_df('SELECT event_type, avg(value) FROM events GROUP BY event_type') print(result)
팁: Pandas 통합으로 ETL 파이프라인 간단. insert_df로 100만 행/초 삽입 가능.

5. 핵심 설정 레퍼런스

config.xml / users.xml에서 수정. 서버 재시작 필요.

설정 파일 기본값 설명 권장 실무값
max_memory_usage users.xml 10GB 쿼리당 메모리 제한 총 RAM 80%
max_threads users.xml CPU 코어 수 병렬 실행 스레드 CPU 코어 x 2
merge_tree.max_bytes_to_merge_at_max_space_in_pool config.xml 150GB Merge 풀 크기 디스크 여유 20%
background_pool_size config.xml 16 배경 작업 풀 CPU 코어 x 4
listen_host config.xml 127.0.0.1 바인드 IP 0.0.0.0 (클러스터)

6. 실무 팁 & 트러블슈팅

팁 1: 파티셔닝 최적화
toYYYYMM(timestamp)로 월 단위 파티션. 오래된 파티션 DROP으로 스토리지 관리.
문제: Memory limit exceeded
해결: max_memory_usage 증가 OR 쿼리 LIMIT/샘플링 추가. SET max_memory_usage = 20GB;
팁 2: 삽입 최적화
버퍼링: INSERT INTO ... SETTINGS async_insert=1. 10만 행 배치.
문제: Merge 지연
해결: OPTIMIZE TABLE FINAL; (야간 실행). background_pool_size 증가.
팁 3: 모니터링
system.asynchronous_metrics 테이블 쿼리. Grafana + ClickHouse 플러그인.
문제: Replica 불일치
해결: SYSTEM SYNC REPLICA; ZooKeeper 로그 확인.

추가: Kafka 엔진으로 스트리밍 인제스트. S3 테이블 함수로 외부 데이터 쿼리.

7. 참고 자료