Snowflake per-user quotas를 활용한 AI 사용 비용 개인별 상한 및 증액 신청 운영
요약
Snowflake의 per-user quotas 기능을 활용하여 AI 사용 비용을 개인별로 상한 설정 및 증액 신청 운영 방안을 제시합니다. 이 설계는 모든 사용자에게 기본 쿼터를 적용하고, 필요 시 태그를 통해 높은 범위의 쿼터로 전환하는 방식입니다. 이를 통해 기존 웨어하우스나 CoCo 제한으로는 관리하기 어려웠던 AI 기능 사용 비용까지 개인 단위에서 효과적으로 통제할 수 있습니다.
핵심 포인트
- per-user quotas는 AI SQL 함수 등 AI 도메인 소비를 개인 단위로 상한 설정 가능하게 합니다.
- 모든 사용자에게 기본 쿼터를 적용하고, 증액 필요 시 태그 기반으로 높은 쿼터로 전환하는 것이 핵심 설계입니다.
- 이 시스템은 비용 통제(막기/증액하기/제외하기)와 추적성 확보를 동시에 만족시킵니다.
서론
데이터 엔지니어로 나우캐스트(Nowcast)에서 근무하는 나가이입니다.
지난 글에서는 CoCo(구 Cortex Code)가 에이전트로서 자동 실행하는 SQL에서 AI SQL 함수가 호출될 때, Resource Monitor뿐만 아니라 CoCo의 상한 파라미터에도 걸리지 않는 비용이 발생하는 구조를 정리했습니다. 그 과정에서 '사용자 단위 통합 쿼터(Per User Quota)'가 GA(General Availability)가 되면, 태스크 기반 역할 박탈은 대체 가능하다'고 언급했습니다.
2026년 8월에 per-user quotas가 GA가 되었기 때문에, 본 글에서는 사내 환경에서 검증한 '전 사용자에게 일률적인 상한을 설정하고, 증액이 필요한 사용자만 태그 하나로 더 높은 범위의 쿼터로 전환하는' 설계를 설계 판단 이유와 함께 정리합니다.
per-user quotas에 대한 자세한 설명은 다음 글을 참고해 주십시오.
본 글에서는 인간 사용자의 AI 사용 비용 제어 설정 및 운영 방법까지 하나의 예시를 들어 설명합니다.
개인 단위로 상한이 필요한 이유
Snowflake에서 비용을 막는 수단은 지금까지 웨어하우스와 CoCo의 제한이 주였습니다.
| 과제 | 현황 | 본 설계로 구현하는 것 |
|---|---|---|
| AI 관련 소비를 막는 장치가 없음 | Resource Monitor는 웨어하우스만 대상. CoCo의 크레딧 상한은 CoCo 자체만 대상 | per-user quotas로 AI 기능을 개인 단위에서 상한 관리하고, 도달 시 자동 차단 |
| ... | ||
| 설계 요구사항은, 막기/증액하기/제외하기를 같은 메커니즘으로 처리하고, 설정은 Terraform으로, 부여 이력은 대장(ledger)으로 추적할 수 있도록 하는 것입니다. |
per-user quotas가 대상이 될 수 있는 AI 도메인은 다음 5가지입니다.
| 도메인 | 대상 | 비고 |
|---|---|---|
| AI Function | AI_COMPLETE와 같은 AI SQL 함수 | 지난 글에서 문제가 된 소비의 주원인 |
| Cortex Code | CoCo (Snowsight / CLI / Desktop) | |
| Cortex Agent | Cortex Agents | |
| Snowflake Intelligence | Snowflake Intelligence (CoWork) | |
| AI Gateway | Cortex AI Gateway 경유 모델 호출 | AI Gateway 자체는 2026년 9월 기준으로 Preview |
하나의 쿼터는 웨어하우스 컴퓨트 또는 AI 도메인 중 하나를 대상으로 합니다. 둘을 혼합할 수는 없습니다. 본 글의 쿼터는 AI 도메인만을 대상으로 하고 있습니다.
설계 전체 개요
전 사용자에게 일률적인 상한(기본 쿼터 BASE)을 설정하고, 증액이 필요한 사용자만 태그로 더 높은 범위의 쿼터로 전환합니다. 서비스 사용자는 같은 태그의 다른 값으로 제외 처리합니다.

적용되는 쿼터는 사용자 태그 AI_QUOTA_TIER의 값만으로 결정됩니다.
AI_QUOTA_TIER 값 | 적용되는 쿼터 | 부여 방법 |
|---|---|---|
| (미부여) | 기본 쿼터 BASE | |
| 기본값 | TIER1 / TIER2 / TIER3 | |
증액 후 상한 세트 (TIERn 쿼터) | 신청/승인 기반으로 관리자가 부여하고, 기한이 지나면 삭제 | EXEMPT |
per-user quotas는 스코프에 포함할 사용자를 평가 시 동적으로 해결하기 때문에, 태그의 부여 및 삭제만으로 적용되는 상한이 전환됩니다.
태그 값만으로 쿼터가 결정되는 메커니즘
기본 쿼터에는 'AI_QUOTA_TIER가 부여된 사용자를 대상에서 제외한다'는 조건을 처음부터 설정합니다. 태그를 부여하면 기본 상한이 풀리고, 값에 대응하는 쿼터만 남게 됩니다.

| 사용자 | 태그 값 |
BASE 제외 판정 | 적용되는 쿼터 |
|---|---|---|---|
| 일반 사용자 A (신청하지 않음) | (미부여) | 대상 | BASE |
| 증액 중인 사용자 B (신청 및 승인됨) | TIER2 (기한 있음) | 제외 | TIER2 |
| 서비스 사용자 | EXEMPT (영구) | 제외 | 없음. EXEMPT용 쿼터는 만들지 않음 |
BASE의 제외 조건은 'AI_QUOTA_TIER가 부여된 (값을 불문하고)' 단 하나입니다. TIERn과 EXEMPT는 같은 태그 값이므로, 제외 설정도 한 번으로 충분합니다. 사용자 태그는 1개의 태그당 1개의 값만 가질 수 있으므로, '대상 외이면서 Tier가 부여된' 같은 상태는 발생하지 않습니다. 1명의 사용자에게 적용되는 쿼터는 항상 1개 이하입니다.
실제로 사내 환경에서 생성한 BASE 쿼터의 Snowsight 화면입니다. '쿼터 범위'에 AI_QUOTA_TIER가 부여된 사용자를 제외하는 조건과, 대상 AI 도메인이 표시되어 있습니다.

Tier 정의
각 Tier는 상한을 설정하는 단계명으로 설정하고 있습니다. 크레딧 수는 태그 값에 포함하지 않습니다. (운영 복잡성 방지를 위해 세부적인 태그 값을 두지 않고, TIER1부터 3이라는 큰 범위로 작성했습니다)
| 태그 값 | 적용되는 쿼터 | 일일 상한 | 월간 상한 | 부여 방식 |
|---|---|---|---|---|
| (미부여) | BASE | 10 | 100 | 기본. 모든 인간 사용자 |
TIER1 | TIER1 | 20 | 200 | 신청 및 승인 기반으로 관리자가 부여. 기한 있음 |
TIER2 | TIER2 | 30 | 300 | 위와 동일 |
TIER3 | TIER3 | 50 | 500 | 위와 동일 |
EXEMPT | 없음 | - | - | 서비스 사용자에게 Terraform으로 부여 |
표의 크레디
管理者・承認者에게는 governance 스키마에 대한 접근 권한과 각 쿼터의 !ADMIN 인스턴스 역할을 부여합니다.
Snowsight 모니터링 화면에서 설정 변경 및 소비 현황을 확인할 수 있습니다.
일반 이용자에게는 조회 전용 역할(모든 쿼터를 통합한 !VIEWER)을 모든 사용자에게 배포합니다.
Snowsight에서 자신의 소비 상황을 확인할 수 있습니다.
per-user quotas는 클래스 형태로 SNOWFLAKE.CORE.QUOTA로 구현되어 있으며, Budget과 동일한 인스턴스 역할 체계(!ADMIN / !VIEWER)를 따릅니다. 조회 전용 역할의 내용은 쿼터가 위치하는 DB/스키마의 USAGE, 데이터베이스 역할 SNOWFLAKE.USAGE_VIEWER, 해당 쿼터의 !VIEWER 세 가지입니다.
-- 조회 전용 역할 quota_monitor에 최소 권한 부여 (쿼터 소유 역할에서 실행)
GRANT USAGE ON DATABASE governance TO ROLE quota_monitor;
GRANT USAGE ON SCHEMA governance.quotas TO ROLE quota_monitor;
...
생성 측면에서는 별도의 권한이 필요합니다. 쿼터를 생성하려면 SNOWFLAKE.QUOTA_CREATOR 데이터베이스 역할, 대상 스키마에 대한 CREATE SNOWFLAKE.CORE.QUOTA 권한, DB/스키마의 USAGE가 필요합니다. 태그로 범위를 설정하려면 참조하는 태그에 대한 APPLYBUDGET 권한이 필요합니다.
Terraform으로 관리할 것과 하지 않을 것
영구적이고 변경 빈도가 낮은 것은 Terraform으로 관리하고, 신청 기반의 고빈도/기한제 TIERn 부여는 승인 프로세스와 대장(台帳)에서 관리합니다.
| 리소스 | Terraform | 수단 | 보충 설명 |
|---|---|---|---|
| 태그 정의 | ○ | snowflake_tag | allowed_values에 대응 |
서비스 사용자에게 EXEMPT 부여 | ○ | snowflake_tag_association | `object_type = |
이전 기사에서 언급된 CoCo 전용 크레딧 상한 매개변수(CORTEX_CODE_SNOWSIGHT_DAILY_EST_CREDIT_LIMIT_PER_USER 등)를 설정한 환경에서는 per-user quotas와 이중으로 상한이 걸립니다. CoCo 측의 상한이 Tier의 일일 상한보다 낮으면, Tier를 높여도 CoCo만 먼저 중단됩니다.
per-user quotas를 상한 기준으로 삼는 경우, CoCo 전용 매개변수는 높이거나 무제한(-1)으로 되돌려 상한 판정을 한 곳에 모으고, 어느 쪽에서 중지했는지마다 분기하는 운영은 피해야 합니다.
요약
- AI 사용 비용 제어는 per-user quotas의 일률적인 캡과 사용자 태그 하나만으로, 중단/상향 조정/제외를 동일한 메커니즘으로 처리할 수 있습니다.
- 제외 조건을 베이스 쿼터(base quota) 쪽에 설정해 두면, 태그 부여/삭제만으로 상한이 변경되어 모순된 상태가 발생하지 않습니다.
- 태그 값에 크레딧 수를 담지 않고, 일일 및 월간을 세트로 하고, 단계를 최소화합니다. 이 세 가지 규칙으로 장기적인 운영 비용을 절감할 수 있습니다.
우선적으로 알림만으로 실제 소비를 관측하고, 블록(block) 활성화는 그 후에 해도 괜찮습니다. 상한 값을 결정하는 것보다, 상한을 안전하게 변경할 수 있는 시스템을 먼저 준비하는 것을 우선합니다.
토론

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기