dbt란 무엇인가 — 모델과 Materialization
50 dbt Interview Questions for Data Engineers (Real Answers, 2026) — 미상 (데이터 엔지니어링 커리어 블로그, 2026) Section 1: dbt Fundamentals, Q1-Q3 (pp.1-2)
이 모듈을 다 읽으면
- dbt가 ELT 파이프라인에서 담당하는 역할(변환 전용)과 EL 도구의 경계를 설명할 수 있다
- dbt 모델의 정의와 SELECT문이 DDL/DML로 컴파일되는 과정을 설명할 수 있다
- materialization 종류별 트레이드오프를 근거로 어떤 상황에 어떤 materialization을 선택할지 판단할 수 있다
dbt(data build tool)는 분석가와 엔지니어가 SELECT 문만 작성하면 그 실행 계획(DDL/DML)을 대신 관리해주는 오픈소스 SQL 변환 프레임워크다. dbt는 데이터를 추출·적재하지 않고 이미 웨어하우스에 있는 데이터만 변환한다는 경계가 핵심이며, 모델은 이 변환의 최소 단위다. 모델이 어떤 오브젝트로 구체화되는지는 materialization 설정이 결정하는데, dbt-core가 오래전부터 제공해 온 네 가지 외에 최근에는 어댑터별로 다섯 번째 materialization도 추가됐다.
dbt가 해결하는 문제와 ELT에서의 위치
dbt 이전에는 팀들이 수백 개의 손으로 작성한 CREATE TABLE/INSERT 문을 버전 관리도, 테스트도, 리니지 추적도 없이 운영했다. dbt는 SQL 변환 로직을 Git 버전관리, CI, 자동 문서화, 의존성 그래프가 딸린 소프트웨어처럼 다룰 수 있게 만들어 이 문제를 해결한다.
인터뷰에서 자주 놓치는 포인트는 dbt가 추출(Extract)이나 적재(Load)를 하지 않는다는 경계다. dbt는 이미 웨어하우스 안에 존재하는 원천 데이터만 변환(Transform)하며, 데이터를 웨어하우스로 가져오는 일은 Fivetran이나 Airbyte 같은 별도의 EL 도구가 담당한다. 이 역할 분리 덕분에 dbt는 'ELT' 아키텍처에서 T(Transform) 계층 전용 도구로 자리 잡았다.
핵심 포인트
- dbt는 SQL 변환을 Git·CI·문서화·의존성 그래프가 딸린 소프트웨어 엔지니어링 관행으로 다루게 해준다
- dbt는 추출(E)·적재(L)를 하지 않고, 이미 웨어하우스에 있는 데이터의 변환(T)만 담당한다
- 데이터를 웨어하우스로 가져오는 일은 Fivetran/Airbyte 같은 별도 EL 도구의 몫이다
dbt 모델과 Materialization 선택
모델은 models/ 디렉터리 아래 저장된 단일 SELECT문(.sql 파일)이다. dbt run을 실행하면 dbt는 이 SELECT문을 설정된 materialization에 맞는 DDL(CREATE TABLE, CREATE VIEW, MERGE 등)로 감싸 웨어하우스에서 실행한다. 테스트·문서·리니지 같은 dbt의 다른 모든 기능은 이 모델 단위에 부착된다.
dbt-core가 오래전부터 내장해 온 materialization은 네 가지다. view는 매 쿼리마다 SQL을 재실행하는 가벼운 뷰로, 데이터를 지속시킬 필요가 없을 때 쓴다. table은 매 실행마다 전체를 재구축하며, 다운스트림이 빠른 읽기를 필요로 하고 전체 재구축 비용을 감당할 수 있을 때 쓴다. incremental은 신규/변경분만 처리해 재구축이 너무 느리거나 비쌀 만큼 큰 팩트 테이블에 적합하다. ephemeral은 독립된 오브젝트로 구체화되지 않고, 이를 참조하는 모델의 컴파일된 SQL 안에 CTE로 인라인된다.
— 정정: '네 가지 materialization'이라는 설명은 dbt-core 1.6(2023년 7월 릴리스) 이전 기준이다. 이후 Snowflake, Postgres, Redshift, Databricks 등 여러 어댑터가 materialized_view라는 다섯 번째 materialization을 지원하기 시작했다. 이는 매 실행마다 전체를 재구축하는 대신, 웨어하우스가 네이티브로 제공하는 자동 갱신(incremental refresh) 매터리얼라이즈드 뷰 오브젝트를 dbt가 관리하도록 해준다. 2026년 현재 인터뷰에서 '네 가지'라고만 답하면 최신 기능을 놓친 것으로 보일 수 있으므로, 'dbt-core 기본 네 가지 + 어댑터별로 지원하는 materialized_view'라고 답하는 것이 더 정확하다.
핵심 포인트
- 모델은 models/ 안의 단일 SELECT문(.sql 파일)이며, dbt run 시 설정된 materialization에 맞는 DDL로 컴파일된다
- 전통적 네 가지: view(매 쿼리 재실행), table(매 실행 전체 재구축), incremental(신규/변경분만 처리), ephemeral(CTE로 인라인, 독립 오브젝트 없음)
- dbt-core 1.6(2023)부터 Snowflake/Postgres/Redshift/Databricks 등에서 materialized_view가 다섯 번째 materialization으로 추가됐다 — 정정
- materialization 선택은 데이터 신선도 요구, 재구축 비용, 다운스트림 읽기 성능 사이의 트레이드오프로 결정한다