노출(Exposure)로 DAG의 소비처 정의하기
노출(Exposure)로 DAG의 소비처 정의하기
dbt로 만든 데이터가 결국 어디에 쓰이는지, DAG에 그 소비처까지 함께 표현하고 싶다면 **노출(exposure)**을 쓰면 돼요. 노출은 대시보드, 애플리케이션, 데이터 사이언스 파이프라인 같은 dbt 프로젝트의 다운스트림 사용처를 정의하고 설명할 수 있게 해 주는 개념이에요. 노출을 정의하면 그 노출로 이어지는 리소스를 실행·테스트·나열할 수 있고, 자동 생성되는 문서 사이트에 데이터 소비자에게 필요한 맥락을 담은 전용 페이지를 만들 수 있어요.
노출의 두 가지 방식
노출은 두 가지 방식으로 정의할 수 있어요.
- 수동(Manual) — 프로젝트의 YAML 파일에 명시적으로 선언해요.
- 자동(Automatic) — dbt Cloud가 지원되는 통합에 대해 다운스트림 노출을 자동으로 만들고 시각화해요. 이 자동 노출은 YAML 파일에 존재하지 않지만 메타데이터 시스템에 저장되고 카탈로그에 나타나며, 수동 노출처럼 동작해요.
노출 선언하기
노출은 .yml 파일의 exposures: 키 아래에 정의해요. models/<filename>.yml 파일에 노출을 선언한 예시를 볼게요.
exposures:
- name: weekly_jaffle_metrics
label: Jaffles by the Week
type: dashboard
maturity: high
url: https://bi.tool/dashboards/1
description: >
Did someone say "exponential growth"?
depends_on:
- ref('fct_orders')
- ref('dim_customers')
- source('gsheets', 'goals')
- metric('count_orders')
owner:
name: Callum McData
email: [email protected]
사용할 수 있는 속성
필수(Required):
- name: 스네이크 케이스로 작성한 고유한 노출 이름
- type:
dashboard,notebook,analysis,ml,application중 하나 (문서 사이트에서 그룹짓는 데 사용) - owner:
name또는email중 하나는 필수이고, 추가 속성도 허용돼요
기대하는 속성(Expected):
- depends_on: 참조할 수 있는 노드의 목록으로
metric,ref,source를 포함해요. 노출이source에 직접 의존하게 만들 일은 거의 없어요.
여기서 주의할 점이 하나 있어요. 이 depends_on YAML 속성을, 모델 SQL 파일 맨 위에 정의하는 -- depends_on SQL 주석 지시문과 혼동하면 안 돼요. SQL 주석 지시문은 DAG에 의존성을 명시적으로 추가해 참조된 리소스가 모델보다 먼저 빌드되도록 보장하지만, 노출의 depends_on은 그런 용도가 아니에요.
선택(Optional):
- label: 공백, 대문자, 특수문자가 들어갈 수 있어요.
- url: 생성된 문서 사이트 오른쪽 위의 View this exposure 링크를 활성화하고 채워요.
- maturity: 노출의 신뢰도나 안정성 수준을 나타내며
high,medium,low중 하나예요. 이미 널리 쓰이고 신뢰받는 대시보드라면high, 새롭거나 실험적인 분석이라면low를 쓰는 식이에요.
일반 속성(선택):
- description
- tags
- meta
- enabled — 노출 레벨 또는
dbt_project.yml의 프로젝트 레벨에서 설정할 수 있어요.
노출 참조하기
노출을 정의하고 나면 그 노출을 참조하는 명령을 실행할 수 있어요.
dbt run -s +exposure:weekly_jaffle_report
dbt test -s +exposure:weekly_jaffle_report
문서 사이트를 생성하면 노출이 별도 섹션으로 나타나요. 프로젝트 이름 아래에 프로젝트의 각 노출을 나열하는 전용 섹션이 생기고, DAG에서도 노출은 주황색 EXP 표시가 있는 노드로 나타나죠.