ClickHouse

마지막 업데이트: 2026년 2월 23일

ClickHouse는 OLAP(Online Analytical Processing) 워크로드에 최적화된 오픈소스 컬럼 기반 데이터베이스입니다. 대규모 로그 분석에서 뛰어난 쿼리 성능과 압축률을 제공합니다.

목차


개요

ClickHouse의 특징

특징
설명

컬럼 기반 저장

분석 쿼리에 최적화된 데이터 저장 방식

높은 압축률

10:1 이상의 압축률로 스토리지 비용 절감

빠른 쿼리

수십억 행을 초 단위로 스캔

SQL 지원

표준 SQL로 쿼리 작성

수평 확장

샤딩을 통한 분산 처리

실시간 수집

초당 수백만 행 수집 가능

로그 분석에 ClickHouse를 선택하는 이유

로그 분석 요구사항:

요구사항
설명

대규모 데이터

일 TB 이상

복잡한 집계 쿼리

GROUP BY, JOIN

SQL 기반 분석

표준 SQL 지원

낮은 스토리지 비용

높은 압축률

빠른 쿼리 응답

초 단위

기존 BI 도구 연동

Grafana, Superset 등

위 요구사항에 해당한다면 ClickHouse가 적합한 선택입니다.

다른 솔루션과의 비교

항목
ClickHouse
Elasticsearch
Loki

쿼리 언어

SQL

Query DSL

LogQL

저장 방식

컬럼 기반

문서 기반

청크 기반

압축률

매우 높음

낮음

높음

전문 검색

제한적

우수

제한적

집계 쿼리

우수

양호

기본적

학습 곡선

SQL 친숙 시 낮음

중간

낮음

운영 복잡성

중간

높음

낮음


아키텍처

ClickHouse 클러스터 아키텍처

spinner

데이터 흐름

spinner

Kubernetes 배포

ClickHouse Operator 설치

ClickHouse 클러스터 정의

ZooKeeper (또는 ClickHouse Keeper) 배포


로그 수집 파이프라인

Buffer → Store → Distributed 3계층 설계

인터랙티브 시각화: ClickHouse 3-Tier Pipeline 애니메이션arrow-up-right을 통해 Buffer → Store → Distributed 데이터 흐름을 시각적으로 확인할 수 있습니다.

대규모 로그 환경(일 TB 이상)에서는 INSERT 요청이 집중될 때 작은 Part가 대량 생성되어 Merge 부하가 급증합니다. Buffer 엔진을 활용한 3계층 설계로 이 문제를 해결할 수 있습니다.

Buffer 엔진 역할:

  • INSERT 요청을 메모리에 모았다가 일정 조건(시간/행수/바이트) 충족 시 Store 테이블로 flush

  • 피크 시 대량의 작은 INSERT를 모아서 큰 Part로 생성 → Merge 부하 최소화

  • Part 수 폭증으로 인한 Too many parts 에러 방지

주의: Buffer 테이블의 데이터는 메모리에 있으므로, ClickHouse가 비정상 종료되면 flush되지 않은 데이터가 유실될 수 있습니다. Kafka와 함께 사용하면 재처리로 복구 가능합니다.

로그 테이블 스키마

Vector를 통한 수집

FluentBit을 통한 수집

Kafka를 통한 버퍼링 (대규모 환경)


SQL 쿼리

기본 쿼리

고급 분석 쿼리

실시간 대시보드용 쿼리


Grafana 연동

ClickHouse 데이터소스 설정

Grafana 대시보드 패널

알림 규칙


HyperDX (ClickHouse 네이티브 뷰어)

HyperDX는 ClickHouse를 직접 쿼리하는 네이티브 로그 뷰어입니다. Grafana나 Signoz와 달리 ClickHouse의 컬럼형 저장 구조를 직접 활용하여 필드 지정 검색에서 높은 성능을 발휘합니다.

핵심 장점

기능
설명

필드 지정 검색

ServiceName:payment 형태의 검색이 LIKE 검색보다 20배 이상 빠름

ClickHouse 네이티브

별도 인덱싱 계층 없이 ClickHouse 직접 쿼리

자동 스키마 감지

Buffer/Store/View 분리 구조 자동 인식

OTEL 호환

OpenTelemetry 로그 스키마 네이티브 지원

로그 뷰어 비교

기능
Grafana
Signoz
HyperDX

ClickHouse 네이티브

플러그인 필요

자체 스키마 강제

네이티브

필드 검색 속도

양호

양호

우수 (20x)

커스텀 스키마

지원

제한적

완전 지원

Buffer/Store 구조

수동 설정

미지원

자동 감지

배포 방식

독립 서비스

독립 서비스

독립 서비스

라이선스

AGPL-3.0

자체 라이선스

MIT

Signoz 한계: Signoz는 자체 정의 스키마를 강제하므로, Buffer → Store → Distributed 3계층 구조나 커스텀 Materialized 컬럼을 사용하는 환경에서는 제약이 있습니다.


성능 최적화

테이블 설계 최적화

Parts 최적화

ClickHouse의 MergeTree 엔진은 INSERT 시 Part를 생성하고, 백그라운드에서 Part를 병합(Merge)합니다. Part 크기와 개수의 균형이 쿼리 성능과 시스템 안정성을 좌우합니다.

Part 크기별 트레이드오프:

Part 특성
크기 큼 + 개수 적음
크기 작음 + 개수 많음

Merge 부하

Merge 시 메모리 급증

Merge 빈번, CPU 부하

쿼리 성능

스캔할 Part 적어 빠름

Part 열기 오버헤드 증가

INSERT 영향

큰 배치 필요

작은 배치 가능

위험

OOM 가능성

Too many parts 에러

운영 권장 기준:

항목
권장값

파티션당 Part 수

~20개 이하

Part당 크기

2-3GB

활성 파티션 수

시간 단위 파티셔닝 시 최근 24-48개

모니터링 쿼리:

쿼리 최적화

시스템 설정 최적화

리소스 가이드라인


S3 아카이빙 및 장기 보관

TTL로 삭제되기 전의 로그 데이터를 S3에 Parquet 형식으로 아카이빙하면 원본 대비 약 90%의 스토리지 비용을 절감할 수 있습니다.

아카이빙 파이프라인

S3 직접 아카이빙

워터마크 기반 진행 상태 추적

대규모 아카이빙에서는 워터마크 테이블로 진행 상태를 추적합니다.

아카이빙 지연 전략:

  • Merge 완료 대기: 2일 (Part 병합이 안정화될 때까지)

  • 재처리 여유: 1일 (데이터 수정/재수집 가능성 대비)

  • 총 지연: 3일 — 파티션 생성 후 3일 경과한 데이터부터 아카이빙

아카이브 데이터 직접 쿼리

S3에 아카이빙된 Parquet 파일을 별도 테이블 정의 없이 직접 쿼리할 수 있습니다.

비용 효과: 1TB 원본 로그 → S3 Parquet + ZSTD 압축 시 약 100GB (90% 절감). S3 Standard 기준 월 $2.3/TB로 장기 보관 가능.


퀴즈

이 장에서 배운 내용을 테스트하려면 ClickHouse 퀴즈를 풀어보세요.

마지막 업데이트