기업의 데이터 분석팀과 기술 운영팀은 비즈니스 부서로부터 반복적으로 인입되는 지표 조회 및 비정기 리포트 요청으로 인해 만성적인 업무 병목을 겪고 있습니다. 셀프서비스 BI 도구는 비기술 직군에게 여전히 다루기 어렵고, 기존의 문서 기반 검색 증강 생성(RAG) 지식베이스는 이러한 요구를 해결할 수 없습니다. 시맨틱 검색은 텍스트 벡터 유사도에 기반하므로 수백만 건의 레코드에 걸친 수치 합산, 그룹별 집계, 기간 필터링, 전환율 계산과 같은 정량적 분석을 수행할 수 없기 때문입니다.
Dust는 엔터프라이즈 구조화 데이터 웨어하우스 연동 기능과 Table queries(테이블 쿼리) 기능을 통해 이 한계를 근본적으로 해결합니다. Dust는 원천 데이터를 복제하거나 별도 저장소로 이전하지 않고도 Snowflake 및 Google BigQuery에 직접 연결하여 테이블 스키마(Table Schema) 메타데이터를 매핑합니다. 이를 기반으로 AI 에이전트가 통제된 읽기 전용 SQL을 생성 및 실행하고, 그 결과를 명확한 자연어 비즈니스 인사이트 및 차트로 변환합니다.
본 가이드에서는 Snowflake 및 Google BigQuery를 Dust에 안전하게 연결하고 테이블 스키마를 구성하여 자연어 데이터 조회 에이전트를 구축하는 아키텍처, 보안 설정, 프롬프트 최적화 기법을 상세히 다룹니다.
핵심 아키텍처: 원천 데이터 저장 없이 웨어하우스를 질의하는 원리
핵심 데이터 웨어하우스를 외부 AI 플랫폼과 연동할 때 엔터프라이즈 아키텍트의 최우선 고려 사항은 데이터 프라이버시와 거버넌스입니다. Dust는 '메타데이터 전용(Metadata-Only)' 접근 방식을 채택하고 있습니다:
- 원천 데이터 무동기화(Zero Data Sync): Dust는 Snowflake나 BigQuery에 저장된 고객 레코드를 자체 서버나 벡터 데이터베이스에 복제, 미러링, 저장하지 않습니다. 오직 데이터베이스명, 데이터세트 식별자, 스키마명, 테이블명, 컬럼명, 데이터 타입 및 웨어하우스에 정의된 설명(Description) 메타데이터만 수집하여 색인합니다.
- 스키마 컨텍스트 주입: 비즈니스 사용자가 "지난 분기 지역별 평균 주문 금액은 얼마인가요?"와 같은 정량적 질문을 입력하면, 에이전트는 등록된 테이블 스키마 정보를 참조하여 필요한 엔티티와 지표 컬럼을 식별합니다.
- 통제된 SQL 구문 생성: 대규모 언어 모델(LLM)은 대상 웨어하우스 규격(Snowflake SQL 또는 GoogleSQL)에 맞춰 정밀한 SQL 쿼리를 작성합니다.
- 웨어하우스 직결 읽기 전용 실행: 생성된 쿼리는 암호화된 연결을 통해 대상 데이터 웨어하우스로 전송되며, 사전에 지정된 읽기 전용 자격 증명으로 안전하게 실행됩니다.
- 결과 번역 및 투명한 감사: Dust는 반환된 테이블 결과를 분석하여 자연어 비즈니스 요약과 동적 차트를 제공합니다. 대화창의 Tools inspection(도구 검사) 버튼을 누르면 실제 실행된 SQL 문, 쿼리 소요 시간, 원본 반환 데이터를 즉시 검증할 수 있습니다.
방법 1: Snowflake를 Dust에 연결하기
Dust는 Snowflake 연동 방식으로 **Snowflake Connection(Spaces > Connections 관리형 연결)**과 **Snowflake Tool(OAuth 기반 에이전트 도구)**의 두 가지 경로를 제공합니다. 거버넌스가 확보된 엔터프라이즈 지표 질의 에이전트를 구성할 때는 관리형 Snowflake Connection이 주로 사용됩니다.
1. Snowflake 보안 및 인프라 프로비저닝
최소 권한 원칙(Principle of Least Privilege)에 따라 Snowflake 내에 Dust 전용 컴퓨팅 웨어하우스, 서비스 계정, 역할을 생성합니다:
-- 1단계: Dust 전용 역할 생성
CREATE ROLE dust_role;
-- 2단계: 자동 일시 중단이 설정된 전용 컴퓨팅 웨어하우스 생성
CREATE WAREHOUSE dust_warehouse
WITH WAREHOUSE_SIZE = 'XSMALL'
AUTO_SUSPEND = 300
AUTO_RESUME = TRUE;
GRANT USAGE ON WAREHOUSE dust_warehouse TO ROLE dust_role;
인증 방식 선택: 키 쌍(Key Pair) 인증 vs. 비밀번호 인증
Snowflake는 프로그래밍 방식의 단순 비밀번호 인증을 점진적으로 제한하고 있으므로, 프로덕션 환경에서는 **RSA 키 쌍 인증(Key Pair Authentication)**을 강력히 권장합니다.
RSA 키 쌍 인증 구성 (권장):
- 2048비트 RSA 프라이빗 키와 퍼블릭 키를 생성합니다:
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out dust_rsa_key.p8 -nocrypt openssl rsa -in dust_rsa_key.p8 -pubout -out dust_rsa_key.pub - 헤더, 푸터 및 줄바꿈을 제거한 순수 퍼블릭 키 문자열을 추출합니다:
cat dust_rsa_key.pub | grep -v "BEGIN PUBLIC KEY" | grep -v "END PUBLIC KEY" | tr -d '\n' - 퍼블릭 키가 바인딩된 Snowflake 전용 사용자를 생성합니다:
CREATE USER dust_user DEFAULT_ROLE = dust_role RSA_PUBLIC_KEY = '<추출한_퍼블릭_키_문자열_붙여넣기>'; GRANT ROLE dust_role TO USER dust_user;
대체 방안 (비밀번호 인증):
CREATE USER dust_user
PASSWORD = 'YourStrongPasswordHere'
DEFAULT_ROLE = dust_role;
GRANT ROLE dust_role TO USER dust_user;
2. 네트워크 정책 허용 및 읽기 전용 권한 부여
Snowflake 계정에 네트워크 정책(Network Policy)이 적용되어 있다면 Dust의 고정 아웃바운드 IP를 허용 목록에 추가해야 합니다:
- 미국 리전 워크스페이스 (
https://dust.tt):34.46.9.232 - EU 리전 워크스페이스 (
https://eu.dust.tt):35.195.191.222
이어서 데이터베이스 및 테이블 읽기 권한을 부여합니다. Dust 커넥터는 쓰기 또는 데이터 변조 권한(INSERT, UPDATE, DELETE, MERGE 등)이 포함된 역할을 자동으로 거부합니다:
-- 데이터베이스 및 스키마 USAGE 권한 부여
GRANT USAGE ON DATABASE analytics_dw TO ROLE dust_role;
GRANT USAGE ON SCHEMA analytics_dw.marts TO ROLE dust_role;
-- 물리적 테이블에 대한 SELECT 조회 권한 부여
GRANT SELECT ON ALL TABLES IN SCHEMA analytics_dw.marts TO ROLE dust_role;
GRANT SELECT ON FUTURE TABLES IN SCHEMA analytics_dw.marts TO ROLE dust_role;
중요 안내: 관리형 Snowflake Connection은 물리적 테이블(Tables)만 인식하며, 일반 뷰(Views)나 구체화된 뷰(Materialized Views)는 제외됩니다. 뷰 조회가 반드시 필요한 구조라면 OAuth 기반의 Snowflake Tool을 사용해야 합니다.
3. Dust 콘솔에서 연결 등록
- Dust에 로그인한 후 Spaces > Connections로 이동하여 Add Connections를 누르고 Snowflake를 선택합니다.
- 인증 방식으로 Key Pair Authentication(또는 비밀번호)을 선택합니다.
- 세부 접속 정보를 입력합니다:
- Account Identifier: 계정 식별자(예:
xy12345.us-east-1또는조직명-계정명) - Role:
dust_role - Warehouse:
dust_warehouse - Username:
dust_user - Private Key: 헤더와 푸터를 포함한 PEM 형식의 프라이빗 키 전체 내용을 입력
- Account Identifier: 계정 식별자(예:
- 에이전트에 노출할 데이터베이스, 스키마 및 대상 테이블을 선택합니다.
방법 2: Google BigQuery를 Dust에 연결하기
Google BigQuery는 Google Cloud Platform(GCP) IAM 서비스 계정 키를 통해 연결되며, 리전별 데이터 격리와 컬럼 설명 자동 수집을 지원합니다.
1. GCP 서비스 계정 및 IAM 역할 설정
- Google Cloud Console에서 IAM 및 관리 > 서비스 계정으로 이동합니다.
- 서비스 계정 만들기를 클릭하고 이름(예:
dust-warehouse-sa)을 지정합니다. - 다음 두 가지 필수 IAM 역할을 부여합니다:
roles/bigquery.user: 쿼리 작업(Query Jobs) 실행, 데이터세트 메타데이터 조회, 컴퓨팅 리소스 사용 권한roles/bigquery.dataViewer: 데이터세트 스키마 검사 및 테이블 데이터 조회 권한
- 생성된 서비스 계정의 키 탭으로 이동합니다.
- 키 추가 > 새 키 만들기 > JSON을 선택합니다.
- 다운로드된 JSON 자격 증명 파일을 안전하게 보관합니다.
2. Dust에서 BigQuery 데이터 원천 등록
- Dust의 Spaces > Connections > Add Connections에서 BigQuery를 선택합니다.
- 다운로드한 서비스 계정 JSON 키 전체를 입력창에 붙여넣습니다.
- BigQuery 위치(Location) 선택: BigQuery는 서로 다른 리전 간의 쿼리(예:
EU데이터세트와US데이터세트 간의 JOIN)를 엄격히 금지합니다. 단일 대상 리전(US,EU,us-central1등)을 선택해야 하며, 이 연결에서 질의할 모든 데이터세트는 동일한 위치에 있어야 합니다. - 공개할 데이터세트와 테이블을 선택합니다.
- "Use BigQuery descriptions" 활성화: 이 옵션을 체크하면 BigQuery 테이블 및 컬럼에 등록된 설명이 에이전트의 컨텍스트로 자동 수집되므로, 프롬프트에 중복으로 컬럼 설명을 작성할 필요가 없습니다.
비교 분석: Snowflake Connection vs. Snowflake Tool
Snowflake 연동을 설계할 때 조직의 요구사항에 맞춰 최적의 방식을 선택합니다:
| 평가 기준 | Snowflake Connection (관리형 연결) | Snowflake Tool (OAuth 도구) |
|---|---|---|
| 주요 활용 사례 | 비즈니스 사용자를 위한 통제된 표준 분석 테이블 질의 | 분석가를 위한 동적 스키마 탐색 및 뷰(View) 질의 |
| 인증 아키텍처 | 중앙 집중식 서비스 계정(키 쌍 또는 비밀번호) | 사용자 개별 OAuth(개인 권한 적용) 또는 워크스페이스 OAuth |
| 지원 객체 | 물리적 테이블만 지원 (뷰 제외) | 물리적 테이블, 일반 뷰, 구체화된 뷰(Materialized View) |
| 행 반환 한도 | 단일 쿼리당 최대 25,000행 | 단일 실행당 최대 1,000행 |
| 스키마 탐색 | 관리자가 Space 설정에서 사전에 정의 | 에이전트가 런타임에 list_schemas, describe_table 호출 |
| 복수 쿼리 실행 방지 | 세미콜론 다중 실행 차단 | 세미콜론 다중 실행 차단 |
자연어 질의 AI 에이전트 구성 및 프롬프트 엔지니어링
데이터 웨어하우스 테이블이 연결되면 데이터 분석가는 비즈니스 직군을 위한 전용 에이전트(예: @매출분석어시스턴트)를 생성할 수 있습니다.
1. Query Tables 도구 추가
- Agent Builder > Instructions & Tools로 이동합니다.
- Action & Data sources 섹션에서 Add a tool을 클릭하고 Query Tables를 선택합니다.
- 쿼리 대상이 될 Snowflake 또는 BigQuery 테이블(예:
marts.fct_daily_orders)을 지정합니다.
2. 조인(JOIN) 규칙 및 비즈니스 로직 프롬프트 작성
모델이 스키마의 데이터 타입을 인지하더라도, 다차원 조인 및 업무 집계 기준에 대한 명확한 규칙을 제공해야 통계 왜곡을 방지할 수 있습니다:
당신은 경영진 및 사업팀의 지표 질문에 답변하는 데이터 분석 에이전트입니다. 다음 데이터 웨어하우스 테이블에 접근할 수 있습니다:
- fct_orders: 거래 내역, 주문 금액, 주문 상태 저장.
- dim_customers: 고객 등급, 가입일, 기업 프로필 저장.
SQL 쿼리 작성 및 답변 지침:
1. 테이블 결합 시 항상 dim_customers.customer_id = fct_orders.customer_id 를 조인 키로 사용하세요.
2. 실현 매출을 집계할 때는 미결제 파이프라인 집계를 명시적으로 요구하지 않는 한 반드시 order_status = 'COMPLETED' 조건을 적용하세요.
3. 불필요한 부하를 줄이기 위해 SELECT * 사용을 지양하고 필요한 컬럼만 명시하세요.
4. 시간 흐름에 따른 추이를 비교할 때는 UTC 타임스탬프를 월별 또는 분기별로 그룹화하세요.
5. 수치 테이블을 제시한 후, 주요 증가/감소 요인을 요약한 간결한 자연어 분석 결론을 함께 제공하세요.
3. Tools Inspection을 통한 쿼리 실행 감사
사용자가 질문을 입력하면 Dust는 스키마 주입, SQL 작성, 웨어하우스 실행, 답변 렌더링 과정을 거칩니다. 사용자는 답변 카드의 Tools inspection을 클릭하여 모델이 작성한 원본 SQL 문, 실행 지연 시간, 반환된 로우 데이터를 즉시 검증할 수 있어 신뢰도를 확보할 수 있습니다.
데이터 분석 및 운영팀을 위한 실무 권장 사항
- 원천 데이터(Bronze) 대신 정제된 데이터 마트(Gold) 연결: dbt 등을 거친 정규화 비즈니스 마트 테이블을 Dust에 연결하세요. 스키마가 단순하고 컬럼명이 명확할수록 SQL 생성 정확도가 비약적으로 향상됩니다.
- 웨어하우스 차원의 컬럼 주석(COMMENT) 관리: BigQuery 및 Snowflake DDL의 COMMENT 기능을 적극 활용하세요. 메타데이터 주석이 충실하면 프롬프트에 구구절절 작성하지 않아도 AI가 도메인 약어(MRR, CAC, LTV 등)를 자연스럽게 파악합니다.
- 컴퓨팅 비용 최적화 통제:
- Snowflake에서는
XSMALL크기의 웨어하우스를 할당하고AUTO_SUSPEND를 300초 이하로 구성하세요. - BigQuery에서는 서비스 계정에 프로젝트 단위의 쿼리당 바이트 스캔 한도를 설정하여 대용량 테이블 풀스캔 사고를 방지하세요.
- Snowflake에서는
- 문서 RAG와 테이블 쿼리의 하이브리드 조합: 에이전트에
Query Tables와 문서 기반Search Data Source도구를 동시에 탑재할 수 있습니다. 이를 통해 BigQuery에서 추출한 정량적 매출 수치와 Notion의 전략 회고록을 결합하여 수치 변동의 원인까지 한 번에 설명하는 통합 보고서를 생성할 수 있습니다.