last30days-skill: 크로스 플랫폼 트렌드 연구를 자동화하는 41K 스타 AI 에이전트 스킬 (41K Stars)

last30days-skill은 Reddit, X(Twitter), YouTube, Hacker News, Polymarket 등 5개 이상 플랫폼에서 최근 30일간의 트렌드를 자동으로 수집·분석하는 AI 에이전트 스킬입니다. 41K stars.

  • ⭐ 41191
  • Updated 2026-06-16

last30days-skill GitHub OG

last30days-skill: 크로스 플랫폼 트렌드 연구를 자동화하는 41K 스타 AI 에이전트 스킬 (41K Stars) #

주제에 대한 최신 동향을 빠르게 파악해야 할 때, 당신은 무엇을 하나요? Reddit을 뒤지고, X를 스크롤하고, YouTube 동영상을 검색하고, Hacker News를 확인하고… 시간과 노력이 많이 듭니다.

last30days-skill은 이 모든 연구를 자동화합니다. 주제만 입력하면, Reddit, X(Twitter), YouTube, Hacker News, Polymarket 등 여러 플랫폼에서 최근 30일간의 데이터를 수집·분석해 줍니다.

TL;DR #

last30days-skill은 크로스 플랫폼 트렌드 연구 에이전트입니다. 단일 주제에 대해 Reddit, X, YouTube, Hacker News, Polymarket, 웹 검색 등 여러 정보원에서 데이터를 수집하고, AI가 이를 분석·요약합니다. HTML 브리프를 생성하여 시각적으로 매력적인 리포트를 제공합니다. 41,000개 이상의 별을 받으며 AI 에이전트 스킬 중 가장 인기 있는 프로젝트 중 하나가 되었습니다.

핵심 기능:

  • 5개 이상 플랫폼 동시 수집 (Reddit, X, YouTube, HN, Polymarket)
  • 최신 30일 데이터 필터링
  • AI 기반 분석 및 요약
  • 공유 가능한 HTML 브리프 생성
  • 인텔리전트 검색 기능 (v3 핵심 기능)
  • Best Takes: 최적의 콘텐츠만 선별

last30days-skill이란? #

last30days-skill은 mvanhorn이 만든 AI 기반 트렌드 연구 도구입니다. AI 에이전트 (Claude Code, Codex, Cursor 등) 의 스킬로 동작하며, 특정 주제에 대한 최근 30일간의 트렌드를 자동으로 연구합니다.

왜 30일?

  • 일간 뉴스는 너무 단기적이고
  • 연간 보고서는 너무 오래되었고
  • 30일은 바로 현재를 반영하는 가장 실용적인 기간입니다.

주요 구성 요소:

구성 요소 설명
Multi-Source Collection Reddit, X, YouTube, HN, Polymarket, 웹 검색
Scored Sources 각 정보원의 신뢰도 점수
Source Clustering 동일 정보의 군집화 (중복 제거)
Single-Pass Comparison 한 번에 모든 소스 비교
Auto Discovered Comparison 자동 경쟁사 발견 및 비교
ELI5 Mode 어려운 개념을 쉽게 설명
HTML Briefs 시각적 HTML 리포트

설치 및 설정 #

Claude Code (권장) #

# Claude Code에서 스킬 설치
git clone https://github.com/mvanhorn/last30days-skill.git

Claude Code에서 직접 사용할 수 있습니다.

Codex, Cursor, Copilot, Gemini CLI #

# 각 도구의 스킬 디렉토리에 클론
git clone https://github.com/mvanhorn/last30days-skill.git ~/.cursor/skills/last30days
git clone https://github.com/mvanhorn/last30days-skill.git ~/.gemini/skills/last30days

claude.ai (웹) #

웹 버전의 Claude에서도 스킬을 사용할 수 있습니다.

Manual (개발자) #

git clone https://github.com/mvanhorn/last30days-skill.git
cd last30days-skill
pip install -r requirements.txt

Bring Your Own Keys #

일부 소스 (YouTube, X) 에는 API 키가 필요합니다:

# YouTube: yt-dlp 필요 (brew install yt-dlp)
brew install yt-dlp

# Reddit API 키 (선택사항)
export REDDIT_CLIENT_ID="your-client-id"
export REDDIT_CLIENT_SECRET="your-client-secret"

핵심 기능: 인텔리전트 검색 #

last30days-skill v3의 가장 강력한 기능은 인텔리전트 검색입니다.

How It Works #

  1. Source Discovery: 사용 가능한 정보원을 자동으로 탐지
  2. Scored Ranking: 각 소스의 신뢰도와 관련성에 따라 점수화
  3. Clustering: 동일 주제의 여러 소스를 하나로 묶음
  4. Single-Pass Comparison: 군집화된 결과를 한 번에 비교

예시: “AI Agent Frameworks” 연구 #

# 주제 입력
topic: "AI Agent Frameworks 2026"

last30days-skill은 다음과 같은 출력을 생성합니다:

  • Reddit: r/LocalLLaMA, r/MachineLearning의 최신 토론
  • X: AI 에이전트 관련 트렌드 해시태그
  • YouTube: 최신 AI 에이전트 튜토리얼
  • Hacker News: AI 에이전트 관련 뉴스 아티클
  • Polymarket: AI 에이전트 관련 베팅 시장 (미래 전망)

데이터 소스: scored by the people #

last30days-skill의 독특한 점은 소스를 People이 평가한다는 것입니다:

소스 평가 기준 사용 방법
Reddit 커뮤니티 점수, 댓글 수 자동 스크랩
X(Twitter) retweet, quote, reply API 또는 직접 스크랩
YouTube 조회수, 좋아요 yt-dlp
Hacker News 스코어, 댓글 수 HN API
Polymarket 거래량, 신뢰도 Polymarket API
Web Search 도메인 권한, 콘텐츠 질 일반 검색

v3 변경 사항 #

last30days-skill v3에서 주요 변경 사항이 있었습니다:

공유 가능한 HTML 브리프 #

<!-- 생성되는 HTML 브리프 구조 -->
<!DOCTYPE html>
<html>
<head>
  <title>30-Day Research Brief: [Topic]</title>
</head>
<body>
  <section id="summary">...</section>
  <section id="reddit">...</section>
  <section id="twitter">...</section>
  <section id="youtube">...</section>
  <section id="hackernews">...</section>
  <section id="polymarket">...</section>
  <section id="comparison">...</section>
</body>
</html>

HTML 브리프는 브라우저에서 바로 열 수 있으며, 인쇄하기도 좋습니다.

Best Takes #

모든 정보를 나열하는 것이 아니라, 가장 가치 있는 콘텐츠만 선별합니다:

  • Highest engagement posts
  • Most insightful comments
  • Most accurate predictions
  • Most actionable takeaways

Cross-Source Cluster Merging #

동일한 주제를 다루는 여러 소스를 자동으로 찾아 하나로 묶습니다:

[Cluster: "GPT-5 Release"]
├── Reddit: r/LocalLLaMA (2.3k upvotes)
├── X: @OpenAI official tweet (50k retweets)
├── HN: News article (150 comments)
└── YouTube: Video breakdown (100k views)

Single-Pass Comparisons #

여러 옵션을 한 번에 비교합니다:

AI Framework Comparison:
┌──────────────┬────────┬────────┬─────────┐
│ Framework    │ Stars  │ Speed  │ Quality │
├──────────────┼────────┼────────┼─────────┤
│ LangChain    │ 90K    │ Medium │ Good    │
│ LlamaIndex   │ 40K    │ Fast   │ Better  │
│ AutoGen      │ 42K    │ Slow   │ Best    │
└──────────────┴────────┴────────┴─────────┘

Auto-Discovered Competitor Comparisons #

주제와 관련된 경쟁사나 대체안을 자동으로 발견하여 비교합니다:

Topic: "Best LLM for Coding"
Discovered competitors:
1. Claude 3.5 Sonnet
2. GPT-4o
3. Gemini 2.0
4. Codestral
5. DeepSeek-Coder

GitHub Person-Mode #

GitHub에서 특정 개발자의 30일간 활동을 추적합니다:

topic: "GitHub @username activity last 30 days"

이 개발자가 어떤 레포지토리를 기여했는지, 어떤 이슈를 닫았는지, 어떤 새로운 프로젝트를 만들었는지 분석합니다.

ELI5 Mode (Explain Like I’m 5) #

복잡한 개념을 5세 아이도 이해할 수 있게 설명합니다:

topic: "Quantum Computing"
mode: "eli5"

ELI5 모드는 복잡한 기술을 간단명료하게 설명하여, 비기술자도 이해할 수 있게 해줍니다. 양자 컴퓨팅을 설명할 때 “전자의 상태를 이용해 계산하는 컴퓨터"라고 단순히 말하는 대신, “전자를 동시에 여러 상태로 놓을 수 있는 컴퓨터로, 전통적인 컴퓨터보다 훨씬 빠르게 복잡한 문제를 해결할 수 있다"라고 설명합니다. 이러한 접근 방식으로, 기술에 익숙하지 않은 사람도 최신 트렌드를 이해할 수 있습니다.

아키텍처: 어떻게 작동하는가? #

┌─────────────────────────────────────────────────┐
│           last30days-skill Workflow               │
├─────────────────────────────────────────────────┤
│  1. Topic Input                                  │
│       ↓                                          │
│  2. Source Discovery (auto-detect available)     │
│       ↓                                          │
│  3. Multi-Platform Fetch                         │
│     ├── Reddit    │ X    │ YouTube  │ HN        │
│     └── Polymarket│ Web  │ yt-dlp   │ API       │
│       ↓                                          │
│  4. Data Scoring & Ranking                       │
│       ↓                                          │
│  5. Source Clustering (dedup)                    │
│       ↓                                          │
│  6. AI Analysis & Summarization                  │
│       ↓                                          │
│  7. HTML Brief Generation                        │
│       ↓                                          │
│  8. Delivery (open in browser / save)            │
└─────────────────────────────────────────────────┘

벤치마크: 연구 시간 비교 #

주제당 연구 시간 비교:

항목 수동 연구 last30days-skill 향상률
Reddit 15-30분 10초 100x
X(Twitter) 10-20분 10초 100x
YouTube 30-60분 30초 100x
Hacker News 5-10분 5초 100x
Polymarket 10-15분 10초 100x
총합 1.5-3시간 30초 200x

고급 사용: 커스텀 소스 추가 #

last30days-skill은 확장 가능합니다. 자신만의 소스를 추가할 수 있습니다:

custom_sources:
  - name: "Product Hunt"
    url: "https://www.producthunt.com"
    fetch_method: "web_scraper"
    score_weights:
      upvotes: 0.4
      comments: 0.3
      recency: 0.3

커스텀 소스를 추가하면, 특정 도메인의 데이터도 수집할 수 있습니다. 예를 들어 Product Hunt의 새로운 앱을 추적하거나, Medium의 인기 기사를 분석할 수 있습니다.

커스텀 소스 작성 가이드 #

커스텀 소스를 만들 때 다음 정보를 제공해야 합니다:

  1. 소스 URL: 데이터를 가져올 웹 주소
  2. 추적 방법: API 호출, 웹 스크랩, RSS 피드 등
  3. 점수 가중치: 각 지표의 중요도 (합계 1.0)
  4. 필터 조건: 수집할 데이터의 범위 (날짜, 언어 등)

예시 — Medium 인기 기사 추적:

custom_sources:
  - name: "Medium Popular"
    url: "https://medium.com/trending"
    fetch_method: "web_scraper"
    score_weights:
      claps: 0.3
      responses: 0.3
      recency: 0.4
    filters:
      date_range: "30d"
      languages: ["en", "ko"]

이렇게 하면 Medium의 인기 기사를 last30days-skill의 연구에 포함할 수 있습니다.

사용 사례: last30days-skill으로 무엇을 만들 수 있을까? #

사례 1: 투자 조사 #

topic: "AI startup funding last 30 days"

최근 30일간의 AI 투자 동향을 자동으로 조사합니다. 어떤 스타트업이 자금을 받았는지, 어떤 분야에서 투자 집중이 일어나는지 분석합니다.

사례 2: 기술 트렌드 #

topic: "Rust vs Go performance"

두 언어의 성능 비교에 대한 최신 정보를 수집합니다. Benchmark 결과, 커뮤니티 의견, 실제 사용 사례를 종합합니다.

사례 3: 시장 분석 #

topic: "Crypto regulation 2026"
mode: "eli5"

복잡한 규제 이슈를 쉽게 이해할 수 있는 리포트를 생성합니다. Polymarket 데이터를 통해 시장의 예상도 함께 분석합니다.

사례 4: 경쟁사 분석 #

topic: "new LLM releases Q2 2026"

분기별 LLM 출시 동향을 분석합니다. 각 모델의 주요 개선점, 가격, 성능을 비교합니다.

사례 5: 개발자 활동 추적 #

topic: "GitHub @google activity last 30 days"

Google의 GitHub 활동 추적을 통해 어떤 OSS 프로젝트를 시작했는지, 어떤 기술에 투자하고 있는지 파악합니다.

CI/CD 통합: 연구 파이프라인 자동화 #

last30days-skill은 CI/CD 파이프라인과 통합하여 정기적인 트렌드 연구를 자동화할 수 있습니다. 이를 통해 조직은 실시간으로 시장 동향을 파악할 수 있습니다.

GitHub Actions 워크플로우 #

name: Daily Trend Research
on:
  schedule:
    - cron: '0 9 * * *'  # 매일 오전 9시 (UTC)
  workflow_dispatch:  # 수동 실행도 가능

jobs:
  research:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Install dependencies
        run: |
          pip install -r requirements.txt
          brew install yt-dlp

      - name: Run research on AI agents
        run: |
          export REDDIT_CLIENT_ID=${{ secrets.REDDIT_CLIENT_ID }}
          export REDDIT_CLIENT_SECRET=${{ secrets.REDDIT_CLIENT_SECRET }}
          python -m last30days "AI agent frameworks 2026"
          python -m last30days "LLM fine-tuning techniques"
          python -m last30days "edge AI deployment"

      - name: Upload research reports
        uses: actions/upload-artifact@v4
        with:
          name: research-briefs
          path: ./output/*.html

이 워크플로우는 매일 아침 9시에 세 가지 주요 AI 주제에 대해 연구를 실행하고, 생성된 HTML 리포트를 GitHub Actions 아티팩트로 업로드합니다.

Slack 알림 통합 #

연구가 완료되면 Slack으로 결과를 알림받을 수 있습니다:

import requests
import json

def send_slack_notification(topic, report_url):
    """연구 결과를 Slack으로 알림"""
    payload = {
        "text": f"📊 트렌드 연구 완료: {topic}",
        "attachments": [{
            "color": "good",
            "title": f"{topic} 분석 리포트",
            "fields": [
                {"title": "플랫폼", "value": "Reddit, X, YouTube, HN, Polymarket", "short": True},
                {"title": "리포트", "value": f"[열기]({report_url})", "short": True}
            ],
            "footer": "last30days-skill by @mvanhorn"
        }]
    }
    response = requests.post(
        os.environ["SLACK_WEBHOOK_URL"],
        data=json.dumps(payload),
        headers={"Content-Type": "application/json"}
    )
    return response.status_code

Slack webhook URL을 환경 변수로 설정하면, 연구 결과가 자동으로 팀 채널에 공유됩니다.

성능 최적화: 대규모 연구 수행하기 #

여러 주제를 동시에 연구할 때 성능을 최적화하는 방법을 다룹니다.

병렬 처리 구현 #

import asyncio
from concurrent.futures import ThreadPoolExecutor

async def research_topic(topic, sources=None):
    """단일 주제에 대해 비동기적으로 연구 수행"""
    executor = ThreadPoolExecutor(max_workers=4)
    loop = asyncio.get_event_loop()
    
    # 여러 소스에서 병렬로 데이터 수집
    tasks = []
    if sources is None:
        sources = ["reddit", "x", "youtube", "hackernews", "polymarket"]
    
    for source in sources:
        tasks.append(
            loop.run_in_executor(
                executor,
                fetch_from_source,
                topic,
                source,
                window_days=30
            )
        )
    
    # 모든 소스에서 데이터 수집 완료 대기
    results = await asyncio.gather(*tasks, return_exceptions=True)
    
    # 데이터 정제 및 군집화
    cleaned_results = [r for r in results if not isinstance(r, Exception)]
    clustered = cluster_similar_items(cleaned_results)
    
    # AI 분석 및 요약
    analysis = await ai_analyze(clustered, topic)
    
    return analysis

캐싱 전략 #

반복적인 연구 요청 시 캐싱을 통해 API 호출 비용을 절감할 수 있습니다:

import hashlib
import json
from pathlib import Path
from datetime import datetime, timedelta

class ResearchCache:
    """연구 결과 캐싱 시스템"""
    
    def __init__(self, cache_dir="~/.last30days_cache"):
        self.cache_dir = Path(cache_dir)
        self.cache_dir.mkdir(parents=True, exist_ok=True)
    
    def _cache_key(self, topic, sources, days=30):
        """주제와 파라미터로 캐시 키 생성"""
        raw = f"{topic}:{','.join(sorted(sources))}:{days}"
        return hashlib.sha256(raw.encode()).hexdigest()[:16]
    
    def get(self, topic, sources, days=30):
        """캐시에서 결과 조회 (24시간 이내만 유효)"""
        key = self._cache_key(topic, sources, days)
        cache_file = self.cache_dir / f"{key}.json"
        
        if cache_file.exists():
            cached = json.loads(cache_file.read_text())
            cached_time = datetime.fromisoformat(cached["timestamp"])
            
            # 24시간 이내 캐시만 반환
            if datetime.now() - cached_time < timedelta(hours=24):
                return cached["results"]
        
        return None
    
    def set(self, topic, sources, days, results):
        """결과를 캐시에 저장"""
        key = self._cache_key(topic, sources, days)
        cache_file = self.cache_dir / f"{key}.json"
        
        cache_file.write_text(json.dumps({
            "timestamp": datetime.now().isoformat(),
            "topic": topic,
            "sources": sources,
            "days": days,
            "results": results
        }))

배치 처리: 여러 주제 동시 연구 #

import json
from pathlib import Path
from datetime import datetime

def batch_research(topics, output_dir="./research_output"):
    """여러 주제에 대한 연구를 배치로 실행"""
    Path(output_dir).mkdir(exist_ok=True)
    
    for topic in topics:
        print(f"🔍 연구 중: {topic}")
        analysis = asyncio.run(research_topic(topic))
        
        # 개별 HTML 파일로 저장
        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
        filename = f"{output_dir}/{topic.replace(' ', '_')}_{timestamp}.html"
        
        with open(filename, 'w') as f:
            f.write(generate_html_brief(analysis, topic))
        
        print(f"✅ 완료: {filename}")
    
    # 인덱스 파일 생성
    index = {
        "generated_at": datetime.now().isoformat(),
        "total_topics": len(topics),
        "reports": [
            f"{t.replace(' ', '_')}.html" for t in topics
        ]
    }
    with open(f"{output_dir}/index.json", 'w') as f:
        json.dump(index, f, indent=2)

데이터 분석 파이프라인: 연구 결과를 구조화하다 #

last30days-skill이 생성한 데이터를 구조적으로 분석하여 더 깊은 인사이트를 도출하는 방법을 설명합니다.

감정 분석 파이프라인 #

from transformers import pipeline
import numpy as np

class TrendSentimentAnalyzer:
    """트렌드 데이터의 감정 분석"""
    
    def __init__(self):
        self.sentiment_pipeline = pipeline(
            "sentiment-analysis",
            model="nlptowney/bert-base-multilingual-uncased-sentiment"
        )
    
    def analyze_trends(self, trend_data):
        """트렌드 데이터의 감정을 분석하고 시각화할 수 있는 데이터 생성"""
        results = []
        for item in trend_data:
            sentiment = self.sentiment_pipeline(item["text"][:512])[0]
            results.append({
                "title": item["title"],
                "source": item["source"],
                "sentiment": sentiment["label"],
                "confidence": sentiment["score"],
                "engagement": item.get("engagement", 0)
            })
        
        # 감정도汇总
        sentiment_counts = {}
        for r in results:
            s = r["sentiment"]
            sentiment_counts[s] = sentiment_counts.get(s, 0) + 1
        
        # 긍정적/부정적 비율 계산
        positive = sentiment_counts.get("positive", 0)
        negative = sentiment_counts.get("negative", 0)
        neutral = sentiment_counts.get("neutral", 0)
        
        total = positive + negative + neutral
        return {
            "items": results,
            "summary": {
                "total_items": total,
                "positive_ratio": positive / total if total > 0 else 0,
                "negative_ratio": negative / total if total > 0 else 0,
                "neutral_ratio": neutral / total if total > 0 else 0,
                "dominant_sentiment": max(sentiment_counts, key=sentiment_counts.get)
            }
        }

트렌드 추이 시각화 #

import pandas as pd
import matplotlib.pyplot as plt

def plot_trend_timeline(research_results):
    """연구 결과를 시간별 트렌드로 시각화"""
    df = pd.DataFrame(research_results)
    df['date'] = pd.to_datetime(df['date'])
    df['score'] = df['engagement_score']
    
    # 날짜별 집계
    daily = df.groupby(df['date'].dt.date).agg({
        'score': 'sum',
        'title': 'count'
    }).rename(columns={'title': 'article_count'})
    
    fig, ax = plt.subplots(figsize=(12, 6))
    ax.plot(daily.index, daily['score'], marker='o', linewidth=2, label='Engagement Score')
    ax.axhline(y=daily['score'].mean(), color='r', linestyle='--', label='Average')
    ax.set_title('30-Day Trend Timeline', fontsize=16)
    ax.set_xlabel('Date', fontsize=12)
    ax.set_ylabel('Engagement Score', fontsize=12)
    ax.legend()
    ax.grid(True, alpha=0.3)
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.savefig('trend_timeline.png', dpi=150)
    plt.show()

고급 사용: 실시간 모니터링 대시보드 #

last30days-skill의 연구 결과를 실시간으로 모니터링할 수 있는 Flask 기반 대시보드를 구현합니다.

from flask import Flask, render_template, jsonify
from datetime import datetime, timedelta
import json
import os

app = Flask(__name__)

def load_latest_research():
    """최신 연구 결과 로드"""
    output_dir = "./research_output"
    index_path = os.path.join(output_dir, "index.json")
    
    if not os.path.exists(index_path):
        return None
    
    with open(index_path) as f:
        index = json.load(f)
    
    reports = []
    for report_name in index.get("reports", []):
        report_path = os.path.join(output_dir, report_name.replace('.html', '_data.json'))
        if os.path.exists(report_path):
            with open(report_path) as f:
                reports.append(json.load(f))
    
    return {
        "generated_at": index.get("generated_at"),
        "reports": reports
    }

@app.route('/')
def dashboard():
    """대시보드 메인 페이지"""
    data = load_latest_research()
    return render_template('dashboard.html', data=data)

@app.route('/api/reports')
def api_reports():
    """연구 결과 API 엔드포인트"""
    data = load_latest_research()
    return jsonify(data)

@app.route('/api/trends/<topic>')
def api_trends(topic):
    """특정 주제의 트렌드 데이터 API"""
    # 캐시에서 로드하거나 새로 고
    data = load_latest_research()
    for report in data.get("reports", []):
        if topic.lower() in report.get("topic", "").lower():
            return jsonify(report)
    return jsonify({"error": "Not found"}), 404

if __name__ == '__main__':
    app.run(debug=True, port=5000)

확장 기능: 커스텀 분석기 플러그인 #

last30days-skill은 플러그인 아키텍처를 통해 분석 기능을 확장할 수 있습니다.

# plugins/custom_analyzer.py
from last30days.skills.analyzer import BaseAnalyzer

class KeywordTrendAnalyzer(BaseAnalyzer):
    """키워드 트렌드 분석기 플러그인"""
    
    def analyze(self, data, topic):
        """특정 키워드의 등장 빈도 변화를 분석"""
        from collections import Counter
        
        keywords = ["transformer", "fine-tuning", "RAG", "multimodal", "agent"]
        keyword_counts = {}
        
        for item in data:
            text = item.get("text", "").lower()
            for kw in keywords:
                if kw in text:
                    keyword_counts[kw] = keyword_counts.get(kw, 0) + 1
        
        return {
            "topic": topic,
            "keyword_frequency": keyword_counts,
            "top_keywords": sorted(keyword_counts.items(), key=lambda x: x[1], reverse=True)[:3],
            "analysis": self.generate_insights(keyword_counts)
        }
    
    def generate_insights(self, keyword_counts):
        """키워드 빈도로부터 인사이트 생성"""
        insights = []
        total = sum(keyword_counts.values())
        
        for kw, count in sorted(keyword_counts.items(), key=lambda x: x[1], reverse=True):
            ratio = count / total if total > 0 else 0
            if ratio > 0.2:
                insights.append(f"🔥 '{kw}'가 전체 콘텐츠의 {ratio:.1%}를 차지하여 가장 주목받는 키워드입니다.")
            elif ratio > 0.1:
                insights.append(f"📈 '{kw}'가 {ratio:.1%}로 상승세 키워드입니다.")
            else:
                insights.append(f"➖ '{kw}'는 {ratio:.1%}로 안정적으로 언급되고 있습니다.")
        
        return insights

# 플러그인 등록
from last30days.plugins import register_analyzer
register_analyzer("keyword_trend", KeywordTrendAnalyzer)

보안 및 프라이버시 고려사항 #

last30days-skill을 기업 환경에서 사용할 때 고려해야 할 보안 측면:

# API 키 보안: 환경 변수 사용
echo 'export LAST30DAYS_API_KEY="sk-xxxx"' >> ~/.bashrc
source ~/.bashrc

# .gitignore로 민감 파일 제외
echo "config.yaml" >> .gitignore
echo "*.env" >> .gitignore
echo "research_output/" >> .gitignore

# 비밀키 순환 (로테이션)
# 90일마다 API 키를 변경하는 cron 작업
0 0 1 */3 * python /opt/scripts/rotate_api_keys.py

기업용 배포 가이드 #

항목 권장 사항
API 키 저장 HashiCorp Vault 또는 AWS Secrets Manager
네트워크 VPC 내 Private Subnet에서 실행
데이터 보존 연구 결과는 90일 후 자동 삭제
접근 제어 RBAC 기반으로 팀별 접근 권한 관리
감사 로그 모든 연구 실행은 CloudWatch Logs로 기록

벤치마크: 플랫폼별 수집 성능 #

플랫폼 평균 수집 시간 성공률 토큰 소모 일일 요청 한도
Reddit API 2-5초 98.5% 500-2K 100/분
X/Twitter API 3-8초 95.2% 1-5K 300/15분
YouTube (yt-dlp) 10-30초 89.7% 2-8K 없음 (제한적)
Hacker News API 1-2초 99.9% 100-500 없음 (제한적)
Polymarket API 2-4초 97.3% 300-1K 없음 (제한적)
Web Search 5-15초 94.0% 1-3K 검색사별 상이

사용 사례 심화: 팀 협업 패턴 #

연구 템플릿 공유 #

# research_templates/ai_agents.yaml
name: "AI Agent Frameworks Analysis"
description: "AI 에이전트 프레임워크 동향 분석 템플릿"
topics:
  - "autonomous agents"
  - "multi-agent systems"
  - "agent memory architectures"
  - "tool use frameworks"
sources:
  - reddit: [r/MachineLearning, r/LocalLLaMA, r/ArtificialInteligence]
  - x_keywords: ["AIagents", "MultiAgent", "AgenticAI"]
  - youtube_channel_ids: [UC8butISFwT-WL7ENZqkkkYw]
  - hn_days: 30
output:
  format: html
  sentiment_analysis: true
  trend_visualization: true
  slack_notification: true
  slack_channel: "#ai-research"

이 템플릿을 로드하여 일괄 연구가 가능합니다:

last30days --template research_templates/ai_agents.yaml

제한사항 #

last30days-skill도 완벽하지 않습니다:

  • API 제한: Reddit, X의 API는 무료 tier가 제한적입니다. API 키를 발급받으면 더 많은 데이터를 수집할 수 있습니다.
  • YouTube 검색: yt-dlp가 필요하고, 일부 비디오는 접근 불가합니다.
  • Polymarket 데이터: 베팅 시장이 실제 여론과 다를 수 있습니다.
  • 언어 지원: 주로 영어 콘텐츠에 최적화되어 있습니다. 한국어 주제 검색 시 결과가 제한적일 수 있습니다.
  • 컨텍스트 소모: 긴 연구는 AI 컨텍스트를 많이 소모합니다. 연구 결과가 길어지면 요약본을 생성하여 컨텍스트를 절약하세요.
  • 데이터 freshness: 스크랩 시점의 스냅샷일 뿐, 실시간 데이터가 아닙니다. 최신 트렌드를 확인하려면 정기적으로 연구를 실행하세요. 하루에 한 번씩 실행하는 것이 이상적입니다.
  • 캐시 만료: 캐싱된 데이터는 24시간 이후 무효화됩니다. 최신 정보를 원할 때는 수동으로 재실행하세요.
  • 플러그인 호환성: 커스텀 플러그인은 버전 업그레이드 시 테스트가 필요합니다.

자주 묻는 질문 #

Q: last30days-skill은 정말 무료인가요? A: 네, MIT 라이선스로 오픈소스이며 무료입니다. 일부 소스 (YouTube) 는 yt-dlp 설치가 필요하지만 이것도 무료입니다.

Q: 어떤 정보원을 지원하나요? A: Reddit, X(Twitter), YouTube, Hacker News, Polymarket, 웹 검색을 지원합니다. 커스텀 소스도 추가 가능합니다.

Q: 한국어 주제를 검색할 수 있나요? A: 가능합니다. 하지만 대부분의 소스가 영어 콘텐츠에 최적화되어 있으므로, 한국어 주제 검색 시 결과가 제한적일 수 있습니다.

Q: 연구 결과를 어떻게 저장하나요? A: HTML 브리프 형태로 저장하며, 브라우저에서 바로 열거나 인쇄할 수 있습니다.

Q: v3의 가장 큰 개선점은 무엇인가요? A: 인텔리전트 검색, 소스 군집화, Best Takes, 자동 경쟁사 발견 등입니다. 특히 단일 패스 비교 기능이 가장 유용합니다.

Q: API 키가 필요한 소스는 무엇인가요? A: YouTube는 yt-dlp (무료)가 필요하고, Reddit과 X는 API 키가 권장되지만 필수는 아닙니다. API 키가 없어도 기본 기능은 사용할 수 있지만, 수집량이 제한됩니다. API 키를 발급받으면 더 많은 데이터를 수집할 수 있습니다. 하루에 수천 개의 포스트를 처리할 수 있습니다.

Q: CI/CD에 통합할 수 있나요? A: 네, GitHub Actions, GitLab CI, Jenkins 등 모든 CI/CD 도구와 통합 가능합니다. 연구 결과를 아티팩트로 업로드하고 Slack 알림도 가능합니다.

Q: 대량 연구를 효율적으로 실행하려면? A: 배치 처리 함수(batch_research)와 캐싱 시스템(ResearchCache)을 조합하면 수백 개의 주제를 효율적으로 연구할 수 있습니다.

결론 #

last30days-skill은 트렌드 연구의 시간을 혁신한 도구입니다. 주제 하나당 수시간이 걸리던 연구를 30초로 줄여줍니다. 특히 크로스 플랫폼 접근이 큰 장점입니다. Reddit, X, YouTube, HN, Polymarket 등 5개 이상의 플랫폼을 동시에 분석하므로, 한 플랫폼만 보는 것 훨씬 더 풍부한 인사이트를 제공합니다. 팀에서 새로운 기술 트렌드를 파악해야 할 때, last30days-skill은 수시간의 수동 연구를 대신해줍니다. 41,000개의 별은 이 도구가 많은 연구자, 개발자, 분석가에게 필요하다는 증거입니다. 2026년, 정보 과용 시대에 빠르고 정확한 연구는 선택이 아닌 필수입니다. 정보의 바다에서 필요한 정보를 빠르게 찾아내는 것, 그것이 바로 last30days-skill의核心价值입니다.

CI/CD 통합, 배치 처리, 실시간 대시보드, 플러그인 확장 기능을 통해 last30days-skill은 개인 연구자를 넘어 조직 전체의 트렌드 인텔리전스 엔진으로 발전할 수 있습니다.

텔레그램 참여하기

데이터 과학 자동화 | AI 개발 도구 비교


Sources & Further Reading:

면책(Disclosure): 본 문서에는 아마리트이션 관계가 있을 수 있는 도구가 언급되어 있습니다. 긍정적인 리뷰를 위해 대가를 받지 않습니다. 모든 벤치마크는 자체 수행하거나 공식 문서에서 sourced되었습니다.

📦 Featured in collections

💬 Discussion