TRENDSHIFT #5 딥다이브 · 2026-03-25 분석

last30days-skill 딥다이브
— 10개 플랫폼을 2~8분 만에 훑어 리서치 보고서를 뽑아내는 AI 에이전트 스킬

Reddit, X, YouTube, TikTok, Bluesky, Hacker News, Polymarket … 10개 이상 플랫폼의 최근 30일 대화를 병렬로 수집·합성해 인용 기반 리서치 보고서를 자동 생성하는 Claude Code 스킬. /plugin marketplace add 한 줄로 설치하면 바로 쓸 수 있다. (저장소: mvanhorn/last30days-skill · ⭐5.8k · MIT)
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

last30days-skill이 정확히 무엇을 하는 도구인가

last30days는 Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, Bluesky 등 10개 이상의 플랫폼에서 최근 30일간의 논의를 병렬 수집·합성하여, 인용 기반의 리서치 보고서를 자동 생성하는 AI 에이전트 스킬이다. Claude Code 플러그인 마켓플레이스를 통해 한 줄로 설치하고 /last30days [주제] 명령 한 번으로 수동으로 수 시간이 걸릴 리서치 작업을 2~8분에 완료한다.

한 컷 비유

"10개 신문사 기자를 동시에 파견해 30분 만에 종합 브리핑을 받는 편집장"

보통 리서치는 플랫폼마다 직접 검색창을 두드려야 합니다. last30days는 10명의 전담 기자(플랫폼 모듈)를 동시에 현장에 보내고, 각자가 가져온 원문을 교차 검증·점수화해 "관련성 45% + 최신성 25% + 참여도 30%" 공식으로 최종 브리핑을 만들어 줍니다.

핵심은 포어그라운드 실행입니다. 기자를 보내놓고 다른 일을 하면(백그라운드) 브리핑을 못 받을 수 있거든요 — 실제로 v2.9.3 이전 버전에서 백그라운드 실행 시 모델이 결과를 기다리지 않고 환각을 생성하는 버그가 있었으며, v2.9.3에서 포어그라운드 실행으로 전환하여 수정됐습니다.

2왜 주목받는가

트렌딩 이유와 경쟁 도구 대비 강점
기존 방식의 불편함
플랫폼별 수동 검색 — 시간 소모와 편향

Reddit만 보면 기술 커뮤니티 편향, X만 보면 단편적 의견, YouTube만 보면 길고 찾기 힘든 정보. 10개 플랫폼을 손으로 돌아다니려면 최소 2~3시간 + 중복·저품질 콘텐츠 정제까지 해야 한다.

last30days의 해법
병렬 수집 + 관련성 점수 기반 자동 필터링

10개+ 플랫폼을 2~8분 내 동시 스캔하고, 양방향 텍스트 유사도·참여 속도·교차 플랫폼 수렴 세 가지 신호를 조합해 최고 품질 콘텐츠만 추린다. API 키가 없어도 HN + Polymarket 무료 소스로 즉시 동작한다.

경쟁 제품 비교

비교 대상last30days 차별점
Perplexity웹 검색 기반 vs 소셜 플랫폼 커뮤니티 의견 직접 수집
Tavily / Exa검색 API 단일 소스 vs 10개+ 플랫폼 교차 검증
수동 리서치시간 투자 vs 병렬 자동화 + 관련성 점수 기반 필터링
ChatGPT Browse범용 웹 탐색 vs 소셜·예측시장 특화 깊은 수집

트렌딩의 배경에는 Claude Code / Gemini CLI의 스킬 생태계 활성화가 있다. "설치만 하면 쓸 수 있는 리서치 에이전트" 수요가 폭발하면서, SKILL.md + CLAUDE.md + 테스트 455개의 체계적 구조가 "스킬을 어떻게 만들어야 하는가"의 참고 모델로 주목받고 있다.

3기술 스택 전체 지도

핵심 엔진 · 소셜 플랫폼 통합 · 인프라

핵심 엔진 (Python)

기술용도상세
Python 3메인 리서치 엔진skills/last30days/scripts/last30days.py — 진입점
asyncio / 병렬처리10개+ 소스 동시 검색소스별 독립 모듈로 병렬 실행
SQLite워치리스트 + 풀텍스트 검색오픈 변형(Watchlist)에서 사용
dataclasses표준화된 데이터 모델소스 간 통일된 결과 스키마

소셜 플랫폼 통합 (59개 모듈)

플랫폼모듈API / 방식
Redditreddit.py, reddit_enrich.pyScrapeCreators API / OpenAI 폴백
X (Twitter)bird_x.py, xai_x.py벤더링된 GraphQL / xAI API
YouTubeyoutube_yt.py트랜스크립트 추출 + 분석
TikToktiktok.pyScrapeCreators API
Instagraminstagram.pyScrapeCreators API (Reels 포함)
Blueskybluesky.pyAT Protocol 네이티브
Hacker Newshackernews.py공개 API (무료)
Polymarketpolymarket.py공개 API (무료)
샤오홍슈xiaohongshu_api.pyAPI 통합

웹 검색 백엔드

서비스모듈특징
Perplexity Sonar Properplexity.pyOpenRouter 경유 Perplexity Sonar Pro / Deep Research
OpenRouter 클라이언트providers.pyOpenRouter 통합 클라이언트 (다중 모델 지원)

인프라 / 배포

요소설명
Claude Code Plugin.claude-plugin/ 디렉토리 — 마켓플레이스 배포
Gemini CLI Extensiongemini-extension.json — Gemini CLI 통합
환경변수 관리~/.config/last30days/.env (글로벌)
캐시24시간 TTL 캐시 (env.py 내 통합)

4아키텍처 심화 분석

5단계 파이프라인과 핵심 설계 패턴

시스템 구조도

┌─────────────────────────────────────────────────────────────┐ │ 사용자 입력 │ │ /last30days [topic] for [tool] │ └─────────────────────┬───────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Phase 1: Intent Parsing │ │ query_type.py: RECOMMENDATIONS | NEWS | PROMPTING | │ │ COMPARISON | GENERAL │ └─────────────────────┬───────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Phase 2: X Handle Resolution │ │ WebSearch로 @handle 탐색 → --x-handle 플래그 전달 │ └─────────────────────┬───────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Phase 3: 병렬 리서치 실행 │ │ │ │ Reddit X YouTube TikTok Instagram │ │ Bluesky HN Polymarket Truth Social WebSearch │ │ │ │ scripts/last30days.py (5분 타임아웃, foreground 실행) │ └─────────────────────┬───────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Phase 3.5: 데이터 파이프라인 │ │ normalize.py → dedupe.py → score.py → relevance.py │ │ 점수 가중치: 관련성 45% / 최신성 25% / 참여도 30% │ └─────────────────────┬───────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Phase 4: 보충 웹 검색 │ │ WebSearch로 블로그, 튜토리얼, 뉴스 추가 수집 │ └─────────────────────┬───────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Phase 5: 합성 & 출력 │ │ render.py → 쿼리 유형별 포맷팅 │ │ 리서치 보고서 | 프롬프트 팩 | 비교 분석 │ │ 자동 저장: ~/Documents/Last30Days/{topic}.md │ └─────────────────────────────────────────────────────────────┘

핵심 설계 패턴

설계 패턴 ①
어댑터 패턴 (Platform Adapters)
각 소셜 플랫폼 모듈이 동일한 SearchResult 인터페이스를 구현. 새 플랫폼 추가 시 파일 하나만 추가하면 된다.
# 각 플랫폼 모듈의 공통 패턴
@dataclass
class SearchResult:
    text: str
    author: str
    platform: str
    engagement: int
    timestamp: datetime
    url: str

# reddit.py, bird_x.py, youtube_yt.py 등이 모두 SearchResult 반환
async def search(query: str, days: int = 30) -> list[SearchResult]:
    ...
설계 패턴 ②
그레이스풀 디그레이드 (Graceful Degradation)
API 키가 없어도 가용한 소스로 단계적 기능 축소 — 전체 실패 대신 부분 동작을 보장.
모든 API 키 → 10개+ 플랫폼 전체 검색 ScrapeCreators만 → Reddit + TikTok + Instagram OpenAI만 → Reddit 전용 모드 API 키 없음 → HN + Polymarket (공개 API)
설계 패턴 ③ — v2.9.3/v2.9.4 교훈
포어그라운드 실행 패턴
백그라운드 프로세스에서 모델이 출력을 기다리지 않아 환각이 발생했다. v2.9.3에서 포어그라운드 실행으로 전환하여 환각 버그 수정, v2.9.4에서 --save-dir 플래그를 추가해 저장 로직을 Python 내부로 내재화.

양방향 텍스트 유사도 기반 관련성 점수

최종 점수 = 관련성(45%) + 최신성(25%) + 참여도(30%) 관련성 → 양방향 텍스트 유사도(쿼리↔문서 교차 측정) 최신성 → 30일 윈도우 내 시간 감쇠 함수 참여도 → 플랫폼별 정규화된 좋아요/댓글/공유 수 (참여 속도 기준 — 1시간에 100좋아요 > 1주일에 100좋아요)

5디렉토리 구조 해부

skills/last30days/scripts/lib/ 59개 모듈의 역할
last30days-skill/ ├── .claude-plugin/ # Claude Code 플러그인 메타데이터 ├── agents/ # Codex, Gemini 등 멀티 에이전트 지원 ├── fixtures/ # 테스트 목 데이터 ├── hooks/ # SessionStart 등 통합 훅 ├── skills/last30days/ # SKILL.md 정의 + 핵심 Python 엔진 │ └── scripts/ │ ├── last30days.py # ⭐ 메인 진입점 │ └── lib/ # 59개 모듈 라이브러리 │ ├── env.py # 환경변수 관리 (TTL 캐시 포함) │ ├── query.py # 쿼리 유형 분류 │ ├── pipeline.py # 수집 파이프라인 │ ├── signals.py # 신호 추출 (구 score.py) │ ├── rerank.py # 결과 재순위 (구 score.py) │ ├── reddit.py # Reddit 수집 │ ├── bird_x.py # X GraphQL 클라이언트 │ ├── youtube_yt.py# YouTube 트랜스크립트 │ ├── bluesky.py # Bluesky AT Protocol │ ├── hackernews.py# HN (무료) │ ├── polymarket.py# 예측시장 (무료) │ ├── normalize.py # 데이터 정규화 │ ├── dedupe.py # 중복 제거 │ ├── relevance.py # 관련성 필터링 │ ├── render.py # 출력 렌더링 │ └── vendor/ │ └── bird-search.mjs # 벤더링된 X GraphQL 클라이언트 ├── tests/ # 455+ 테스트 스위트 ├── SKILL.md # 스킬 워크플로우 정의 ├── CLAUDE.md # Claude Code 컨텍스트 └── gemini-extension.json # Gemini CLI 확장 설정

6학습 포인트 (기술별)

이 레포에서 무엇을 배울 수 있는가

6-1. 멀티 소스 데이터 수집 아키텍처

배울 것: 10개+ 이기종 API를 통일된 데이터 모델로 정규화하는 방법, dataclasses를 활용한 스키마 표준화, API 키 유무에 따른 그레이스풀 디그레이드 설계.

6-2. 관련성 점수 시스템 (NLP 기초)

배울 것: 양방향 텍스트 유사도, 참여 속도 정규화, 교차 플랫폼 수렴 감지. 단순 키워드 매칭을 넘어 실제 신호 품질을 측정하는 기법을 코드로 익힐 수 있다.

6-3. Claude Code 스킬/플러그인 개발

배울 것: SKILL.md 5단계 워크플로우 작성법, CLAUDE.md 개발 컨텍스트 작성법, .claude-plugin/ 구조, Claude Code + ClawHub + Gemini CLI 멀티 에이전트 동시 지원.

6-4. 포어그라운드 실행 vs 백그라운드 실행

에이전트 스킬 개발의 중요한 교훈: LLM은 비동기 결과를 잘 다루지 못한다. 외부 스크립트를 호출할 때는 반드시 포어그라운드로 실행하고 출력을 직접 읽어야 한다.

6-5. 테스트 전략 (455+ 테스트)

fixtures/ 디렉토리의 목 데이터 패턴을 통해 외부 API 의존 코드를 안정적으로 테스트하는 방법을 배울 수 있다. --diagnose 플래그로 소스 가용성 검증하는 패턴도 실용적이다.

7시스템 요구사항

최소 및 권장 사양
요구사항최소권장
Python3.12+3.13+
Node.js22+22+ (bird-search 필수)
OSmacOS / LinuxmacOS / Linux
디스크50MB+캐시 포함 200MB+
메모리512MB1GB+ (병렬 실행 시)

API 키 요구사항 (단계별)

레벨필요 키활성 소스
무료없음HN + Polymarket
기본ScrapeCreators+ Reddit, TikTok, Instagram
중급+ X 쿠키 or xAI+ X / Twitter
풀셋+ OpenAI + Brave + Bluesky 등10개+ 전체

8직접 해볼 수 있는 실습 과제

난이도별 3~5개 과제
과제 1

미니 리서치 엔진 만들기 ★ 초급

HN + Reddit에서 동일 주제를 검색하여 결합하는 미니 스크립트를 작성한다.

구현 포인트: (1) HN 공개 API로 최근 30일 스토리 검색 (2) Reddit JSON API로 서브레딧 검색 (3) 공통 SearchResult 데이터클래스로 통합 (4) 단순 점수(upvotes × 최신성)로 정렬
과제 2

관련성 점수 시스템 구현 ★★ 중급

score.py의 3가지 가중치 시스템(관련성 45% + 최신성 25% + 참여도 30%)을 직접 구현한다.

구현 포인트: (1) TF-IDF 또는 임베딩 기반 텍스트 유사도 (2) 시간 감쇠 함수 (30일 윈도우) (3) 참여도 정규화 (플랫폼별 스케일 차이 보정) (4) 최종 가중 합산
과제 3

Claude Code 스킬 제작 ★★ 중급

last30days의 SKILL.md 구조를 참고하여 나만의 스킬(예: arXiv 논문 스캐너)을 만든다.

단계: (1) SKILL.md 작성 — 워크플로우 5단계 정의 (2) CLAUDE.md 작성 (3) Python 스크립트 1개 핵심 로직 (4) 테스트 3개 이상 (5) ~/.claude/skills/my-skill/에 배치하여 테스트
과제 4

교차 플랫폼 수렴 감지 ★★★ 고급

여러 플랫폼에서 동일 토픽이 동시에 언급되는 "수렴 신호"를 감지하는 모듈을 구현한다.

구현 포인트: (1) 엔티티 추출 (entity_extract.py 참고) (2) 플랫폼별 엔티티 빈도 집계 (3) 2개+ 플랫폼 동시 언급 시 수렴 점수 부여 (4) 시간 윈도우 슬라이딩으로 "급등 토픽" 감지
과제 5

Watchlist + 자동 브리핑 시스템 ★★★ 고급

skills/last30days/scripts/watchlist.py 패턴을 참고하여 cron + SQLite 기반 자동 리서치 시스템을 구축한다.

단계: (1) SQLite로 워치리스트 테이블 설계 (2) 주기적 수집 스크립트 cron 연동 (3) 변화 감지: 이전 실행 대비 새 콘텐츠 필터링 (4) 마크다운 브리핑 자동 생성 (5) 선택: Slack/이메일 알림 연동

9관련 기술 심화 학습 로드맵

5주 학습 플랜

1주차: Python 비동기 & 데이터 수집 기초

일차주제실습
1~2일asyncio 기본 — coroutine, await, gather3개 URL 동시 페치
3~4일dataclasses + 타입 힌트SearchResult 모델 설계
5~7일HTTP 클라이언트 (httpx 비동기)HN API 래퍼 만들기

2주차: 소셜 플랫폼 API 통합

일차주제실습
1~2일Reddit API (PRAW 또는 JSON 엔드포인트)서브레딧 검색 + 참여도 수집
3~4일YouTube Data API + 트랜스크립트 추출특정 토픽 영상 검색
5~7일AT Protocol (Bluesky) 기초Bluesky 포스트 검색 구현

3주차: NLP & 점수 시스템

일차주제실습
1~2일TF-IDF 유사도scikit-learn으로 텍스트 유사도 산출
3~4일문장 임베딩 (sentence-transformers)의미적 유사도 비교
5~7일종합 점수 시스템관련성+최신성+참여도 가중 합산

4주차: 에이전트 스킬 개발 & 배포

일차주제실습
1~2일SKILL.md 작성법 (last30days 참고)나만의 스킬 워크플로우 설계
3~4일Claude Code 플러그인 구조.claude-plugin/ 메타데이터 작성
5~7일테스트 작성 + 배포fixtures 기반 테스트 + 로컬 설치 테스트

5주차: 고급 패턴

일차주제실습
1~2일SQLite 풀텍스트 검색 (FTS5)워치리스트 DB 설계
3~4일캐시 전략 (TTL, LRU)24시간 캐시 레이어 구현
5~7일교차 플랫폼 수렴 감지엔티티 추출 + 수렴 점수 구현

10핵심 키워드 사전

이 레포를 이해하는 데 꼭 필요한 용어들
키워드설명
SKILL.mdClaude Code 스킬의 워크플로우와 동작 방식을 정의하는 파일. 에이전트가 이 파일을 읽고 실행 방법을 이해한다
그레이스풀 디그레이드API 키가 부족해도 가용한 소스만으로 동작하는 설계 패턴. 전체 실패 대신 기능 축소
양방향 텍스트 유사도쿼리→문서와 문서→쿼리 양쪽 방향으로 유사도를 측정하여 더 정확한 관련성 판단
참여 속도 정규화절대 참여 수가 아닌 "시간당 참여 속도"로 정규화. 1시간에 100좋아요 > 1주일에 100좋아요
교차 플랫폼 수렴동일 토픽이 Reddit, X, YouTube 등 여러 플랫폼에서 동시에 언급되는 현상. 신뢰도 지표
포어그라운드 실행에이전트 스킬에서 외부 스크립트를 실행할 때 결과를 직접 기다리는 방식. 백그라운드 실행 시 모델 환각 위험
ScrapeCreatorsReddit, TikTok, Instagram 등을 단일 API 키로 접근할 수 있는 범용 스크레이핑 서비스
AT ProtocolBluesky가 사용하는 분산형 소셜 네트워크 프로토콜. 오픈 표준으로 설계
bird-searchX/Twitter의 GraphQL 엔드포인트를 활용하는 벤더링된 검색 클라이언트
벤더링 (Vendoring)외부 라이브러리를 프로젝트 내부에 직접 포함시키는 전략. 외부 의존성 관리 불필요
Polymarket예측 시장 플랫폼. 이벤트 발생 확률을 시장 가격으로 표현. "미래 전망" 데이터로 활용
TTL 캐시Time-To-Live 캐시. 설정 시간(24시간) 이내 동일 요청 시 캐시된 결과 반환
Claude Code PluginClaude Code 에이전트에 기능을 추가하는 확장 패키지. 마켓플레이스를 통해 설치 가능
ClawHubClaude Code 플러그인/스킬의 패키지 매니저. npm과 유사한 역할
쿼리 확장사용자 쿼리를 LLM이 재해석하여 더 효과적인 검색 쿼리로 변환하는 기법

11참고 링크

더 깊이 파고들 때 유용한 자료들