TTL — 컬럼/테이블 단위 자동 만료와 계층 이동
ClickHouse 복제(ReplicatedMergeTree/Keeper) 및 TTL 공식 문서·기술 블로그 종합 (웹 리서치, 2026) — ClickHouse 공식 문서(engines/table-engines/mergetree-family/replication, concepts/features/operations/delete/ttl) ClickHouse 공식 문서 Manage data with TTL
이 모듈을 다 읽으면
- 컬럼 단위 TTL과 테이블 단위 TTL이 각각 무엇을 하는지 구분할 수 있다
- 여러 TTL 규칙을 조합해 데이터를 계층적으로 이동·삭제하는 패턴을 설계할 수 있다
clickhouse-learn-03에서 언급만 된 TTL을 구체화한다 — 컬럼 값을 초기화하는 컬럼 단위 TTL과, 행을 이동·삭제하는 테이블 단위 TTL, 그리고 여러 규칙을 조합한 계층 이동 패턴을 정리한다.
컬럼 단위 TTL vs 테이블 단위 TTL
컬럼 단위 TTL은 특정 컬럼에 지정한 기간이 지나면 그 컬럼의 값만 해당 데이터 타입의 기본값으로 초기화한다(행 자체는 남아있고 그 컬럼만 비워짐) — 예를 들어 상세 로그 메시지처럼 오래되면 더 이상 필요 없는 세부 필드를 지우면서도 나머지 요약 정보는 남기고 싶을 때 쓴다. 테이블 단위 TTL은 행 전체를 대상으로 하며, 기간이 지나면 DELETE(기본, 행 삭제), TO DISK/TO VOLUME(다른 저장 계층으로 이동), RECOMPRESS(재압축) 같은 동작을 수행한다. TTL 표현식은 항상 DateTime/Date 타입 컬럼을 기준으로 계산된다.
핵심 포인트
- 컬럼 단위 TTL: 행은 남기고 특정 컬럼 값만 기본값으로 초기화
- 테이블 단위 TTL: 행 전체 대상, DELETE(기본)/TO DISK/TO VOLUME/RECOMPRESS 등 동작 지정 가능
- TTL 표현식은 항상 DateTime/Date 컬럼 기준으로 계산된다
여러 TTL 규칙을 조합한 계층 이동 패턴
테이블 하나에 여러 TTL 규칙을 동시에 걸 수 있고, 각 행은 그 규칙들을 독립적으로 평가받는다 — 예를 들어 '30일 지나면 TO DISK로 저비용 디스크로 이동', '180일 지나면 TO VOLUME으로 아카이브 볼륨으로 다시 이동', '365일 지나면 DELETE로 완전 삭제' 세 규칙을 함께 걸어두면, 각 행은 나이가 들면서 이 순서대로 이동·삭제된다. 다만 DELETE 규칙은 테이블당 최대 하나만 걸 수 있고, 이동(TO DISK/TO VOLUME) 규칙은 여러 개를 순차적으로 걸 수 있다 — 이 패턴은 elasticsearch 카테고리에서 다룬 ILM의 Hot-Warm-Cold-Frozen-Delete 계층 이동과 개념적으로 동일한 목적(오래된 데이터일수록 저비용 저장소로)을 각 시스템 나름의 방식으로 구현한 것이다.
핵심 포인트
- 여러 TTL 규칙(TO DISK→TO VOLUME→DELETE)을 동시에 걸어 나이에 따라 단계적으로 이동·삭제하는 패턴이 표준
- DELETE 규칙은 테이블당 최대 1개, 이동 규칙은 여러 개 순차 가능
- Elasticsearch ILM의 Hot-Warm-Cold-Frozen-Delete와 개념적으로 같은 목적(오래된 데이터일수록 저비용 저장소)을 다른 방식으로 구현