본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 29. 09:55

API 종량제 과금 없이 LLM 정기 태스크를 실행하기: Claude Code Routines + Slack 활용 사례

요약

Claude Code Routines와 Slack, GAS를 조합하여 API 종량제 과금 없이 LLM 정기 태스크를 자동화하는 사례를 소개합니다. IT 뉴스 수집 및 요약, SNS 포스트 초안 생성 등 판단이 필요한 반복 업무를 효율적으로 처리하는 방법을 다룹니다.

핵심 포인트

  • Claude Code Routines를 활용한 API 비용 절감 및 자동화
  • Slack Workflow와 GAS를 연동한 워크플로우 구축
  • 뉴스 수집, 가치 판단, 요약, 알림으로 이어지는 파이프라인 구성
  • 구독형 모델 범위 내에서 정기적인 LLM 태스크 실행 가능

LLM을 사용한 정기 태스크를 만들고 싶어서, ChatGPT나 Claude와 대화하며 몇 가지 방식을 검토했습니다.

하고 싶었던 것은 대략 다음과 같은 메커니즘입니다.

  • API 종량제 과금 없이 실행하고 싶다
  • 이미 계약 중인 ChatGPT나 Claude의 구독 이용 범위 내에서 시도하고 싶다
  • 로컬 PC나 자체 서버를 상시 가동하고 싶지 않다
  • LLM에게 정기적인 조사·요약·문장 생성을 시키고 싶다
  • 결과는 Slack에 알림을 보내고 싶다
  • 필요에 따라 인간의 확인이나 승인을 거치고 싶다

후보로서 GAS, GitHub Actions, Cloudflare Workers, 로컬 cron, 각종 자동화 서비스 등도 고려했습니다.

그중에서 이번 용도에는 Claude Code Routines가 상당히 궁합이 좋다고 느껴졌습니다.

이 기사에서는 Claude Code Routines와 Slack Workflow, GAS를 조합하여 다음 두 가지 자동화를 만든 사례를 소개합니다.

첫 번째는 기술 홍보 팀을 위해, Qiita 기사 공개 후 X 소개 포스트 초안을 생성하는 메커니즘입니다.

두 번째는 매일 아침 IT 뉴스를 수집하여 중요도를 스코어링하고, 상위 3건을 Slack으로 게시하는 메커니즘입니다.

본 기사에서는 후자인 IT 뉴스 캐치업 (IT News Catch-up) 메커니즘을 중심으로 소개합니다.

Claude Code Routines란?

Claude Code에서 수행하는 작업을 자동 실행하기 위한 기능입니다.

프롬프트나 접속처, 실행 타이밍을 저장해 둠으로써, 스케줄 실행, API 호출, GitHub 이벤트 등을 계기로 Anthropic이 관리하는 클라우드 상에서 Claude Code를 실행할 수 있습니다.

이번에 메인으로 소개하는 것은 매일 자동으로 IT 뉴스를 수집하여 팀을 위해 중요해 보이는 뉴스만 Slack으로 게시하는 메커니즘입니다.

전체 모습은 다음과 같습니다.

Slack에는 다음과 같은 형식으로 게시하고 있습니다.

AWS가 취약점 관리 플랫폼 「Continuum」 발표
AWS는 코드 스캔에 그치지 않고, 인프라 구성·액세스 권한·네트워크 토폴로지·비즈니스 컨텍스트를 통합하여 AI가 취약점을 추론하는 「AWS Continuum」을 AWS Summit New York에서 발표했다. 탐지·우선순위 지정·검증·샌드박스에서의 재현·수정 제안이라는 4단계 프로세스를 자동화하여, 위양성(False Positive) 배제를 보장하는 설계가 특징이다. 여러 프론티어 모델(Frontier Model)을 구분하여 사용하는 모델 독립형으로, 기존의 침투 테스트 기능도 본 플랫폼으로 통합되었다. AWS를 사용하는 개발·운영 팀은 취약점 대응 워크플로우의 대폭 자동화를 기대할 수 있으며, 보안 체제를 재검토할 좋은 기회가 될 것이다.

게시하는 정보는 심플하게 다음 세 가지입니다.

  • 제목
  • 요약
  • URL

일부러 건수는 상위 3건으로 제한했습니다.

처음부터 10건, 20건씩 흘려보내면 읽는 쪽의 부하가 높아져 금방 형식적으로 변할 것 같다고 생각했기 때문입니다.

이번 요건에서는 Claude Code Routines가 가장 심플했습니다.

비교한 관점은 다음과 같습니다.

방식장점신경 쓰이는 점
GAS + LLM API간편하게 정기 실행할 수 있다LLM API의 종량제 과금이 발생한다
...

Claude Code Routines는 프롬프트, 접속처, 실행 타이밍 등을 모아서 정의하고 자동 실행할 수 있습니다.

이번 사례와 같이,

  • 웹 검색을 한다
  • RSS를 읽는다
  • 뉴스의 가치를 판단한다
  • 요약한다
  • Slack으로 보낸다
  • 배포 완료된 정보를 기록한다

와 같은 「판단을 포함하는 정기 태스크」에서는 단순한 cron이나 스크립트만으로 구성하는 것보다, LLM에게 맡기는 부분을 자연스럽게 정의할 수 있었습니다.

물론 「API 종량제 과금 없음」이라고 해도 완전 무료라는 의미는 아닙니다.

Claude의 구독 이용 범위 내에서 실행할 수 있다는 의미입니다.

실행 횟수나 이용량의 상한은 있기 때문에, 업무 크리티컬한 운영 배치(Batch)의 대체라기보다는, 우선 가벼운 사내 자동화나 개인·팀용 보조 태스크에 적합하다고 느꼈습니다.

구성 요소는 다음과 같습니다.

요소역할
Claude Code Routines정기 실행, 뉴스 수집, 중복 판정, 스코어링 (Scoring), 요약, Slack 전송
...

뉴스 수집은 웹 검색 (Web Search)을 주축으로 하되, 고정 RSS 피드 (RSS Feed)로 보완하는 구성으로 하고 있습니다. 수집 대상은 AI/LLM 및 개발 생산성을 최우선으로 하며, 클라우드, 보안, 프론트엔드 등 개발 및 운영과 관련된 뉴스를 폭넓게 수집하는 방침입니다.

웹 검색을 통해서는 그날 화제가 되고 있는 뉴스를 폭넓게 수집합니다.

반면, 고정 RSS 피드를 통해서는 지속적으로 확인하고 싶은 특정 소스를 확실하게 확보합니다.

둘 중 하나만 사용하면 웹 검색으로는 누락이 발생할 수 있고, 고정 RSS 피드만 사용하면 범위가 좁아질 수 있습니다.

따라서 웹 검색으로 넓게 수집하고, 고정 RSS 피드로 중요한 소스를 보완하는 형태를 취했습니다.

또한, 고정 RSS 피드는 환경 변수 (Environment Variable)로 리스트를 정의할 수 있도록 하여, 운영하면서 추가하거나 교체할 수 있도록 했습니다.

운영 측면에서 중요하다고 느낀 점은 중복 제거 (Deduplication)입니다.

IT 뉴스는 동일한 테마를 여러 매체가 다루는 경우가 자주 있습니다.

단순히 URL만으로 중복을 판정하면, 다른 URL을 가진 동일 뉴스가 Slack에 여러 번 올라오게 됩니다.

반대로 제품명이나 기업명만으로 대략적으로 중복을 판정하면, 다른 사건까지 제외해 버릴 가능성이 있습니다.

그래서 중복 제거는 2단계로 구성했습니다.

먼저, 각 후보에 대해 정규화된 테마 키 (Normalized Theme Key)를 생성합니다.

예시는 다음과 같은 이미지입니다.

OpenAI가 신모델 GPT-X 발표
=> openai-gpt-x-release
AWS, 도쿄 리전에서 장애 발생
...

키에는 제품명, 기업명, CVE 번호, 버전 번호, 사건의 종류 등을 포함하도록 하고 있습니다.

그 후, GAS (Google Apps Script)에 저장된 기전송 레코드와 비교합니다.

GAS에는 다음과 같은 정보를 저장하고 있습니다.

내용
key정규화된 테마 키
...

키가 일치하지 않는 것은 신규 후보로 남깁니다.

키가 일치하는 경우에는, 후보의 요점과 과거에 전송된 summary를 LLM이 다시 대조하여 읽도록 합니다.

판정 기준은 다음과 같습니다.

동일한 것으로 간주:
주어(제품·기업·CVE 등)와 사건이 실질적으로 동일함.
속보·타 매체의 보도도 포함함.
...

여기서는 중복 전송보다는 누락되는 것이 손실이 더 크다고 판단하고 있습니다.

따라서 판단이 모호한 경우에는 제외하지 않고, 전송 후보에 남기는 방침을 택했습니다.

중복 제거 후, 각 테마를 스코어링 (Scoring) 합니다.

스코어링은 다음 4가지 관점으로 이루어집니다.

관점가중치채점 기준
실무 임팩트×3개발·운영 판단에 영향을 줄 만한 것을 높게 설정
...

기초 점수는 다음과 같습니다.

기초 점수 = 실무 임팩트 × 3 + 신규성 × 2 + 신뢰성 × 2 + 관심 영역 일치도 × 1

만점은 40점입니다.

여기에 더해, 여러 개의 독립된 소스가 동일한 테마를 보도하는 경우에는 주목도 보너스를 추가합니다.

출현 소스 수가 2개 => +2점
출현 소스 수가 3개 이상 => +4점
출현 소스 수가 1개 => 가점 없음

최종 점수는 다음과 같습니다.

최종 점수 = 기초 점수 + 주목도 보너스

최종적으로 점수가 높은 순서대로 상위 3건을 Slack으로 전송합니다.

전송 후보가 3건 미만인 경우에는 억지로 채우지 않습니다.

이 점 또한 중요하다고 생각합니다.

뉴스 전송은 '매일 반드시 3건을 내보내는 것'보다, '읽을 가치가 있는 것만 흘려보내는 것'이 더 중요하기 때문입니다.

Slack 측에서는 Workflow의 Webhook 트리거를 사용하고 있습니다.

Claude Code Routines에서는 뉴스 1건당 1회씩 POST 합니다.

전송하는 JSON은 다음과 같은 형태입니다.

{
"title": "뉴스 제목",
"summary": "뉴스 요약",
...

Slack Workflow 측에서는 title, summary, url을 변수로 받아 채널에 게시합니다.

3건을 전송할 경우에는 1회의 POST로 묶지 않고, 3번의 POST를 수행합니다.

Slack 상에서는 뉴스마다 독립된 게시물로 보이기 때문에 가독성이 좋아집니다.

게시 이미지(예시)는 다음과 같습니다.

기전송된 뉴스의 저장에는 GAS를 사용하고 있습니다.

이유는 간단합니다.

  • 간편하게 제작 가능
  • Google 스프레드시트(Google Sheets)를 DB처럼 사용 가능
  • Web App으로 공개하면 API로 호출 가능
  • 이번 용도에서는 본격적인 DB를 준비할 정도까지는 필요 없음

GAS에서는 GET으로 이미 전송된 레코드를 반환하고, POST로 전송에 성공한 분량을 저장합니다.

Claude Code Routines 측에서는 중복 제거 전에 GET을 수행하고, Slack 전송에 성공한 후에 POST를 수행합니다.

이번 용도에 맞춘 GAS 샘플

GAS Web App을 API 엔드포인트(Endpoint)로 공개할 경우에는 반드시 토큰 등을 통한 인증을 넣어야 합니다.

URL을 알고 있다면 누구나 접근할 수 있는 상태로 두면, 전송 이력 취득이나 부정 레코드 등록이 가능해질 위험이 있습니다.

이번 샘플에서는 API_TOKEN을 스크립트 속성(Script Properties)에 저장하고, 요청 시 전달된 token과 일치하는 경우에만 처리하도록 구성했습니다.

const SHEET_NAME = 'published';
const EXPIRE_DAYS = 14;
const TOKEN = PropertiesService.getScriptProperties().getProperty('API_TOKEN');
...

Claude Code Routines 측에서는 다음과 같이 GET을 수행합니다.

# Claude Code Routines의 환경 변수에 GAS_TOKEN을 설정해 둡니다.
# GAS_TOKEN=*********
curl -s "$GAS_URL?token=$GAS_TOKEN"

POST 시에는 전송에 성공한 뉴스만 모아서 저장합니다.

{
"token": "<GAS_TOKEN>",
"entries": [
...

포인트는 Slack 전송에 성공한 것만 기록하는 것입니다.

Slack 전송에 실패한 뉴스까지 기록해 버리면, 다음 회차부터 '전송 완료'로 간주되어 버립니다.

따라서 전송 성공 후에만 GAS에 기록하도록 했습니다.

Claude Code Routines는 일반적인 채팅과 달리, 중간에 인간의 확인을 거칠 수 없습니다.

그렇기 때문에 프롬프트(Prompt)에는 다음과 같은 전제를 명시하고 있습니다.

당신은 엔지니어 조직을 위한 IT 뉴스 큐레이터입니다.
오늘 분량의 기술 뉴스를 수집·선별·요약하여 Slack에 전송해 주세요.
대화형 확인은 불가능하므로, 다음 절차와 기준을 엄격히 준수하여 자율적으로 완수해 주세요.

또한, Secret으로서 다음과 같은 환경 변수를 사용하는 것을 전제로 합니다.

SLACK_WEBHOOK_URL
SOURCE_FEEDS
GAS_URL
...

나아가 프롬프트에서는 이러한 값들을 로그(Log)나 Slack 본문에 노출하지 않도록 명시하고 있습니다.

secret(URL·토큰)을 로그나 전송 본문에 출력하지 않는다.

정기 실행 작업(Scheduled Job)에서는 다음 사항을 명확히 해두면 안정적으로 운영할 수 있습니다.

  • 무엇을 수집할 것인가
  • 어떤 소스(Source)를 반드시 확인할 것인가
  • 중복을 어떻게 판정할 것인가
  • 몇 건을 전송할 것인가
  • Slack에 어떤 JSON 형식으로 보낼 것인가
  • 전송 성공 후에 무엇을 기록할 것인가
  • 에러 발생 시 어떻게 행동할 것인가
  • 인간의 확인 없이 완료할 것

특히 '인간의 확인을 거치지 않는다'는 점이 중요합니다.

채팅이라면 "이 조건으로 진행해도 될까요?"라고 물어봐도 문제가 없습니다.

하지만 정기 실행 태스크(Task)에서는 거기서 멈춰버리고 맙니다.

따라서 프롬프트에는 "불명확한 점이 있어도 자율적으로 판단한다", "후보가 부족할 경우 억지로 채우지 않는다", "취득에 실패한 소스는 Slack에 보고한다" 등도 포함되어 있습니다.

이번 IT 뉴스 전송 시스템을 만들기 전에, 기술 홍보 팀을 위한 자동화 도구도 만들었습니다.

내용은 조직 내 Qiita 기사가 공개된 후, X(구 Twitter)에 소개하기 위한 포스트 초안을 생성하는 메커니즘입니다.

흐름은 다음과 같습니다.

이 플로우(Flow)에서는 Claude Code Routines에서 Slack Workflow Webhook으로 다음 4개 항목을 보냅니다.

{
"title": "기사 제목",
"url": "기사 URL",
...

Slack Workflow 측에서는 받은 포스트 초안을 팀 내에서 확인하고, 여러 명의 승인을 거친 후 포스팅용 URL을 표시하는 흐름으로 구성했습니다.

X로의 포스팅 자체는 자동화하지 않았습니다.

이는 의도적인 결정입니다.

기술 홍보 포스팅은 회사로서의 모습이나 표현의 톤(Tone)이 중요하기 때문입니다.

따라서 LLM에는 초안 작성까지만 맡기고, 최종적인 포스팅은 사람이 확인하여 진행하고 있습니다.

생성되는 포스팅 초안은 다음과 같은 형식입니다.

📙테크 블로그 업데이트📙
저희 엔지니어가 Claude Code를 활용하여 개발 플로우를 개선한 사례를 기사로 작성했습니다!
AI를 사용한 개발 효율화나 팀 내 활용에 관심이 있는 분들은 꼭 확인해 보세요👀
...

이 플로우를 구축함으로써 LLM을 통한 자동 감지, 문장 생성, Slack 알림, 사람의 승인이라는 흐름을 한 번에 만들 수 있었습니다.

그 응용 사례로서, IT 뉴스 캐치업(Catch-up) 메커니즘도 비교적 수월하게 만들 수 있었습니다.

참고로, 이러한 Qiita 기사가 공개될 때는 기술 홍보 계정으로 발신하고 있으니 꼭 팔로우해 주세요.

가장 큰 성과는 API 종량제 과금 없이 LLM을 사용한 정기 태스크를 구현할 수 있었다는 점입니다.

LLM API를 사용하는 구성이라면 API 키 관리, 이용량 모니터링, 비용 추산 등을 고려해야 합니다.

물론 Claude Code Routines에도 이용 한도는 있지만, 우선 작게 시작해 보기에는 상당히 간편했습니다.

IT 뉴스 캐치업용 Slack 채널을 만들고, 그곳에 매일 아침 뉴스가 흐르도록 설정했습니다.

이를 통해 업무 시작 전에 IT 뉴스를 확인하는 습관이 자연스럽게 생겼습니다.

뉴스 사이트를 직접 순회하며 확인하려면 지속하기 어렵지만, Slack에 필요한 것만 흘러 들어오면 확인에 대한 허들이 낮아집니다.

현재까지 특별히 막히는 부분은 거의 없었습니다.

Claude나 ChatGPT와 상담하며 요구 사항을 프롬프트(Prompt)에 녹여내다 보니, 순조롭게 작동하는 단계까지 가져갈 수 있었습니다.

개인적으로는 코드를 대량으로 작성하는 것보다, "정기 실행 작업(Job)으로서 파탄 나지 않는 프롬프트를 만드는 것"이 중요하다고 느꼈습니다.

Research Preview 단계임

Claude Code Routines는 현 시점에서 Research Preview 단계입니다.

향후 사양이나 제한 사항이 변경될 가능성이 있으므로, 본격적인 업무 크리티컬(Critical) 처리에 사용할 경우에는 그 전제를 고려해야 합니다.

Secret 취급에 주의할 것

Slack Webhook URL이나 GAS(Google Apps Script) 토큰은 절대로 프롬프트 본문이나 로그에 노출되지 않도록, 프롬프트 내에도 제약 사항을 넣어두었습니다.

LLM의 판단은 완벽하지 않음

스코어링(Scoring)이나 중복 판정은 LLM에 맡기고 있지만, 완벽하지는 않습니다.

후속 보도까지 중복으로 간주하여 제외해 버리는 등의 문제가 발생할 가능성이 있습니다.

Claude Code Routines를 사용함으로써 API 종량제 과금 없이 LLM 정기 태스크를 쉽게 만들 수 있었습니다.

이번에 만든 것은 주로 다음 두 가지입니다.

  • Qiita 기사 공개 후 X(구 Twitter) 소개 포스트 초안 생성
  • 매일 아침 IT 뉴스 수집 · 스코어링 · Slack 알림

특히 IT 뉴스 배포에서는 Claude Code Routines에 다음 사항을 맡기고 있습니다.

  • 웹 검색
  • RSS 순회
  • 중복 제거
  • 스코어링
  • 요약
  • Slack 배포
  • GAS로의 배포 기록

반면, 상태 관리는 GAS로 넘기고, Slack Workflow를 알림 및 확인의 입구로 사용하고 있습니다.

LLM에 모든 것을 맡기는 것이 아니라, LLM이 잘하는 판단 · 요약 · 문장 생성과 외부 도구가 잘하는 상태 관리 · 알림 · 승인을 조합하는 것이 포인트라고 느꼈습니다.

앞으로는 팀에 더 적합한 뉴스 소스를 추가하거나, AI/LLM · 클라우드 · 보안 · 프론트엔드 등의 영역별 배포도 시도해 보고 싶습니다.

또한, Slack의 리액션이나 댓글을 바탕으로 자주 읽힌 뉴스나 실제로 업무에 영향을 준 뉴스를 스코어링에 반영할 수 있다면 더욱 실용적인 메커니즘이 될 수 있을 것 같습니다.

Claude Code Routines는 뉴스 배포뿐만 아니라 다음과 같은 용도로도 응용할 수 있을 것 같습니다.

  • 기술 홍보 포스팅 초안 작성
  • 릴리스 정보의 정기 모니터링
  • 장애 · 보안 정보 수집
  • 사내 지식의 정기 정리
  • GitHub Issue 및 PR 정리
  • 팀 대상 정기 리포트 작성

Slack 알림이나 업무 자동화에 관심이 있는 사람에게 Claude Code Routines는 상당히 시도해 보기 좋은 선택지라고 생각합니다.

당사의 비전은 『세계에서 가장 「배우기 쉽고, 이해하기 쉽고, 지속하기 쉬운」 학습 수단을 제공하는 것』입니다. 혁신적인 교육 서비스를 만들어 성장시킴으로써 온라인 교육 분야에서 넘버원 존재가 되어 세계로 전개해 나가는 것을 목표로 하고 있습니다.

  • スタディング (Studying): 「배우기 쉽고, 이해하기 쉽고, 지속하기 쉬운」 온라인 자격증 대비 강좌
  • スタディングキャリア (Studying Career): 자격증 취득자의 구직 및 커리어 형성을 지원하는 전직 서비스
  • AirCourse: 무제한 동영상 연수가 포함된 e러닝 시스템 (LMS)

AI 자동 생성 콘텐츠

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

원문 바로가기
0

댓글

0