메인 콘텐츠로 건너뛰기
사용자가 자주 묻는 질문 중 하나는 materialized views와 프로젝션을 각각 언제 사용해야 하는지입니다. 이 문서에서는 두 기능의 주요 차이점과 특정 시나리오에서 어느 쪽을 선택하는 것이 적절한지 살펴보겠습니다.

주요 차이점 요약

아래 표는 여러 측면에서 materialized view와 프로젝션의 주요 차이점을 요약한 것입니다.

materialized view와 프로젝션 비교

materialized view를 선택할 때

다음과 같은 경우 materialized view 사용을 고려해야 합니다:
  • 실시간 ETL 및 다단계 데이터 파이프라인을 다루는 경우: 데이터가 들어오는 즉시 복잡한 변환이나 집계를 수행하거나 데이터를 라우팅해야 하며, 경우에 따라 뷰를 연결해 여러 단계로 처리해야 합니다.
  • 복잡한 비정규화가 필요한 경우: 여러 소스(테이블, 서브쿼리 또는 딕셔너리)의 데이터를 쿼리에 최적화된 단일 테이블로 미리 조인해야 하며, 특히 갱신 가능 구체화 뷰를 사용한 주기적인 전체 갱신을 허용할 수 있다면 적합합니다.
  • 명시적인 스키마 제어가 필요한 경우: 사전 계산된 결과를 저장하기 위해 자체 스키마와 engine을 갖는 별도의 대상 테이블이 필요하며, 이를 통해 데이터 모델링의 유연성을 더 높일 수 있습니다.
  • 수집 시점에 필터링하려는 경우: 데이터가 구체화되기 에 필터링해야 하며, 이렇게 하면 대상 테이블에 기록되는 데이터 양을 줄일 수 있습니다.

materialized view 사용을 피해야 하는 경우

다음과 같은 경우에는 materialized view를 사용하지 않는 편이 좋습니다.
  • 원본 데이터가 자주 업데이트되거나 삭제되는 경우: 원본 테이블과 대상 테이블 간의 일관성을 유지하기 위한 추가 전략이 없으면 증분형 materialized view가 오래되어 일관성이 깨질 수 있습니다.
  • 단순성과 자동 최적화를 우선하는 경우: 별도의 대상 테이블을 관리하지 않으려는 경우입니다.

프로젝션을 선택해야 하는 경우

다음과 같은 경우 프로젝션 사용을 고려해야 합니다.
  • 단일 테이블에 대한 쿼리 최적화: 주된 목표가 대체 정렬 순서를 제공하거나, 프라이머리 키에 포함되지 않은 컬럼의 필터를 최적화하거나, 단일 기본 테이블의 집계를 미리 계산해 해당 테이블의 쿼리 성능을 높이는 것인 경우입니다.
  • 쿼리 투명성이 필요합니다. 즉, 쿼리를 수정하지 않고 원본 테이블을 그대로 대상으로 하면서, 주어진 쿼리에 가장 적합한 데이터 레이아웃을 ClickHouse가 선택하도록 하려는 경우입니다.

프로젝션 사용을 피해야 하는 경우

다음과 같은 경우에는 프로젝션 사용을 피하는 것이 좋습니다.
  • 복잡한 데이터 변환 또는 다단계 ETL이 필요한 경우: 프로젝션 정의에서는 JOIN 작업을 지원하지 않으며, 여러 단계의 파이프라인으로 연결할 수도 없고, 윈도우 함수나 복잡한 CASE 구문 같은 일부 SQL 기능도 처리할 수 없습니다. 프로젝션이 있는 테이블에 대한 쿼리에서는 자유롭게 조인을 사용할 수 있지만, 프로젝션 자체는 복잡한 데이터 변환에 적합하지 않습니다.
  • 구체화된 데이터를 명시적으로 필터링해야 하는 경우: 프로젝션 정의에서는 WHERE 절을 지원하지 않으므로, 프로젝션 자체에 구체화될 데이터를 필터링할 수 없습니다.
  • MergeTree가 아닌 테이블 엔진을 사용하는 경우: 프로젝션은 MergeTree 계열 엔진을 사용하는 테이블에서만 사용할 수 있습니다.
  • FINAL 쿼리가 필수인 경우: 프로젝션은 FINAL 쿼리와 함께 사용할 수 없으며, FINAL 쿼리는 경우에 따라 중복 제거에 사용됩니다.
  • 병렬 레플리카가 필요한 경우: 프로젝션에서는 이를 지원하지 않습니다.

요약

materialized view(Materialized View)와 프로젝션은 모두 쿼리 최적화와 데이터 변환에 유용한 강력한 도구이며, 일반적으로는 둘 중 하나만 선택해야 하는 것으로 보지 않는 것이 좋습니다. 대신 두 기능을 상호 보완적으로 활용하면 쿼리를 최대한 효율적으로 사용할 수 있습니다. 따라서 ClickHouse에서 materialized view와 프로젝션 중 무엇을 선택할지는 궁극적으로 구체적인 사용 사례와 액세스 패턴에 따라 달라집니다. 일반적인 경험칙으로, 하나 이상의 소스 테이블에서 데이터를 집계해 대상 테이블에 반영해야 하거나 대규모의 복잡한 변환을 수행해야 한다면 materialized view 사용을 고려해야 합니다. materialized view는 비용이 큰 집계 작업을 쿼리 시점에서 삽입 시점으로 옮기는 데 매우 효과적입니다. 일별 또는 월별 롤업, 실시간 대시보드, 데이터 요약에 특히 적합합니다. 반면, 디스크에 저장된 데이터의 물리적 정렬을 결정하는 테이블의 프라이머리 키에 사용된 컬럼이 아닌 다른 컬럼으로 필터링하는 쿼리를 최적화해야 한다면 프로젝션을 사용하는 것이 좋습니다. 특히 테이블의 프라이머리 키를 더 이상 변경할 수 없거나, 프라이머리 키만으로는 감당하기 어려울 정도로 액세스 패턴이 다양할 때 유용합니다.
마지막 수정일 2026년 6월 29일