사용 안내

이룸옵스는 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. 한계