last30days-skill: 크로스 플랫폼 트렌드 연구를 자동화하는 41K 스타 AI 에이전트 스킬 (41K Stars)
last30days-skill은 Reddit, X(Twitter), YouTube, Hacker News, Polymarket 등 5개 이상 플랫폼에서 최근 30일간의 트렌드를 자동으로 수집·분석하는 AI 에이전트 스킬입니다. 41K stars.
- ⭐ 41191
- 업데이트 2026-06-16
주제에 대한 최신 동향을 빠르게 파악해야 할 때, 당신은 무엇을 하나요? Reddit을 뒤지고, X를 스크롤하고, YouTube 동영상을 검색하고, Hacker News를 확인하고… 시간과 노력이 많이 듭니다.
last30days-skill은 이 모든 연구를 자동화합니다. 주제만 입력하면, Reddit, X(Twitter), YouTube, Hacker News, Polymarket 등 여러 플랫폼에서 최근 30일간의 데이터를 수집·분석해 줍니다.
요약 #
last30days-skill은 크로스 플랫폼 트렌드 연구 에이전트입니다. 단일 주제에 대해 Reddit, X, YouTube, Hacker News, Polymarket, 웹 검색 등 여러 정보원에서 데이터를 수집하고, AI가 이를 분석·요약합니다. HTML 브리프를 생성하여 시각적으로 매력적인 리포트를 제공합니다. 41,000개 이상의 별을 받으며 AI 에이전트 스킬 중 가장 인기 있는 프로젝트 중 하나가 되었습니다.
핵심 기능::
5 개 이상 플랫폼 동시 수집(레딧, X, 유튜브, HN, 폴리마켓)
최신 30일 데이터 필터링
AI 기반 분석 및 요약
공유 가능한 HTML 브리프 생성
인텔리전트 검색 기능 (v3 핵심 기능)
Best Takes: 최적의 콘텐츠만 선별
지난 30일 - 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 리포트 |
설치 및 설정 #
클로드 코드 (권장) #
# 클로드 코드 에서 스킬 설치
git 클론 https://github.com/mvanhorn/last30days-skill.git
Claude Code에서 직접 사용할 수 있습니다.
코덱, 커서, 코파일럿, 제미니 CLI #
# 각 도구의 스킬 디렉토리에 클론
git 클론 https://github.com/mvanhorn/last30days-skill.git ~/.cursor/skills/지난 30일
git 클론 https://github.com/mvanhorn/last30days-skill.git ~/.gemini/skills/지난 30일
claude.ai (웹) #
웹 버전의 Claude에서도 스킬을 사용할 수 있습니다.
매뉴얼(개발자) #
git 클론 https://github.com/mvanhorn/last30days-skill.git
CD 지난 30일 - skill
pip 설치 -r 요구 사항.txt
나만의 열쇠 가져오기 #
일부 소스 (YouTube, X) 에는 API 키가 필요합니다:
# YouTube: YT-DLP 필요 (브루 설치 YT-DLP)
양조 설치 yt-dlp
# Reddit API 키(선택사항)
Reddit_CLIENT_ID="당신의 클라이언트 ID" 내보내기
Reddit_CENTER_SECRET="당신의 클라이언트-비밀" 내보내기
핵심 기능: 인텔리전트 검색 #
last30days-skill v3의 가장 강력한 기능은 인텔리전트 검색입니다.
작동 방식 #
Source Discovery: 사용 가능한 정보원을 자동으로 탐지
Scored Ranking: 각 소스의 신뢰도와 관련성에 따라 점수화
Clustering: 동일 주제의 여러 소스를 하나로 묶음
단일 통과 비교: 군집화된 결과를 한 번에 비교
예시: “AI 에이전트 프레임워크” 연구 #
# 주제 입력
주제: "AI 에이전트 프레임워크 2026"
last30days-skill은 다음과 같은 출력을 생성합니다:
레딧: r/LocalLLaMA, r/MachineLearning 의 최신 토론
X: AI 에이전트 관련 트렌드 해시태그
YouTube: 최신 AI 에이전트 튜토리얼
Hacker News: AI 에이전트 관련 뉴스 아티클
Polymarket: AI 에이전트 관련 베팅 시장 (미래 전망)
데이터 소스: 사람들이 득점했습니다 #
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>
<머리>
<제목>30일 연구 요약: [주제]/<제목>
</머리>
<바디>
<섹션 ID="summary">......//섹션>
<섹션 ID="reddit">......//섹션>
<섹션 ID="twitter">......//섹션>
<섹션 ID="youtube">......//섹션>
<섹션 ID="hack 뉴스">...//섹션>
<섹션 id="polymarket">......//섹션>
<섹션 id="comparison">......//섹션>
</body>
</html>
HTML 브리프는 브라우저에서 바로 열 수 있으며, 인쇄하기도 좋습니다.
베스트 테이크 #
모든 정보를 나열하는 것이 아니라, 가장 가치 있는 콘텐츠만 선별합니다:
최고 참여 게시물
가장 통찰력 있는 댓글
가장 정확한 예측
가장 실행 가능한 시사점
크로스 소스 클러스터 병합 #
동일한 주제를 다루는 여러 소스를 자동으로 찾아 하나로 묶습니다:
[클러스터: "GPT-5 릴리스"]
├-- Reddit: r/LocalLLaMA (2.3만 개의 업보트)
├-- X: @OpenAI 공식 트윗 (리트윗 5만 건)
├-- HN: 뉴스 기사 (150개의 댓글)
└-- YouTube: 동영상 분석 (10만 조회수)
단일 패스 비교 #
여러 옵션을 한 번에 비교합니다:
AI 프레임워크 비교:
┌──────────────┬────────┬────────┬─────────┐
│ 프레임워크 │ 스타즈 │ 스피드 │ 퀄리티 │
├──────────────┼────────┼────────┼─────────┤
│ 랭체인 │ 90K │ 미디엄 │ 굿 │
│ 라마인덱스 │ 40K │ 패스트 │ 베터 │
│ 오토젠 │ 42K │ 슬로우 │ 베스트 │
└──────────────┴────────┴────────┴─────────┘
자동 발견된 경쟁사 비교 #
주제와 관련된 경쟁사나 대체안을 자동으로 발견하여 비교합니다:
주제: "코딩에 가장 적합한 LLM"
발견된 경쟁자:
1. 클로드 3.5 소네트
2. GPT-4o
3. 쌍둥이자리 2.0
4. 코드스트랄
5. 딥시크-코더
GitHub 개인 모드 #
GitHub에서 특정 개발자의 30일간 활동을 추적합니다:
주제: "GitHub @username 활동 30일 지속"
이 개발자가 어떤 레포지토리를 기여했는지, 어떤 이슈를 닫았는지, 어떤 새로운 프로젝트를 만들었는지 분석합니다.
ELI5 모드(내가 5살인 것처럼 설명해줘) #
복잡한 개념을 5세 아이도 이해할 수 있게 설명합니다:
주제: "양자 컴퓨팅"
모드: "eli5"
ELI5 모드는 복잡한 기술을 간단명료하게 설명하여, 비기술자도 이해할 수 있게 해줍니다. 양자 컴퓨팅을 설명할 때 “전자의 상태를 이용해 계산하는 컴퓨터"라고 단순히 말하는 대신, “전자를 동시에 여러 상태로 놓을 수 있는 컴퓨터로, 전통적인 컴퓨터보다 훨씬 빠르게 복잡한 문제를 해결할 수 있다"라고 설명합니다. 이러한 접근 방식으로, 기술에 익숙하지 않은 사람도 최신 트렌드를 이해할 수 있습니다.
아키텍처: 어떻게 작동하는가? #
┌───────────────────────────────────────────────┐
│ 지난30일-기술 작업흐름 │
├───────────────────────────────────────────────┤
│ 1. 주제 입력 │
│ ↓ │
│ 2. 소스 검색(자동 감지 가능) │
│ ↓ │
│ 3. 다중 플랫폼 가져오기 │
│ ├── Reddit │ X │ 유튜브 │ HN │
│ └── 폴리마켓│ 웹 │ yt-dlp │ API │
│ ↓ │
│ 4. 데이터 점수 및 순위 │
│ ↓ │
│ 5. 소스 클러스터링(중복 제거) │
│ ↓ │
│ 6. AI 분석 및 요약 │
│ ↓ │
│ 7. HTML 간략한 생성 │
│ ↓ │
│ 8. 배송(브라우저에서 열기/저장) │
└───────────────────────────────────────────────┘
벤치마크: 연구 시간 비교 #
주제당 연구 시간 비교:
| 항목 | 수동 연구 | 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은 확장 가능합니다. 자신만의 소스를 추가할 수 있습니다:
커스텀 소스:
- 이름: "제품 찾기"
URL: "https://www.producthunt.com "
fetch_method: "web_scraper"
점수_weights:
업보트: 0.4
댓글: 0.3
최근: 0.3
커스텀 소스를 추가하면, 특정 도메인의 데이터도 수집할 수 있습니다. 예를 들어 Product Hunt의 새로운 앱을 추적하거나, Medium의 인기 기사를 분석할 수 있습니다.
커스텀 소스 작성 가이드 #
커스텀 소스를 만들 때 다음 정보를 제공해야 합니다:
- 소스 URL: 데이터를 가져올 웹 주소
- 추적 방법: API 호출, 웹 스크랩, RSS 피드 등
- 점수 가중치: 각 지표의 중요도 (합계 1.0)
- 필터 조건: 수집할 데이터의 범위 (날짜, 언어 등)
예시 — Medium 인기 기사 추적:
커스텀 소스:
- 이름: "중급 인기"
URL: "https://medium.com/trending "
fetch_method: "web_scraper"
점수_weights:
박수: 0.3
응답: 0.3
최근: 0.4
필터:
date_range: "30d"
언어: ["en", "ko"]
이렇게 하면 Medium의 인기 기사를 last30days-skill의 연구에 포함할 수 있습니다.
사용 사례: last30days-skill으로 무엇을 만들 수 있을까? #
사례 1: 투자 조사 #
주제: "AI 스타트업 펀딩 30일 지속"
최근 30일간의 AI 투자 동향을 자동으로 조사합니다. 어떤 스타트업이 자금을 받았는지, 어떤 분야에서 투자 집중이 일어나는지 분석합니다.
사례 2: 기술 트렌드 #
주제: "러스트 대 바둑 퍼포먼스"
두 언어의 성능 비교에 대한 최신 정보를 수집합니다. Benchmark 결과, 커뮤니티 의견, 실제 사용 사례를 종합합니다.
사례 3: 시장 분석 #
주제: "암호화폐 규제 2026"
모드: "eli5"
복잡한 규제 이슈를 쉽게 이해할 수 있는 리포트를 생성합니다. Polymarket 데이터를 통해 시장의 예상도 함께 분석합니다.
사례 4: 경쟁사 분석 #
주제: "새로운 LLM, 2026년 2분기 출시"
분기별 LLM 출시 동향을 분석합니다. 각 모델의 주요 개선점, 가격, 성능을 비교합니다.
사례 5: 개발자 활동 추적 #
주제: "GitHub @google 활동 30일 지속"
Google의 GitHub 활동 추적을 통해 어떤 OSS 프로젝트를 시작했는지, 어떤 기술에 투자하고 있는지 파악합니다.
CI/CD 통합: 연구 파이프라인 자동화 #
last30days-skill은 CI/CD 파이프라인과 통합하여 정기적인 트렌드 연구를 자동화할 수 있습니다. 이를 통해 조직은 실시간으로 시장 동향을 파악할 수 있습니다.
GitHub 액션 워크플로우 #
이름: 일일 트렌드 리서치
온:
일정:
- cron: '0 9 * * *' # 매일 오전 9시 (UTC)
워크플로우_dispatch: # 수동 실행도 가능
직업:
연구:
실행 중: 우분투-latest
단계:
- 용도: actions/checkout@v4
- 이름: 파이썬 설정
용도: actions/setup-python@v5
함께:
파이썬 버전: '3.12'
- 이름: 종속성 설치
실행: |
pip 설치 -r 요구 사항.txt
양조 설치 yt-dlp
- 이름: AI 에이전트에 대한 연구 실행
실행: |
Reddit_CLIENT_ID = ${{비밀}.REDDIT_CLIENT_ID 내보내기}
Reddit_CENTER_SECRET=${{비밀}.REDDIT_CENTER_SECRET} 내보내기
파이썬 - 지난 30일간의 "AI 에이전트 프레임워크 2026"
파이썬 - 지난 30일간의 "LLM 미세 조정 기술"
파이썬 - 지난 30일간의 "엣지 AI 배포"
- 이름: 연구 보고서 업로드
용도: actions/upload-artifact@v4
함께:
이름: 연구-brief
경로: ./출력/*.html
이 워크플로우는 매일 아침 9시에 세 가지 주요 AI 주제에 대해 연구를 실행하고, 생성된 HTML 리포트를 GitHub Actions 아티팩트로 업로드합니다.
Slack 알림 통합 #
연구가 완료되면 Slack으로 결과를 알림받을 수 있습니다:
가져오기 요청
json 가져오기
def send_slack_notification(topic, report_url):
"""연구 결과를 Slack으로 알림"""
페이로드 = {
"text": f"📊 트렌드 연구 완료: {topic}",
"attach": [{
"색상": "좋다",
"title": f"{topic} 분석 리포트",
"필드": [
{"제목": "플랫폼", "가치": "레딧, X, 유튜브, HN, 폴리마켓", "짧은": 사실},
{"제목": "리포트", "값": f"[열기]({report_url})", "짧은": 사실
],
"footer": "지난 30일 - @mvanhorn의 skill"
}]
}
응답 = requests.post (
os.environ ["SLACK_WEBHOOK_URL"],
data=json.dumps(payload),
헤더={"콘텐츠 유형": "애플리케이션/json"}
)
return response.status_code
Slack webhook URL을 환경 변수로 설정하면, 연구 결과가 자동으로 팀 채널에 공유됩니다.
성능 최적화: 대규모 연구 수행하기 #
여러 주제를 동시에 연구할 때 성능을 최적화하는 방법을 다룹니다.
병렬 처리 구현 #
비동기 가져오기
concurrent.futures에서 ThreadPoolExecutor를 가져옵니다
비동기 def research_topic(topic, 출처=none):
"""단일 주제에 대해 비동기적으로 연구 수행"""
실행자 = ThreadPoolExecutor(max_works=4)
루프 = asyncio.get_event_loop ()
# 여러 소스에서 병렬로 데이터 수집
작업 = []
출처가 없는 경우:
출처 = ["reddit", "x", "youtube", "hack 뉴스", "폴리마켓"]
출처:
작업.append(
loop.run_in_executor(
실행자,
fetch_from_source,
주제,
원천,
window_days=30
)
)
# 모든 소스에서 데이터 수집 완료 대기
결과 = 대기 비동기.gather(*tasks, return_exceptions=True)
# 데이터 정제 및 군집화
cleaned_results = [r의 결과는 인스턴스(r, 예외)]
클러스터 = 클러스터_유사_items(cleaned_results)
# AI 분석 및 요약
분석 = 대기 ai_analyze(clustered, 주제)
반품 분석
캐싱 전략 #
반복적인 연구 요청 시 캐싱을 통해 API 호출 비용을 절감할 수 있습니다:
hashlib 가져오기
JSON 가져오기
pathlib import 경로에서
datetime import datetime, timedelta에서
클래스 ResearchCache:
"""연구 결과 캐싱 시스템"""
def __init__(self,cache_dir="~/.last30days_cache"):
self.cache_dir = 경로(cache_dir)
self.cache_dir.mkdir(부모=True,exist_ok=True)
def _cache_key(self, 주제, 소스, 일=30):
"""주제와 레시피로 쿠키 생성"""
raw = f"{주제}:{','.join(sorted(sources))}:{일}"
return hashlib.sha256(raw.encode()).hexdigest()[:16]
def get(자체, 주제, 소스, 일=30):
"""캐시에서 결과 조회(24시간 이내만 유효)"""
키 = self._cache_key(주제, 소스, 날짜)
캐시_파일 = self.cache_dir / f"{key}.json"
캐시_파일.존재()인 경우:
캐시됨 = json.loads(cache_file.read_text())
캐시_시간 = datetime.fromisoformat(캐시["타임스탬프"])
# 24시간 그냥 놔둬요
datetime.now() - 캐시된_시간 < timedelta(시간=24)인 경우:
캐시된["결과"] 반환
반환 없음
def set(자체, 주제, 소스, 요일, 결과):
"""결과를 쿠키에 저장"""
키 = self._cache_key(주제, 소스, 날짜)
캐시_파일 = self.cache_dir / f"{key}.json"
캐시_파일.write_text(json.dumps({
"타임스탬프": datetime.now().isoformat(),
"주제": 주제,
"소스": 소스,
"일": 일,
"결과": 결과
}))
배치 처리: 여러 주제 동시 연구 #
json 가져오기
pathlib 가져오기 경로에서
datetime에서 가져오기 datetime
def batch_research(topics, output_dir="./research_output"):
"""여러 주제에 대한 연구를 배치로 실행"""
Path(output_dir).mkdir(exist_ok=True)
주제별 주제:
인쇄(f"🔍 연구 중: {topic}")
분석 = asyncio.run(연구_topic(topic))
# 개별 HTML 파일로 저장
타임스탬프 = datetime.now(.strftime) ("%Y%m%d_%H%M%S")
파일 이름 = f"{output_dir}/{topic.replace ('', '_'}_{timestamp}.html"
f로 open(filename, 'w')을 사용합니다:
f.write(generate_html_brief(분석, 주제))
인쇄(f"✅ 완료: {filename}")
# 인덱스 파일 생성
인덱스 = {
"generated_at": datetime.now (). isoformat (),
"total_topics": 렌(topics),
"reports": [
주제에서 t에 대한 f"{t.replace ('', '_'}.html"
]
}
open(f"{output_dir}/index.json", 'w')을 f로 사용합니다:
json.dump(인덱스, f, 들여쓰기=2)
데이터 분석 파이프라인: 연구 결과를 구조화하다 #
last30days-skill이 생성한 데이터를 구조적으로 분석하여 더 깊은 인사이트를 도출하는 방법을 설명합니다.
감정 분석 파이프라인 #
Transformers 가져오기 파이프라인에서
numpy를 np로 가져오기
클래스 TrendSentimentAnalyzer:
"""추세데이터의 감정분석"""
def __init__(self):
self.sentiment_pipeline = 파이프라인(
"감정 분석",
모델="nlptowney/bert-base-multilingual-uncased-sentiment"
)
def analyze_trends(self, trend_data):
"""트렌드 데이터의 감정을 분석하고 분석할 수 있는 데이터 생성"""
결과 = []
trend_data의 항목:
감정 = self.sentiment_pipeline(item["text"][:512])[0]
결과.추가({
"제목": 항목["제목"],
"출처": 항목["출처"],
"감정": 감정["라벨"],
"자신감": 감정["점수"],
"참여": item.get("참여", 0)
})
# 감정도汇总
감정_수 = {}
결과의 r에 대해:
s = r["감정"]
감정_카운트[s] = 감정_카운트.get(s, 0) + 1
#긍정/부정적 포장
긍정적 = emotion_counts.get("긍정적", 0)
부정 = emotion_counts.get("부정", 0)
중립 = emotion_counts.get("중립", 0)
총계 = 양수 + 음수 + 중립
반환 {
"항목": 결과,
"요약": {
"total_items": 총계,
"Positive_ratio": 양수/전체인 경우 전체 > 0, 그렇지 않은 경우 0,
"negative_ratio": 음수 / 총계가 0보다 크면 총계, 그렇지 않으면 0,
"neutral_ratio": 중립 / 총계 > 0이면 총계, 그렇지 않으면 0,
"dominant_sentiment": 최대(sentiment_counts, key=sentiment_counts.get)
}
}
트렌드 추이 시각화 #
판다를 PD로 가져오기
matplotlib.pyplot을 plt로 가져오기
def plot_trend_timeline(연구_results):
"""연구 결과를 시간별 트렌드로 시각화"""
df = pd.DataFrame(연구 결과)
df['데이트'] = pd.to _datetime(df['데이트'])
df['점수'] = df['engage먼트_점수']
# 날짜별 집계
daily = df.groupby('df['date').dt.dt.date.agg ({
'점수': '합',
'title': '카운트'
}).rename(columns={'title': 'article_count'})
그림, ax = plt.subplots (그림 크기=(12, 6))
ax.plot(daily.index, daily['점수'], 마커='o', 선폭=2, 레이블='참여 점수')
ax.axhline(y=daily['점수'.mean(), 색상='r', 라인스타일='--', 라벨='평균')
ax.set_title('30일 추세 타임라인', 폰트사이즈=16)
ax.set_xlabel('날짜', 폰트사이즈=12)
ax.set_ylabel('참여 점수', 폰트사이즈=12)
ax. legend()
ax.grid(참, alpha=0.3)
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig ('trend_timeline.png', dpi=150)
plt.show ()
고급 사용: 실시간 모니터링 대시보드 #
last30days-skill의 연구 결과를 실시간으로 모니터링할 수 있는 Flask 기반 대시보드를 구현합니다.
플라스크 가져오기 Flask, render_template, jsonify에서
datetime import datetime, timedelta에서
JSON 가져오기
수입 OS
앱 = 플라스크(__name__)
def load_latest_research():
"""최신 연구 결과 로드"""
출력_디렉터리 = "./research_output"
index_path = os.path.join(output_dir, "index.json")
그렇지 않은 경우 os.path.exists(index_path):
반환 없음
open(index_path)를 f로 사용:
인덱스 = json.load(f)
보고서 = []
index.get("reports", [])의 report_name에 대해:
report_path = os.path.join(output_dir, report_name.replace('.html', '_data.json'))
os.path.exists(report_path)인 경우:
open(report_path)을 f로 사용:
보고서.추가(json.load(f))
반환 {
"generated_at": index.get("generated_at"),
"보고서": 보고서
}
@app.route('/')
데프 대시보드():
"""대시보드 메인 페이지"""
데이터 = load_latest_research()
return render_template('dashboard.html', 데이터=데이터)
@app.route('/api/reports')
def api_reports():
"""연구결과 API 엔드포인트"""
데이터 = load_latest_research()
jsonify(데이터) 반환
@app.route('/api/trends/<주제>')
def api_trends(주제):
"""특정 주제의 동향 데이터 API"""
#쿠시에서 로드하거나 새로고
데이터 = load_latest_research()
data.get("reports", []) 보고서의 경우:
report.get("topic", "").lower()의 topic.lower()인 경우:
jsonify(보고) 반환
return jsonify({"error": "Not Found"}), 404
__name__ == '__main__'인 경우:
app.run(디버그=True, 포트=5000)
확장 기능: 커스텀 분석기 플러그인 #
last30days-skill은 플러그인 아키텍처를 통해 분석 기능을 확장할 수 있습니다.
# 플러그인/custom_analyzer.py
last30days.skills.analyzer에서 BaseAnalyzer 가져오기
클래스 키워드TrendAnalyzer(BaseAnalyzer):
"""키워드 분석기 단어"""
def 분석(자체, 데이터, 주제):
"""특정 캠프의 구성원들의 입장을 분석하다"""
컬렉션 수입 카운터에서
키워드 = ["변압기", "미세 조정", "RAG", "다중 모드", "에이전트"]
키워드_카운트 = {}
데이터 항목의 경우:
텍스트 = item.get("텍스트", "").lower()
키워드의 kw에 대해:
텍스트에 kw가 있는 경우:
키워드_카운트[kw] = 키워드_카운트.get(kw, 0) + 1
반환 {
"주제": 주제,
"키워드_빈도": 키워드_수,
"top_keywords": sorted(keyword_counts.items(), key=lambda x: x[1], reverse=True)[:3],
"분석": self.generate_insights(keyword_counts)
}
def generate_insights(self, 키워드_카운트):
"""키워드에서 인사이트 생성"""
통찰력 = []
총계 = 합계(keyword_counts.values())
kw의 경우 sorted(keyword_counts.items(), key=lambda x: x[1], reverse=True)로 계산됩니다.
비율 = 개수 / 합계인 경우 합계 > 0, 그렇지 않은 경우 0
비율 > 0.2인 경우:
Insights.append(f"🔥 '{kw}'가 전체 콘텐츠의 {ratio:.1%}를 사라져서 가장 주목받는 키워드입니다.")
엘리프 비율 > 0.1:
Insights.append(f"📈 '{kw}'가 {ratio:.1%}로세 광고 캠페인입니다.")
그 외:
Insights.append(f"➖ '{kw}'는 {ratio:.1%} 조용한로 인해 존재합니다.")
인사이트 반환
# 플러그인 등록
last30days.plugins에서 레지스터_분석기 가져오기
Register_analyzer("keyword_trend", 키워드TrendAnalyzer)
보안 및 프라이버시 고려사항 #
last30days-skill을 기업 환경에서 사용할 때 고려해야 할 보안 측면:
# API 키 보안: 환경 변수 사용
에코 '라스트30DAYS_API_KEY="sk-xxxxxx">> ~/.bashrc 내보내기
출처 ~/.bashrc
# .gitignore로 민감 파일 제외
에코 "config.yaml" >> .gitignore
에코 "*.env" >> .gitignore
에코 "연구_출력/" >> .gitignore
# 비밀키 순환 (로테이션)
# 90일마다 API 키를 변경하는 cron 작업
0 0 0 1 */3 * 파이썬 /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 | 검색사별 상이 |
사용 사례 심화: 팀 협업 패턴 #
연구 템플릿 공유 #
# 연구_templates/AI_에이전트.yaml
이름: "AI 에이전트 프레임워크 분석"
description: "AI 에이전트 프레임워크 동향 분석 템플릿"
주제:
- "autonom 요원"
- "멀티 에이전트 시스템"
- "에이전트 메모리 아키텍처"
- "도구 사용 프레임워크"
출처:
- 레딧: [r/MachineLearning, r/LocalLLaMA, r/Artificial Intelligence]
- x_키워드: ["AI 에이전트", "MultiAgent", "AgenticAI"]
- youtube_channel_ids: [UC8butISFwT-WL7ENZqkkkYw]
- hn_days: 30일
출력:
형식: HTML
감정 분석: 참
트렌드 시각화: true
슬랙_알림: true
슬랙_채널: "#ai-research"
이 템플릿을 로드하여 일괄 연구가 가능합니다:
지난 30일 --template 리서치_templates/AI_에이전트.yaml
제한사항 #
last30days-skill도 완벽하지 않습니다:
API 제한: Reddit, X의 API는 무료 tier가 제한적입니다. API 키를 발급받으면 더 많은 데이터를 수집할 수 있습니다.
YouTube 검색: yt-dlp가 필요하고, 일부 비디오는 접근 불가합니다.
Polymarket 데이터: 베팅 시장이 실제 여론과 다를 수 있습니다.
언어 지원: 주로 영어 콘텐츠에 최적화되어 있습니다. 한국어 주제 검색 시 결과가 제한적일 수 있습니다.
컨텍스트 소모: 긴 연구는 AI 컨텍스트를 많이 소모합니다. 연구 결과가 길어지면 요약본을 생성하여 컨텍스트를 절약하세요.
데이터 freshness: 스크랩 시점의 스냅샷일 뿐, 실시간 데이터가 아닙니다. 최신 트렌드를 확인하려면 정기적으로 연구를 실행하세요. 하루에 한 번씩 실행하는 것이 이상적입니다.
캐시 만료: 캐싱된 데이터는 24시간 이후 무효화됩니다. 최신 정보를 원할 때는 수동으로 재실행하세요.
플러그인 호환성: 커스텀 플러그인은 버전 업그레이드 시 테스트가 필요합니다.
자주 묻는 질문 #
Q: 지난 30일간의 숙련된 은 정말 무료인가요?? A: 네, MIT 라이선스로 오픈소스이며 무료입니다. 일부 소스 (YouTube) 는 yt-dlp 설치가 필요하지만 이것도 무료입니다.
Q: 어떤 정보원을 지원하나요??
A: 레딧, X(트위터), 유튜브, 해커 뉴스, 폴리마켓, 웹 검색을 지원합니다. 커스텀 소스도 추가 가능합니다.
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은 개인 연구자를 넘어 조직 전체의 트렌드 인텔리전스 엔진으로 발전할 수 있습니다.
Sources & Further Reading:
GitHub 저장소: https://github.com/mvanhorn/last30days-skill
yt-dlp: https://github.com/yt-dlp/yt-dlp
Reddit API: https://www.reddit.com/dev/api
면책(Disclosure): 본 문서에는 아마리트이션 관계가 있을 수 있는 도구가 언급되어 있습니다. 긍정적인 리뷰를 위해 대가를 받지 않습니다. 모든 벤치마크는 자체 수행하거나 공식 문서에서 sourced되었습니다.
💬 댓글 토론