사용 안내
이룸옵스는 Cloudflare 위의 여러 서비스 비용을 한 화면에서 보고, 예산에 맞춰 비용을 쓰는 기능을 단계적으로 조절하는 운영 콘솔입니다. 순서: 계정 연결 → 서비스 매핑 확인 → 예산 → 정책·운영 모드 → 제어 모듈 연동 → 조치 확인.
1. 계정 연결과 토큰 권한
설정 › 계정 연결에서 Cloudflare 계정 ID 와 API 토큰을 넣습니다. 저장하기 전에 토큰으로 무엇을 읽을 수 있는지 확인하고, 빠진 권한을 보여 줍니다. 이룸옵스는 Cloudflare 설정을 바꾸지 않으므로 읽기 권한만 있으면 됩니다.
| 필수 | Account Analytics: Read(사용량 계측), Billing: Read(공식 사용량 비용·구독·청구 주기), Workers Scripts: Read(Worker·Pages 목록) |
|---|---|
| 선택 | D1·Workers R2 Storage·Workers KV Storage·Queues·AI Gateway·Vectorize: Read(자원 이름), Account Settings: Read(계정 이름) |
토큰은 AES-256-GCM 으로 봉인해 보관하고 수집하는 순간에만 서버 안에서 엽니다. 화면·로그·감사 기록에는 끝 4자리만 남습니다. 수집은 사용량 15분, 공식 비용 3시간, 자원 목록 6시간, 환율 12시간마다 하며 간격은 설정에서 바꿉니다.
2. 비용 계산 원칙
| 청구 기준 | 달력상 월초가 아니라 계정의 실제 청구 주기(구독 기준일)로 계산합니다. |
|---|---|
| 비용 상태 | 공식 집계(Cloudflare billable-usage, 하루 단위) · 추정(사용량 계측 × 공개 가격표) · 확정(주기 마감 뒤 공식 집계가 다 도착한 금액)을 나눠 보입니다. |
| 중복 방지 | 지표마다 공식 집계가 도착한 마지막 날까지는 공식 금액만 쓰고, 그 뒤 날짜만 추정합니다. 같은 날을 두 번 세지 않습니다. |
| 보정 | 공식·계측이 둘 다 있는 날이 3일 이상이고 비율이 고르면, 추정에 그 비율을 곱합니다(예: 계측에 없는 Pages Functions CPU 시간). |
| 고정 요금 | Workers Paid 같은 구독료는 사용량 비용과 따로 더합니다. 공식 사용량 화면은 구독료를 빼고 보여 주기 때문입니다. |
| 무료 제공량 | 계정 전체에 한 번만 뺀 뒤(누적 사용량 기준) 서비스별 사용량 비율로 나눕니다. Workers AI 는 하루 단위(UTC 00시)입니다. |
| 공용 자원·미분류 | 여러 서비스가 함께 쓰는 D1·R2 는 비율로 나눕니다. 연결되지 않은 비용도 예산에 포함하고 ‘미분류’로 따로 보입니다. |
| 예측 | 최근 14일 사용량의 지수 가중 평균과 분산으로 기간 말 값과 범위(p10~p90)를 냅니다. 자료가 3일 미만이면 ‘자료 부족’으로 표시합니다. |
| 정가 환산 | 무료 제공량이 없다고 볼 때의 값. 청구액이 0원이어도 어느 서비스가 많이 쓰는지 비교하는 기준입니다. |
| 원화 표시 | 원장은 달러로 두고 원화는 환산값입니다. 환율(유럽중앙은행 기준)과 기준일을 함께 적습니다. |
3. 예산과 가용 예산
조직 전체·서비스·환경(운영·검증·개발)별 예산을 청구 주기마다 반복해서 씁니다. 정책의 기준선은 가용 예산입니다.
가용 예산 = 예산 − 고정 요금 − 저장공간의 남은 기간 유지비 − 안전 여유분(기본 10%)
서비스를 멈춰도 저장공간과 구독료는 남기 때문에 예산 전부를 요청 처리에 배정하지 않습니다.
4. 정책과 운영 모드
| 관찰만 | 정책이 무엇을 했을지만 ‘관찰 기록’으로 남깁니다. |
|---|---|
| 조치 추천 | 추천을 만들고, 관리자가 적용 단추를 눌러야 바뀝니다. 거절하면 그 단계를 잠시 고정합니다. |
| 자동 실행 | ‘자동’으로 지정한 정책은 조건이 되면 바로 적용합니다(소유자만 켤 수 있음). |
정책 조건은 가용 예산 사용률, 기간 말 예측, 이상 사용, 계측 지연 네 가지입니다. 대상은 서비스 중요도·환경·기능 종류·필수 여부·고비용 여부로 고릅니다. 올리기는 조건이 되면 바로, 내리기는 조건이 여유(5%p)를 두고 풀린 뒤 한 단계씩, 복구 간격마다 합니다. 계측이 늦으면 내리지 않습니다. ‘정책·운영 모드’ 화면의 모의 실행으로 사용량이 N배일 때 언제 무엇이 바뀔지 미리 볼 수 있습니다.
5. 기능 제어 4단계
| 기능 | 절약 | 제한 | 차단 |
|---|---|---|---|
| AI | 저비용 모델 · 출력 60% · 무료 사용자 하루 20회 | 무료 사용자 제외 · 사용자 하루 50회 | 새 생성 중단 |
| 업로드 | 파일 50MB · 하루 100건 | 파일 10MB · 하루 20건 · 무료 사용자 제외 | 새 업로드 중단 |
| 조회 | 180일 · 2,000행 · 60초 캐시 | 31일 · 500행 · 300초 캐시 | 7일 · 100행 |
| 보고서 | 6시간 안 결과 재사용 · 하루 50건 | 24시간 재사용 · 하루 10건 | 새 생성 중단 |
| 배치 | 간격 ×2 | 간격 ×4 · 보통 이상만 | 높은 우선순위만 |
| 큐 | 동시 5 · 재시도 2 | 보통 이상만 · 동시 2 · 재시도 1 | 높은 우선순위만 |
| 로그 | 일반 요청 25% | 5% | 1% (오류·감사 기록은 늘 유지) |
한도는 기능마다 바꿀 수 있고, 관리자가 손으로 단계를 정해 일정 시간 고정할 수 있습니다.
6. 제어 모듈 연동
서비스 › 연동 키를 만들고, 제어 모듈 파일을 서비스에 넣습니다(의존성 없음).
curl -o src/ops-guard.ts https://ops.irumx.app/api/sdk/ops-guard.ts
같은 Cloudflare 계정의 Worker 는 서비스 바인딩으로 부릅니다(요청 요금이 따로 붙지 않습니다).
// wrangler.jsonc
"services": [{ "binding": "OPS", "service": "irumx-ops", "entrypoint": "OpsGuard" }]
// npx wrangler secret put OPS_KEY
import { createGuard, bindingTransport } from './ops-guard';
const guard = createGuard({ transport: bindingTransport(env.OPS, env.OPS_KEY) });
const out = await guard.run('ai.summary', { user: { id: userId, plan: 'free' }, estimateUsd: 0.002, idempotencyKey: jobId }, async (d) => {
const model = d.model === 'fallback' && d.fallbackModel ? d.fallbackModel : '@cf/zai-org/glm-4.7-flash';
const res = await env.AI.run(model, { messages, max_tokens: Math.round(1024 * d.maxTokensPct) });
return { result: res, actualUsd: neurons * 0.011 / 1000, units: { neurons } };
});
if (!out.ok) return c.json({ error: { code: 'limited', message: out.message } }, 429);
ctx.waitUntil(guard.flush());
업로드는 guard.hono('upload', …) 미들웨어, 배치는 guard.schedule(), 큐는 guard.enqueue(), 조회는 guard.query(), 로그는 guard.logSample() 로 감쌉니다. 다른 계정·다른 클라우드는 httpTransport('https://ops.irumx.app', key) 를 씁니다. 정책은 30초마다 다시 읽고, 이룸옵스에 닿지 않으면 마지막 정책을 유효 시간(기본 24시간)까지 믿은 뒤 기능별 ‘실패 시 동작’(허용·차단)을 따릅니다.
7. 예산 예약
고비용 작업은 예상 최대 비용 예약 → 작업 실행 → 실제 사용량 정산 순서로 처리합니다. 예약은 조직마다 하나인 장부(Durable Object)에서 한 줄로 처리되어 동시 요청에서도 남은 예산을 넘겨 잡지 않습니다. 같은 멱등 키로 다시 예약·정산해도 한 번만 반영되고, 작업이 죽으면 예약은 유효 시간 뒤 자동으로 풀립니다. 계측에 이미 들어간 비용과 정산 금액을 두 번 세지 않도록 기준 시각을 맞춥니다.
8. 한계
- Cloudflare 청구액의 절대 상한은 보장하지 않습니다 — 계측 지연, 진행 중인 작업, 제어 모듈을 거치지 않는 호출, 제한 응답 자체의 실행 비용이 있습니다.
- Workers AI 는 모델별로만 계측되어, 제어 모듈이나 AI Gateway 없이는 서비스에 나눌 수 없습니다.
- 공식 사용량 비용 API 는 종량제 계정에서만 쓸 수 있고 하루 단위로 갱신됩니다(보통 1~2일 늦음).
- 가격표는 공개 가격(Workers Paid)을 따릅니다. 약정·할인 계약은 반영하지 않습니다.