ClickHouse 100일 챌린지 28일차 – TTL(Time To Live)로 자동 데이터 수명 관리 이해하기

발행: (2026년 6월 20일 PM 11:51 GMT+9)
11 분 소요
원문: Dev.to

출처: Dev.to

도입

데이터가 시간이 지남에 따라 늘어나면서 모든 행을 영구히 저장하는 것은 비용이 증가하고 종종 필요하지 않게 됩니다.
애플리케이션 로그, IoT 이벤트, 모니터링 메트릭, 감사 기록 및 클릭스트림 데이터는 보통 나이에 따라 다른 보존 요구 사항을 가집니다.

ClickHouse®는 **TTL (Time To Live)**이라는 강력한 내장 기능을 제공하여 데이터 수명 주기 관리를 자동화합니다.
스케줄된 청소 스크립트나 수동 DELETE 작업을 대신해 TTL 규칙은 테이블 스키마 내에서 직접 정의할 수 있습니다.

With TTL, ClickHouse can automatically:

  • 만료된 데이터 삭제
  • 낮은 비용의 저장소로 오래된 데이터 이동
  • 경과된 데이터에 대해 더 강력한 코덱을 사용해 재압축
  • 역사적 레코드를 요약된 데이터로 집계

이 기능들은 TTL이 ClickHouse에서 사용할 수 있는 가장 효과적인 저장소 최적화 기능 중 하나임을 의미합니다.

TTL(Time To Live)은 무엇인가?

TTL(Time To Live)은 지정된 기간이 지난 후에 데이터에 대해 수행되어야 할 작업을 정의합니다.

A TTL expression is usually based on a Date or DateTime column.

TTL event_time + INTERVAL 30 DAY 

지정된 간격이 지나면 ClickHouse는 배경 머지 작업 중에 설정을 수행합니다.

스케줄된_jobs와 달리, TTL은 MergeTree 엔진에 완전히 통합되어 있어 수명 주기 관리가 자동화되고 유지 보수가 필요 없습니다.

TTL(Time To Live)이 어떻게 작동하나요?

새로운 데이터가 MergeTree 테이블에 삽입될 때 다음 과정이 발생합니다:

  • 데이터는 불변 파트에 기록됩니다.
  • 배경 머지 작업이 작은 부분을 더 큰 부분으로 결합합니다.
  • 각 머지 동안 ClickHouse는 TTL 표현을 평가합니다.
  • 설정된 규칙에 따라 만료된 행은 삭제되거나 이동되거나 재압축되거나 집계될 수 있습니다.

Because TTL works during merges:

  • 만료된 데이터는 짧은 기간 동안 표시될 수 있습니다.
  • 정리 작업은 비동기적으로 수행됩니다.
  • 실행은 머지 일정에 따라 달라집니다.

For testing purposes, you can force a merge using:

OPTIMIZE TABLE table_name FINAL; 

1. 자동으로 만료된 데이터 삭제

TTL의 가장 일반적인 사용 사고는 자동 데이터 삭제입니다.

CREATE TABLE logs
( 
    timestamp DateTime, 
    message String 
) 
ENGINE = MergeTree 
ORDER BY timestamp 
TTL timestamp + INTERVAL 30 DAY; 

What happens?

  • 새로 삽입된 데이터는 계속 사용할 수 있습니다.
  • 30일이 지나면 행은 삭제 대상으로 표시됩니다.
  • 미래의 배경 머지 작업 중에 ClickHouse는 자동으로 만료된 행을 삭제합니다.

이 방법으로 cron 잡이나 주기적인 청소 스크립트의 필요성을 없애면서 자동으로 저장소 사용량을 줄일 수 있습니다.

2. 컬럼 수준 TTL

TTL은 전체 행에만 제한되지 않고 개별 컬럼에도 적용될 수 있습니다.

CREATE TABLE user_events
( 
    event_time DateTime, 
    user_id UInt64, 
    session_ data String TTL event_time + INTERVAL 7 DAY 
) 
ENGINE = MergeTree 
ORDER BY event_time; 

결과

일곱 날 후:

session_data이 삭제됩니다.

  • 남은 컬럼은 그대로 유지됩니다.

임시 또는 민감한 정보가 일정 기간 동안만 보관되어야 하는 경우 특히 유용합니다.

3. 데이터 이동: Cold Storage

여러 조직은 여러 저장소 계층을 사용합니다.

저장소 계층목적
SSD최근 자주 액세스되는 데이터
HDD / Object Storage역사적 또는 드물게 액세스되는 데이터

TTL은 오래된 데이터를 저장소 간에 자동으로 이동할 수 있습니다.

CREATE TABLE logs
( 
    timestamp DateTime, 
    message String 
) 
ENGINE = MergeTree 
ORDER BY timestamp 
TTL timestamp + INTERVAL 90 DAY 
TO VOLUME 'cold_storage'; 

결과

  • 최근 데이터는 빠른 저장소에 유지됩니다.
  • 오래된 데이터는 저비용 저장소로 이동됩니다.

이는 인프라 비용을 절감하면서 필요한 시점에 역사적 데이터를 이용할 수 있게 합니다.

4. 오래된 데이터 재압축

최근 데이터는 자주 쿼리되며 LZ4와 같은 빠른 압축 코덱의 이점을 누립니다.
역사적 데이터는 덜 자주 접근되어 더 강력한 압축이 효율적입니다.
TTL은 자동 재압축을 지원합니다.

CREATE TABLE events
( 
    event_time DateTime, 
    user_id UInt64, 
    value Float64 
) 
ENGINE = MergeTree 
ORDER BY event_time 
TTL event_time + INTERVAL 30 DAY 
RECOMPRESS CODEC(ZSTD(17)); 

압축 수명 주기

데이터 연령압축
0–30일기본 (LZ4)
30일 이후ZSTD(17)

Benefits

  • 저장소 사용량 감소
  • 디스크 활용 효율 향상
  • 완전 자동화된 최적화
  • 수동 재압축 필요 없음

5. GROUP BY TTL을 통한 역사적 데이터 집계

TTL의 가장 강력한 기능 중 하나는 자동 롤업 집계입니다.

데이터를 삭제하는 대신 ClickHouse는 역사적 레코드를 요약된 값으로 집계할 수 있습니다.

이功能은 특히 유용합니다:

  • 모니터링 시스템
  • IoT 플랫폼
  • 클릭스트림 분석
  • 시계열 데이터베이스

Example

CREATE TABLE hits
( 
    timestamp DateTime, 
    id String, 
    hits Int32, 
    max_hits Int32 DEFAULT hits, 
    sum_hits Int64 DEFAULT hits 
) 
ENGINE = MergeTree 
PRIMARY KEY (id, toStartOfDay(timestamp), timestamp) 
TTL timestamp + INTERVAL 1 DAY 
GROUP BY 
    id, 
    toStartOfDay(timestamp) 
SET 
    max_hits = max(max_hits), 
    sum_hits = sum(sum_hits); 

Before Rollup

TimestampIDHits
10:00A5
11:00A8
12:00A12

After one day, the TTL rule executes:

TTL timestamp + INTERVAL 1 DAY 
GROUP BY 
    id, 
    toStartOfDay(timestamp) 
SET 
    max_hits = max(max_hits), 
    sum_hits = sum(sum_hits); 

After Rollup

DayIDMax HitsSum Hits
2026-06-20A1225

Instead of storing three separate rows, ClickHouse stores one summarized row. This significantly reduces storage while preserving meaningful historical insights.

TTL 사용을 위한 베스트 프랙티스

  • 예측 가능한 보존 정책을 위해 스케줄된 DELETE 문장 대신 TTL을 사용하세요.
  • TTL 동작이 즉시 만료 후가 아니라 배경 머지 작업 중에 이루어진다는 점을 기억하세요.
  • 특정 필드만 제한된 보존이 필요할 경우 컬럼 수준 TTL을 적용하세요.
  • 역사적 데이터를 잃지 않으면서 인프라 비용을 절감하기 위해 저장소 계층화를 사용하세요.
  • TTL과 재압축을 결합하여 디스크 효율을 극대화하세요.
  • GROUP BY TTL을 시간 시리즈 워크로드에 고려하세요. 여기서 요약된 역사적 데이터가 충분하다면.
  • OPTIMIZE TABLE ... FINAL은 정기적인 유지 보수 작업이 아니라 테스트용으로만 사용하세요.

결론

TTL은 데이터 수명 주기 관리를 위한 ClickHouse의 가장 가치 있는 자동화 기능 중 하나입니다. 단일 선언 규칙만으로 만료된 데이터를 자동 삭제하고, 저비용 저장소로 이동하며, 오래된 데이터에 대해 더 강력한 압축을 적용하거나 상세 레코드를 요약된 통찰로 집계할 수 있습니다.

TTL을 효과적으로 활용하면 조직은 저장소 비용을 절감하고, 유지 보수를 단순화하며, 장기적인 성능을 향상시키고 외부 청소 작업이나 수동 개입 없이 확장 가능한 분석 시스템을 구축할 수 있습니다. 로그 데이터, 모니터링 메트릭, IoT 텔레메트리, 대용량 분석 워크로드를 관리하든 간에 TTL은 ClickHouse에서 자동화된 데이터 보존 정책을 구현하는 깨끗하고 효율적인 방법을 제공합니다.

0 조회
Back to Blog

관련 글

더 보기 »

보르헤스 도서관: 디지털

La biblioteca di Babele di Borges è diventata un'ossessione o metafora potente per pensare l'intelligenza artificiale contemporanea. Il racconto del 1941 descri...

업스트림 패치가 출시됐나요?

I maintain GIMP for Mac. I've done it since 2021, and most of the work isn't GIMP itself. It's the dependencies. So I can build for older Macs, I carry a pile o...