AI & 코딩

깃허브 액션(GitHub Actions)과 클로드(Claude) API로 매일 데이터 수집부터 AI 분석까지 완벽 자동화하기

디지털가드너 (Digital Gardener) 2026. 7. 1. 23:02

현대 비즈니스와 개인 프로젝트에서 데이터의 중요성은 날로 커지고 있습니다. 하지만 매일 특정 시간에 웹사이트를 방문하거나 API를 호출하여 데이터를 수집하고, 이를 분석하여 유의미한 인사이트를 도출하는 과정은 상당한 시간과 노력을 요구합니다. 만약 이 모든 과정을 서버 구축 없이, 그리고 사람의 개입 없이 완전히 자동화할 수 있다면 어떨까요?

이 글에서는 별도의 클라우드 서버 호스팅 비용 없이 GitHub Actions의 스케줄링 기능을 활용하고, 압도적인 언어 이해 능력을 자랑하는 Anthropic의 Claude API를 연동하여 매일 정해진 시간에 데이터를 수집 및 분석하는 완벽한 자동화 파이프라인 구축 방법을 상세히 안내합니다.

1. 서버 없는 데이터 파이프라인: 왜 이 조합인가?

데이터 수집 및 분석을 자동화하기 위해 과거에는 AWS EC2, Raspberry Pi, 또는 항상 켜져 있는 개인 PC가 필요했습니다. 하지만 GitHub Actions를 활용하면 이러한 물리적/가상 서버가 전혀 필요하지 않습니다.

  • GitHub Actions의 강력한 스케줄링: 크론(Cron) 표현식을 사용하여 원하는 주기로 스크립트를 실행할 수 있습니다. 퍼블릭 레포지토리의 경우 무료로 제공되는 실행 시간이 넉넉하여 개인의 일일 데이터 파이프라인을 구축하기에 최적입니다.
  • Claude API의 분석 능력: 수집된 로우(Raw) 데이터는 그 자체로는 의미를 갖기 어렵습니다. Claude 3(Haiku, Sonnet, Opus 등) 모델은 방대한 텍스트나 복잡한 수치 데이터를 빠르게 요약하고, 트렌드를 분석하며, 인간의 언어로 인사이트를 도출하는 데 탁월한 성능을 발휘합니다.
  • 보안과 유지보수: GitHub 내에서 코드와 실행 환경, 그리고 API 키와 같은 민감한 보안 정보를 모두 일원화하여 안전하게 관리할 수 있습니다.

2. 1단계: 필수 준비 작업

자동화를 시작하기 전에 두 가지 핵심 준비물이 필요합니다.

  1. Anthropic API 키 발급
    • Anthropic 개발자 콘솔에 접속하여 회원가입 및 로그인을 진행합니다.
    • 대시보드에서 새로운 API 키를 생성합니다. 이때 화면에 나타나는 키 값(sk-ant-xxx...)은 다시 확인할 수 없으므로, 메모장 등에 안전하게 임시 보관합니다.
  2. GitHub 레포지토리 생성
    • GitHub에 로그인한 후 새로운 레포지토리를 생성합니다. 분석 결과물이 공개되어도 무방하다면 Public으로, 개인적인 데이터라면 Private으로 설정합니다.

3. 2단계: GitHub Secrets로 안전한 API 키 관리

절대 소스 코드 내부에 API 키를 직접 타이핑해서는 안 됩니다. 코드가 유출되거나 실수로 공개될 경우, 해커들에 의해 막대한 API 청구서가 발생할 수 있습니다. GitHub은 이를 방지하기 위해 'Secrets'라는 암호화된 환경 변수 기능을 제공합니다.

  1. 생성한 GitHub 레포지토리의 상단 메뉴에서 Settings 탭을 클릭합니다.
  2. 좌측 사이드바에서 Secrets and variables를 확장하고 Actions를 선택합니다.
  3. 초록색 New repository secret 버튼을 클릭합니다.
  4. Name 칸에 ANTHROPIC_API_KEY를 대문자로 입력합니다.
  5. Secret 칸에 발급받은 Claude API 키를 붙여넣고 저장합니다.

이제 이 키는 GitHub Actions 워크플로우 실행 시에만 안전하게 호출되며, 외부나 로그 화면에는 절대 노출되지 않습니다.

4. 3단계: 데이터 수집 및 분석 Python 스크립트 작성

저장소의 루트 경로에 main.py 파일을 생성하고, 데이터를 수집한 뒤 Claude에게 분석을 요청하는 코드를 작성합니다. 아래는 가상의 뉴스 API나 데이터 엔드포인트에서 텍스트를 가져와 Claude로 요약 분석하는 예시 코드입니다.

Python
 
import os
import requests
from anthropic import Anthropic
from datetime import datetime

# 1. 환경 변수에서 API 키 불러오기 (GitHub Secrets와 연동)
API_KEY = os.environ.get("ANTHROPIC_API_KEY")

if not API_KEY:
    raise ValueError("Anthropic API 키가 설정되지 않았습니다.")

client = Anthropic(api_key=API_KEY)

def collect_daily_data():
    """
    웹사이트나 외부 API에서 데이터를 수집하는 함수입니다.
    이 예시에서는 가상의 데이터 수집 과정을 텍스트로 대체합니다.
    실제 사용 시에는 requests, BeautifulSoup 등을 활용하여 데이터를 크롤링하거나 API를 호출하세요.
    """
    print("데이터 수집을 시작합니다...")
    # 예시: requests.get("https://api.example.com/daily-data").text
    sample_data = """
    오늘의 주요 트렌드 데이터:
    1. AI 기술 도입 기업 전년 대비 45% 증가
    2. 클라우드 인프라 유지보수 비용 평균 15% 절감
    3. Python 기반 데이터 자동화 스크립트 활용도 사상 최고치 경신
    """
    return sample_data

def analyze_with_claude(data):
    """
    수집된 데이터를 Claude API로 전송하여 분석 결과를 받아오는 함수입니다.
    """
    print("Claude를 통한 데이터 분석을 시작합니다...")
    
    prompt = f"""
    당신은 전문 데이터 분석가입니다. 다음 제공된 일일 데이터를 분석하고, 
    가장 중요한 인사이트 3가지를 명확한 마크다운 리스트 형태로 도출해주세요.
    
    [수집된 데이터]
    {data}
    """

    response = client.messages.create(
        model="claude-3-haiku-20240307", # 비용 효율적인 Haiku 모델 사용 (필요시 Sonnet/Opus 변경)
        max_tokens=1000,
        temperature=0.3, # 분석의 정확성을 위해 온도를 낮게 설정
        messages=[
            {"role": "user", "content": prompt}
        ]
    )
    
    return response.content[0].text

def save_report(report_content):
    """
    분석 결과를 마크다운 파일로 저장하는 함수입니다.
    """
    today_date = datetime.now().strftime("%Y-%m-%d")
    filename = f"report_{today_date}.md"
    
    with open(filename, "w", encoding="utf-8") as f:
        f.write(f"# {today_date} 일일 데이터 분석 리포트\n\n")
        f.write(report_content)
        
    print(f"분석 리포트가 {filename}로 성공적으로 저장되었습니다.")

if __name__ == "__main__":
    # 파이프라인 실행
    raw_data = collect_daily_data()
    analysis_result = analyze_with_claude(raw_data)
    save_report(analysis_result)

이 코드는 크게 세 단계로 나뉩니다. 데이터를 수집하고, Claude API에 프롬프트를 전송하여 정제된 분석 결과를 얻은 뒤, 이를 Markdown 형식의 파일로 로컬(실행 환경)에 저장합니다.

5. 4단계: GitHub Actions 스케줄링 워크플로우 구성

이제 작성한 Python 코드를 매일 정해진 시간에 자동으로 실행해 줄 워크플로우 파일을 작성해야 합니다. 저장소 내에 .github/workflows/daily_analysis.yml 경로로 파일을 생성합니다. 폴더 구조가 반드시 일치해야 GitHub이 이를 워크플로우로 인식합니다.

YAML
 
name: Daily Data Collection and Claude Analysis

on:
  # 스케줄링 설정 (UTC 기준)
  schedule:
    - cron: '0 0 * * *' # 매일 UTC 자정 (한국 시간 오전 9시)에 실행
  
  # 수동 실행을 위한 트리거
  workflow_dispatch:

permissions:
  contents: write # 분석 결과를 레포지토리에 푸시하기 위한 권한

jobs:
  run-pipeline:
    runs-on: ubuntu-latest

    steps:
      - name: 저장소 코드 불러오기
        uses: actions/checkout@v4

      - name: Python 환경 설정
        uses: actions/setup-python@v5
        with:
          python-version: '3.10'

      - name: 필수 라이브러리 설치
        run: |
          python -m pip install --upgrade pip
          pip install requests anthropic

      - name: 데이터 수집 및 분석 스크립트 실행
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: python main.py

      - name: 분석 결과 리포트를 GitHub에 커밋 및 푸시
        run: |
          git config --local user.email "action@github.com"
          git config --local user.name "GitHub Action Bot"
          git add report_*.md
          # 변경 사항이 있을 경우에만 커밋하도록 처리
          git diff --quiet && git diff --staged --quiet || (git commit -m "Add daily analysis report" && git push)

워크플로우 핵심 해설

  • cron 표현식의 시간대: GitHub Actions의 크론은 항상 UTC(협정 세계시)를 기준으로 동작합니다. 한국 표준시(KST)는 UTC보다 9시간 빠릅니다. 따라서 한국 시간으로 매일 오전 9시에 실행하고 싶다면, 위 코드처럼 0 0 * * * (UTC 자정)로 설정해야 합니다. 만약 매일 오후 6시(18시)에 실행하고 싶다면 UTC 기준 오전 9시인 0 9 * * *로 설정합니다.
  • workflow_dispatch: 이 옵션을 추가하면 GitHub 웹사이트의 Actions 탭에서 버튼을 눌러 스케줄된 시간과 관계없이 즉시 스크립트를 수동으로 실행하고 테스트해 볼 수 있습니다.
  • 결과 저장 자동화: 스크립트가 생성한 .md 리포트 파일을 봇이 자동으로 레포지토리에 git commit 및 push 하도록 구성되어 있습니다. 이를 통해 매일 누적되는 데이터 분석 기록을 GitHub에서 바로 열람할 수 있습니다.

6. 트러블슈팅 및 운영 모범 사례

자동화 파이프라인을 구축한 후 안정적으로 운영하기 위해 다음 사항들을 점검해야 합니다.

  • API 호출 제한 (Rate Limit) 관리: 데이터 수집 대상 웹사이트나 Claude API 모두 짧은 시간에 과도한 요청을 보내면 차단당할 수 있습니다. 반복문을 사용하여 여러 번 호출해야 할 경우, time.sleep()을 사용하여 지연 시간을 두는 것이 좋습니다.
  • 정확한 프롬프트 엔지니어링: Claude에게 단순히 "분석해줘"라고 하기보다는, 입력 데이터의 스키마, 출력 형식(예: JSON, Markdown 표), 그리고 분석 시 중점을 두어야 할 평가지표를 명확히 지시할수록 결과물의 질이 비약적으로 상승합니다.
  • 실행 로그 모니터링: 스크립트 실행 중 에러가 발생하면 GitHub Actions 탭에서 붉은색 'X' 아이콘이 표시됩니다. 해당 작업을 클릭하면 몇 번째 줄의 코드에서 문제가 발생했는지 상세한 콘솔 로그를 확인할 수 있습니다.

자주 묻는 질문 (FAQ)

Q. GitHub Actions의 스케줄링(Cron)은 정확히 해당 시간에 실행되나요? GitHub Actions의 스케줄된 이벤트는 서버 리소스 상황에 따라 지정된 시간보다 몇 분에서 길게는 수십 분 정도 지연되어 실행될 수 있습니다. 1분 1초가 중요한 초정밀 실시간 트레이딩 시스템 등에는 적합하지 않으나, 일일 단위의 데이터 수집 및 분석 리포트 생성에는 전혀 무리가 없습니다.

Q. 매일 생성되는 결과를 이메일이나 메신저로도 받을 수 있나요? 물론 가능합니다. Python 코드 내에 Telegram Bot API, Slack Webhook, 또는 SMTP 이메일 발송 코드를 추가하면, Claude가 작성한 분석 결과를 GitHub에 푸시함과 동시에 본인의 스마트폰으로 즉각적인 알림을 받을 수 있도록 확장할 수 있습니다.

Q. 데이터 수집 중 웹사이트 구조가 바뀌어 에러가 나면 어떻게 되나요? 데이터 크롤링 시 웹사이트의 DOM 구조가 변경되면 Python 스크립트에서 에러가 발생하여 워크플로우가 중단됩니다. 이를 방지하기 위해 try-except 구문을 활용하여 에러 발생 시 지정된 메일이나 메신저로 "데이터 수집 실패 알림"을 보내도록 예외 처리 코드를 구현하는 것을 권장합니다.

Q. 비용은 얼마나 발생하나요? GitHub Actions 자체는 퍼블릭 레포지토리 기준 무제한 무료이며, 프라이빗 레포지토리라도 매월 2,000분의 넉넉한 무료 실행 시간을 제공합니다. 발생하는 유일한 비용은 Claude API 사용료입니다. 일일 텍스트 데이터의 양과 사용하는 모델(Haiku, Sonnet 등)에 따라 다르지만, 일반적인 일일 요약 작업의 경우 월 몇 달러 수준의 매우 저렴한 비용으로 운영할 수 있습니다.

 

Q.   클로드 유료 사용자임, API 요금이 발생하나 ?

 

현재 클로드 유료 멤버십(Claude Pro나 Team 플랜)을 구독하고 계시더라도, GitHub Actions에서 API를 호출할 때 발생하는 비용은 구독료와 별개로 추가 청구됩니다.

그 이유와 함께 비용을 효율적으로 관리하는 방법을 알기 쉽게 정리해 드립니다.

웹 서비스(구독)와 API(종량제)의 차이

Anthropic(앤트로픽)은 사용 방식에 따라 서비스와 요금 체계를 완전히 이원화하여 운영하고 있습니다.

구분 Claude Pro / Team (구독제) Claude API (종량제)
주요 용도 웹사이트(claude.ai)나 모바일 앱 화면에서 대화형으로 사용 GitHub Actions, Python 코드, 외부 앱(n8n, Make 등) 연동 자동화
요금 방식 월정액 고정 지출 (예: 월 $20) 사용한 토큰(글자 수)만큼 쓴 대로 내는 종량제
인증 방식 개인 계정 로그인 API Key 발급 및 연동 (sk-ant-...)

따라서 GitHub Actions에 등록하신 ANTHROPIC_API_KEY를 통해 나가는 요청은 모두 API 개발자 계정(Anthropic Console)의 잔액에서 차감되거나 그곳으로 청구됩니다.

API 요금은 어떻게 충전하고 결제하나요?

  1. 별도의 콘솔 계정 필요: Anthropic Console에 접속하여 가입합니다. (웹 가입 계정과 연동은 가능하지만 결제는 별도입니다.)
  2. 크레딧 충전 (Prepaid): 일반적으로 처음 API를 사용할 때는 신용카드를 등록하고 최소 $5달러 등의 금액을 미리 충전(Top-up)해 두고, 토큰이 소비될 때마다 차감되는 방식을 사용합니다.

매일 데이터 분석 시 비용은 얼마나 나올까?

API 비용은 어떤 모델을 선택하느냐와 하루에 처리하는 데이터 양(토큰 수)에 따라 결정됩니다. 매일 일일 리포트를 생성한다고 가정했을 때의 대략적인 월 비용 시뮬레이션입니다.

💡 참고 (토큰이란?): 영문은 1단어가 약 1토큰, 한국어는 공백을 포함해 1글자가 약 1~2토큰 정도로 계산됩니다.

1. Claude 3.5 Sonnet 모델을 사용할 경우 (고성능, 복잡한 분석)

  • 비용 단어당 기준: 입력 $3/1M 토큰, 출력 $15/1M 토큰
  • 하루 사용량: 입력 5,000토큰(약 데이터 원본 수천 자) + 출력 2,000토큰(결과물) = 하루 약 $0.045
  • 한 달 예상 비용: 약 $1.35 (한화 약 1,800원 ~ 2,000원)

2. Claude 3 Haiku 모델을 사용할 경우 (초고속, 단순 요약/정제)

  • 비용 단어당 기준: 입력 $0.25/1M 토큰, 출력 $1.25/1M 토큰
  • 하루 사용량: 동일 조건 기준 하루 약 $0.00375
  • 한 달 예상 비용: 약 $0.11 (한화 약 150원)

수집하는 원본 데이터가 책 한 권 분량처럼 무지막지하게 크지 않다면, 매일 아침 자동으로 분석 파이프라인을 돌려도 한 달에 커피 한 잔 값도 안 되는 비용으로 충분히 운영이 가능합니다. 성능 중심의 분석이 필요하다면 3.5 Sonnet을, 가성비와 단순 정제가 목적이라면 3 Haiku를 코드(main.py)에 지정하여 비용을 조절하시는 것을 추천합니다.