← Lease Bot 홈 블로그
AI 봇 자동화 📅 2026-05-04 ⏱ 12분 읽기

Cloudflare Workers로 텔레그램 봇 24/7 무인 운영하기

맥미니를 켜놓고, 정전 걱정하고, 인터넷 끊기면 봇이 죽고, 매주 업데이트하는 — 그 모든 부담 없이 봇을 운영하는 방법. 평생 무료(또는 월 $5)로 1만 명에게 서비스 가능.

왜 서버리스인가?

비교맥미니 (집)Cloudflare Workers
초기 비용₩90만₩0
월 비용전기료·인터넷₩0~₩7,000
다운타임정전·인터넷·본인 부재 시거의 없음 (글로벌 엣지)
자동 업데이트본인이 직접git push 1번
확장성고객 50명 한계무제한 자동 스케일
보안본인 책임CF DDoS 방어 무료

아키텍처

고객 (Telegram)
   ↓ 메시지
Telegram Bot API
   ↓ Webhook
Cloudflare Workers ← (KV: 사용량) ← (D1: 고객 DB)
   ↓ Anthropic API 호출
응답 → Telegram → 고객

1. 텔레그램 봇 생성 (5분)

  1. Telegram에서 @BotFather 검색 → 대화
  2. /newbot → 이름·아이디 입력 → 토큰 받음
  3. 토큰 안전하게 저장 (예: 123456:AAH...)

2. Cloudflare Workers 프로젝트 생성

npm create cloudflare@latest leasebot
cd leasebot
npx wrangler login

3. 핵심 코드 (src/index.js)

export default {
  async fetch(request, env) {
    if (request.method !== "POST") return new Response("OK");

    const update = await request.json();
    const message = update.message;
    if (!message?.text) return new Response("OK");

    const userId = String(message.from.id);
    const chatId = message.chat.id;
    const text = message.text;

    // 1. 사용량 체크
    const sonnetUsed = parseInt(await env.KV.get(`s:${userId}`) || "0");
    const haikuUsed  = parseInt(await env.KV.get(`h:${userId}`) || "0");

    let model;
    if (sonnetUsed < 3000) {
      model = "claude-sonnet-4-6";
      await env.KV.put(`s:${userId}`, String(sonnetUsed + 1));
    } else if (haikuUsed < 5000) {
      model = "claude-haiku-4-5";
      await env.KV.put(`h:${userId}`, String(haikuUsed + 1));
    } else {
      await sendTelegram(env, chatId, "이번 달 한도 도달. 추가팩 결제 안내 →");
      return new Response("OK");
    }

    // 2. Anthropic API 호출
    const reply = await callAnthropic(env, model, text);

    // 3. Telegram 응답
    await sendTelegram(env, chatId, reply);
    return new Response("OK");
  }
};

async function callAnthropic(env, model, prompt) {
  const res = await fetch("https://api.anthropic.com/v1/messages", {
    method: "POST",
    headers: {
      "x-api-key": env.ANTHROPIC_KEY,
      "anthropic-version": "2023-06-01",
      "content-type": "application/json",
    },
    body: JSON.stringify({
      model,
      max_tokens: 1024,
      system: "너는 친절한 비즈니스 어시스턴트다. 간결하게 답한다.",
      messages: [{ role: "user", content: prompt }],
    }),
  });
  const data = await res.json();
  return data.content?.[0]?.text || "응답 오류. 다시 시도해주세요.";
}

async function sendTelegram(env, chatId, text) {
  await fetch(`https://api.telegram.org/bot${env.BOT_TOKEN}/sendMessage`, {
    method: "POST",
    headers: { "content-type": "application/json" },
    body: JSON.stringify({ chat_id: chatId, text }),
  });
}

4. 환경 변수 설정 (wrangler.toml)

name = "leasebot"
main = "src/index.js"
compatibility_date = "2026-05-01"

kv_namespaces = [
  { binding = "KV", id = "your-kv-id" }
]

[vars]
# 비밀 변수는 wrangler secret put 으로
npx wrangler kv:namespace create KV
npx wrangler secret put ANTHROPIC_KEY
npx wrangler secret put BOT_TOKEN

5. 배포 + Telegram Webhook 등록

npx wrangler deploy
# https://leasebot.YOUR.workers.dev 발급됨

# Telegram에 webhook 등록 (1회)
curl "https://api.telegram.org/botBOT_TOKEN/setWebhook?url=https://leasebot.YOUR.workers.dev"

6. 매월 1일 자동 리셋 (Cron Trigger)

// wrangler.toml
[triggers]
crons = ["0 0 1 * *"]

// src/index.js
export default {
  async fetch(...) { /* 위와 동일 */ },
  async scheduled(event, env) {
    // 매월 1일 0시: 모든 사용량 리셋
    const list = await env.KV.list();
    for (const key of list.keys) {
      await env.KV.delete(key.name);
    }
  },
};

비용 분석 (실제)

항목무료 티어유료 ($5/월)
Workers 요청10만/일1,000만/일
KV 읽기10만/일1,000만/일
KV 쓰기1,000/일100만/일
고객 수용 (1일 100질문/명)약 500명약 5만명
💡 결론 고객 500명까지 평생 ₩0. 이후엔 월 ₩7,000. 맥미니 50대 운영비 = CF Workers 1년치보다 비싸다.

마치며

"집에서 운영" 매력은 통제감이지만, 무인 자동화 목표와는 반대 방향이다. Cloudflare Workers는 "내가 신경 쓸 게 없다"는 자유를 준다. 그게 진짜 자동화다.