1편에서 Snowsight 기반 기본 사용법을 다뤘어요.
2편은 파워유저를 위한 CLI 실전이에요.
"Snowsight는 웹 UI라서 로컬 레포 접근이 안 된다." "dbt 프로젝트를 AI로 자동화하고 싶은데 일반 코딩 툴은 스키마를 모른다." "Claude Code랑 Cortex Code 중에 데이터 팀은 뭘 써야 하나?"
CLI는 이 세 문제를 동시에 해결해요. 로컬 파일 접근 + Snowflake 컨텍스트 + dbt/Airflow 지원이에요.
🔑 핵심 요약
Cortex Code CLI 핵심 → 2026.02.23 dbt + Apache Airflow GA 지원 추가 — Snowflake 밖 워크로드로 확장 → AGENTS.md: 프로젝트별 컨벤션 주입 (Claude Code의 CLAUDE.md 포지션) → 로컬 파일 읽기·쓰기, bash 명령 실행, git 연동, SQL 직접 실행 → ! 접두사로 셸 커맨드 실행 → 결과가 에이전트 컨텍스트로 유입 → Agent Skills($ 문법): 재사용 가능한 커스텀 태스크 번들 → 3단계 승인 시스템 + OS 샌드박스 + 자동 위험도 평가
실전 1 — CLI 설치 및 초기 세팅
# CLI 설치
pip install snowflake-cli-labs
# 또는 공식 스탠드얼론 설치 (Python 불필요)
curl -fsSL https://sfc-repo.snowflakecomputing.com/cortex-code/install.sh | bash
# Snowflake 계정 연결
cortex auth login
# → 브라우저 OAuth 인증 또는 키페어 인증 선택
# → 기존 SnowSQL 프로필 재사용 가능
# 연결 확인
cortex --version
# 프로젝트 디렉토리에서 CLI 시작
cd my-dbt-project
cortex
AGENTS.md 프로젝트 컨벤션 설정:
<!-- AGENTS.md — 프로젝트 루트에 위치, 모든 세션에 자동 포함 -->
## 프로젝트 컨텍스트
Finance Analytics dbt 프로젝트
소스 데이터: FINANCE_DB.RAW (TRANSACTIONS, CUSTOMERS, COMPLIANCE_ALERTS)
## 네이밍 컨벤션
- 컬럼명: snake_case
- Staging 모델 접두사: stg_
- Intermediate 모델 접두사: int_
- Mart 모델 접두사: mart_
- 서로게이트 키: dbt_utils.generate_surrogate_key 사용
## 타입 규칙
- 금액: DECIMAL(18,2)
- 날짜: DATE 캐스팅
- 타임스탬프: TIMESTAMP_NTZ
## 구체화 전략
- Staging: view
- Intermediate: ephemeral
- Mart: table (100만 행 초과 시 incremental)
- 대형 Mart 테이블: cluster_by 적용
## 품질 기준
- 모든 모델: 기본키 테스트 필수 (unique + not_null)
- Staging: 소스 freshness 테스트
- Mart: row count reconciliation
AGENTS.md vs CLAUDE.md: 동일한 개념이에요. Claude Code의 CLAUDE.md처럼 Cortex Code는 AGENTS.md를 프로젝트 루트에서 자동으로 읽어서 모든 세션에 컨텍스트로 포함해요. Snowflake 특화 컨벤션(클러스터 키, 웨어하우스 설정 등)을 여기에 정의해요.
실전 2 — dbt 프로젝트 자동화
CLI가 로컬 dbt 레포를 직접 읽고 쓰는 패턴이에요.
# CLI 시작 후 자연어로 dbt 작업
> "TRANSACTIONS 테이블 기반으로 일별 매출 집계 mart 모델 만들어줘"
# Cortex Code가 자동 생성:
# 1. models/mart/mart_daily_revenue.sql
# 2. models/mart/schema.yml (테스트 포함)
# 3. 실제 Snowflake 스키마 반영된 쿼리
-- Cortex Code가 생성한 mart_daily_revenue.sql
-- (실제 TRANSACTIONS 테이블 스키마 반영)
{{
config(
materialized='incremental',
unique_key='revenue_date',
cluster_by=['revenue_date'],
on_schema_change='fail'
)
}}
WITH source AS (
SELECT
DATE(created_at) AS revenue_date,
merchant_id,
SUM(gross_amount_usd) AS total_revenue,
SUM(net_amount_usd) AS net_revenue,
COUNT(DISTINCT transaction_id) AS transaction_count,
COUNT(DISTINCT customer_id) AS unique_customers
FROM {{ ref('stg_transactions') }}
WHERE status = 'COMPLETED'
{% if is_incremental() %}
AND created_at >= (SELECT MAX(revenue_date) FROM {{ this }})
{% endif %}
GROUP BY 1, 2
)
SELECT
{{ dbt_utils.generate_surrogate_key(['revenue_date', 'merchant_id']) }} AS revenue_key,
*,
CURRENT_TIMESTAMP() AS dbt_updated_at
FROM source
# schema.yml — 자동 생성
models:
- name: mart_daily_revenue
description: "일별 가맹점별 매출 집계 mart"
config:
contract:
enforced: true
columns:
- name: revenue_key
data_type: varchar
constraints:
- type: not_null
data_tests:
- unique
- not_null
- name: revenue_date
data_type: date
data_tests:
- not_null
- name: total_revenue
data_type: number
data_tests:
- not_null
- dbt_utils.accepted_range:
min_value: 0
셸 커맨드 + 에이전트 루프 결합:
# ! 접두사로 bash 커맨드 실행 — 결과가 에이전트 컨텍스트로 유입
> !dbt compile --select mart_daily_revenue
# → 컴파일 에러 자동 감지 + 수정 제안
# Cortex Code: "mart_daily_revenue.sql 46번째 줄에서
# ref('stg_transactions')가 없어요.
# stg_transactions 모델을 먼저 만들어드릴까요?"
> !dbt test --select mart_daily_revenue
# → 테스트 실패 시 자동 원인 분석 + 쿼리 수정 제안
실전 3 — Agent Skills로 반복 작업 자동화
Agent Skills는 $ 문법으로 호출하는 재사용 가능한 태스크 번들이에요.
# 빌트인 Skills 목록 확인
> $list-skills
# 데이터 거버넌스 스킬 — 테이블 태그·마스킹 정책 자동 적용
> $governance CUSTOMERS.email
# 시맨틱 모델 검증 스킬
> $validate-semantic-model SALES_SEMANTIC_MODEL
# Intelligence 에이전트 생성 스킬
> $create-agent "월간 매출 리포트 에이전트"
커스텀 Skill 정의:
# .cortex/skills/daily-report.yaml
name: daily-report
description: "일별 KPI 리포트 생성 및 Slack 발송"
steps:
- name: collect-metrics
sql: |
SELECT
DATE(CURRENT_TIMESTAMP()) AS report_date,
SUM(gross_amount_usd) AS daily_revenue,
COUNT(DISTINCT customer_id) AS active_customers
FROM PROD_DB.SALES.FACT_ORDERS
WHERE DATE(created_at) = CURRENT_DATE()
- name: send-slack
tool: slack_mcp
message: |
📊 일별 KPI 리포트 ({{report_date}})
• 매출: ${{daily_revenue:,.0f}}
• 활성 고객: {{active_customers:,}}명
channel: "#data-team"
# 커스텀 Skill 실행
> $daily-report
# GitHub Actions에서 스케줄 실행
# .github/workflows/daily-report.yml
name: Daily KPI Report
on:
schedule:
- cron: '0 9 * * 1-5' # 평일 오전 9시 KST
jobs:
report:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Cortex Code Report
env:
SNOWFLAKE_ACCOUNT: ${{ secrets.SF_ACCOUNT }}
SNOWFLAKE_TOKEN: ${{ secrets.SF_TOKEN }}
run: cortex run $daily-report
실전 4 — Cortex Code vs Claude Code vs Kiro 선택 기준
┌──────────────┬─────────────────┬──────────────┬──────────────┐
│ │ Cortex Code │ Claude Code │ Kiro │
├──────────────┼─────────────────┼──────────────┼──────────────┤
│ 데이터 컨텍스트│ 네이티브 (스키마│ 없음 (MCP │ 없음 │
│ │ RBAC 자동 인식) │ 설정 필요) │ │
│ dbt 지원 │ GA (2026.02) │ 일반 코드 │ 일반 코드 │
│ Airflow 지원 │ GA (2026.02) │ 일반 코드 │ 일반 코드 │
│ 데이터 보안 │ Snowflake 경계 │ API 외부 전송│ Bedrock 경유 │
│ 비Snowflake │ 제한적 │ 강점 │ AWS 스택 │
│ SWE-bench │ 미공개 │ 87.6% │ 미공개 │
│ 가격 │ Pay-as-you-go │ $20/월~ │ $19/월 │
│ 오픈소스 │ ❌ │ ❌ │ ❌ │
└──────────────┴─────────────────┴──────────────┴──────────────┘
Cortex Code가 맞는 팀:
✅ Snowflake 중심 데이터 팀 (데이터 엔지니어, 애널리스트)
✅ dbt + Snowflake 프로덕션 파이프라인 운영 중
✅ 금융·의료·보험 — 데이터 외부 전송 금지 환경
✅ Snowflake Intelligence 에이전트 빌딩
✅ SQL/Python 데이터 워크로드 중심 (백엔드 코드 거의 없음)
Claude Code가 맞는 팀:
✅ 풀스택 개발 (백엔드 API, 프론트엔드, 인프라)
✅ Snowflake 외 다양한 DB/클라우드 혼합 환경
✅ 복잡한 멀티파일 자율 리팩토링
✅ SWE-bench 87.6% — 고복잡도 에이전트 태스크
현실적인 조합:
데이터 팀:
→ Cortex Code: SQL·dbt·데이터 파이프라인·Snowflake 관리
→ Claude Code: 데이터 앱 백엔드(FastAPI, Lambda), 복잡한 Python 로직
데이터 + 소프트웨어 혼합 팀:
→ Cortex Code: Snowflake 데이터 레이어
→ Kiro: AWS 인프라(CDK, Lambda) + 스펙 기반 기능 개발
→ Claude Code: 복잡한 자율 리팩토링
✅ 결론
✅ 데이터 엔지니어에게 Cortex Code CLI는 지금 당장 쓸 수 있는 가장 실용적인 AI 코딩 에이전트예요. dbt 모델 생성, 스키마 테스트 자동화, Airflow DAG 빌딩까지 Snowflake 컨텍스트 그대로 처리해요.
✅ AGENTS.md + Agent Skills 조합으로 팀 표준을 강제할 수 있어요. Kiro의 Steering, Claude Code의 CLAUDE.md와 동일한 패턴이에요. Git에 커밋하면 팀 전체에 적용돼요.
❌ Snowflake 밖 코드베이스 작업은 여전히 Claude Code나 Cursor가 더 나아요. React 프론트엔드, FastAPI 백엔드, 복잡한 Python 라이브러리 작업은 일반 AI 코딩 툴이 더 유연해요.
❌ MCP, ACP, Plugins, Agent SDK는 아직 Preview예요. GA 전 API 변경 가능성이 있어서 프로덕션 크리티컬 파이프라인에 의존하기 이른 기능들이에요.
관련 글
- Snowflake Cortex Code 완전 가이드 1편 — 데이터 팀을 위한 네이티브 AI 코딩 에이전트: https://cell-devlog.tistory.com/355
- Snowflake Cortex Code 완전 가이드 2편 — CLI 실전, dbt 파이프라인 자동화, Claude Code·Kiro 비교: https://cell-devlog.tistory.com/356