TRENDSHIFT 딥다이브 · 2026-06-27

every-app/open-seo 딥다이브
— Semrush·Ahrefs를 대체하는 오픈소스 SEO 분석 플랫폼

월 $120~$500짜리 SEO 도구를 셀프호스팅 + DataForSEO API 종량제로 대체한다. 키워드 리서치·백링크 분석·순위 추적·사이트 오디트를 하나의 앱에 묶고, MCP 서버까지 내장해 Claude Code·Hermes 같은 AI 에이전트가 SEO 데이터를 직접 읽을 수 있게 만들었다. 스택은 TanStack Start + Cloudflare Workers + D1(SQLite) + DataForSEO API로, 기술 블로그에서 자주 보는 풀스택 에지 컴퓨팅의 교과서적 사례다. (저장소: every-app/open-seo · MIT 라이선스 · TrendShift Daily · v0.0.21) ※ 데이터는 DataForSEO 유료 API에서 옵니다 — 앱 자체는 무료지만 API 비용이 발생합니다. 본 문서는 기술 학습 목적 자료입니다.
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 시스템 요구사항 · 설치
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

이 레포가 무엇을 하는 물건인가.

핵심 메시지

"Semrush는 월 $250짜리 스위스 아미 나이프다.
OpenSEO는 '칼날만 골라서 비용을 내는' 조립식 SEO 공구함이다."

OpenSEO는 셀프호스팅 가능한 풀스택 SEO 분석 앱이다. 키워드 리서치·백링크·순위 추적·사이트 오디트를 하나의 모던 UI에서 제공하되, 실제 SEO 데이터는 DataForSEO API를 통해 가져온다. 앱 자체 비용은 $0 — 쓴 만큼만 API 비용이 청구된다.

더 독특한 점은 MCP(Model Context Protocol) 서버를 내장해, Claude Code·Hermes 같은 AI 에이전트가 OpenSEO의 SEO 데이터를 직접 도구로 호출할 수 있다는 것. 에이전트 스킬 7개(keyword-research, competitor-analysis 등)도 함께 제공된다.

용어
SEO (Search Engine Optimization)
검색엔진(주로 Google)에서 내 웹사이트가 더 높은 순위에 노출되도록 최적화하는 작업. 크게 키워드 리서치(무슨 단어로 검색하는가), 백링크(다른 사이트가 내 사이트를 얼마나 링크하는가), 기술적 SEO(페이지 로드 속도·크롤링 가능성) 세 축으로 나뉜다.
용어
백링크 (Backlink)
다른 웹사이트가 내 사이트를 향해 거는 링크. Google은 이를 "투표"처럼 취급해 순위에 반영한다. Ahrefs·Semrush의 핵심 기능 중 하나가 백링크 분석인데, OpenSEO는 DataForSEO의 Backlinks API를 통해 동일 데이터를 제공한다.
용어
SERP (Search Engine Results Page)
Google 검색 결과 페이지. 순위, 스니펫, 광고, 이미지 블록 등 다양한 "SERP 피처"가 있다. OpenSEO는 DataForSEO의 SERP API로 특정 키워드의 검색 결과를 가져와 경쟁 현황을 분석한다.

2왜 주목받는가

Semrush·Ahrefs 대비 오픈소스의 포지셔닝 — 그리고 솔직한 한계.

기존 도구의 문제: 가격과 잠금(Lock-in)

도구월 비용(2026)주요 한계
Semrush Pro$139.95~$499.95데이터 내보내기 제한, API 별도 과금
Ahrefs Standard$229~$449팀 좌석당 추가 비용, 셀프호스팅 불가
Moz Pro$99~$599기능이 위 둘보다 제한적
OpenSEO앱 $0 + DataForSEO API 종량제아래 참조
장점
오픈소스 + 종량제 + AI 에이전트 연동

앱 코드를 직접 포크해 커스터마이즈할 수 있다. DataForSEO의 신규 계정 $1 무료 크레딧으로 먼저 테스트해볼 수 있고, 이후에도 쓴 만큼만 낸다. 100개 키워드 주간 추적 비용은 약 $1.20/월에 불과하다. MCP 서버 내장으로 AI 에이전트가 SEO 데이터를 직접 사용하는 워크플로가 가능하다.

솔직한 한계 — 반드시 읽으세요
데이터는 어디서 오는가: DataForSEO API

OpenSEO 자체는 SEO 데이터를 수집하지 않는다. 모든 키워드 볼륨·백링크·SERP 데이터는 DataForSEO(유료 서드파티)에서 가져온다. 즉 "오픈소스"는 앱 레이어에만 해당하며, 실제 데이터 소스는 여전히 유료 외부 서비스다.

DataForSEO 최솟값은 $50 충전. 대량 사용 시 비용이 빠르게 늘어날 수 있다 (100개 백링크 완전 탐색 ≈ $10.94). Semrush/Ahrefs 대비 데이터 신선도·커버리지가 같다는 보장은 없다.

v0.0.21 단계로, 프로덕션 성숙도보다는 빠르게 성장 중인 초기 오픈소스 프로젝트에 가깝다. 스케줄 사이트 오디트, 클라이언트 맞춤 리포트, 로컬 SEO 등 핵심 기능이 아직 로드맵 단계다.

그래서 트렌딩인 이유

MCP + AI 에이전트 통합이 핵심 차별점이다. SEO 도구가 Claude Code 같은 AI 에이전트에 직접 연결되는 사례는 흔치 않다. "AI 에이전트가 SEO 전략을 자율적으로 실행"하는 워크플로를 가장 쉽게 구현할 수 있는 오픈소스 도구로 포지셔닝됐다. TanStack + Cloudflare Workers 에지 풀스택이라는 최신 아키텍처도 개발자 관심을 끌었다.

3기술 스택 전체 지도

프론트엔드·백엔드·DB·데이터·인프라 각 레이어를 상세 분석.

프론트엔드

기술역할선택 이유
React 19UI 컴포넌트 렌더링최신 동시성 렌더링·Server Actions 지원
TanStack Start풀스택 프레임워크 (라우팅·SSR)Next.js 대안 — Cloudflare Workers 네이티브 지원, 타입 안전 라우팅
TanStack Router파일 기반 타입 안전 라우팅라우트 파라미터·검색 파라미터 타입 추론
TanStack Query서버 상태 관리·캐싱SEO 데이터 특성상 stale-while-revalidate 패턴 최적
TanStack Table키워드·백링크 테이블 렌더링대용량 데이터 정렬·필터·페이징
TanStack Form폼 상태 관리타입 안전 폼 밸리데이션
Tailwind CSS v4유틸리티 CSSv4의 CSS-first 설정 방식 채택
daisyUI v5UI 컴포넌트 라이브러리Tailwind 기반 미리 만든 컴포넌트
Recharts순위 추적·트렌드 차트React 네이티브 반응형 차트
Lucide React아이콘경량 트리쉐이킹 가능 아이콘셋
Vite 7빌드 도구@cloudflare/vite-plugin으로 Workers 환경 빌드

백엔드 / 서버

기술역할비고
Cloudflare Workers서버리스 엣지 런타임workerd(V8 기반), Node.js 아님 — 전 세계 엣지 실행
Cloudflare Workflows장기 실행 비동기 작업사이트 오디트처럼 시간이 걸리는 크롤링 작업 처리
Cloudflare Durable Objects상태 있는 실시간 객체온보딩 채팅 에이전트 세션 관리에 사용
Better Auth인증·세션 관리이메일/비번 + Google OAuth. 3가지 AUTH_MODE 지원
MCP SDKAI 에이전트 연동 프로토콜@modelcontextprotocol/sdk 1.29.0 — 18개 툴 노출
Cloudflare Workers OAuthMCP OAuth 2.0 인증에이전트 클라이언트 등록·토큰 관리
AI SDK (Vercel)LLM 호출 추상화@ai-sdk/react + OpenRouter 프로바이더로 다양한 모델 지원
agents 0.15.0AI 에이전트 런타임온보딩 채팅 에이전트 구현에 사용
Drizzle ORM타입 안전 DB 쿼리SQLite/D1 방언, 마이그레이션 관리

데이터베이스

기술역할비고
Cloudflare D1메인 관계형 DB (SQLite)Workers에 바인딩된 서버리스 SQLite — 26개 마이그레이션 파일
Cloudflare KVOAuth 토큰·세션 저장OAUTH_KV 바인딩 — MCP 클라이언트 등록 정보
Cloudflare R2Lighthouse 결과 JSON 저장사이트 오디트 대용량 리포트 파일

외부 데이터 소스 / SEO API

API제공 데이터비용 구조
DataForSEO SERP APISERP 결과, 키워드 순위, 광고요청당 과금 ($0.0006~$0.0035)
DataForSEO Labs API키워드 메트릭, 검색량, KD, CPC1,000 키워드당 $0.0035~
DataForSEO Backlinks API백링크 목록, 도메인 권위도도메인당 $0.063~$0.109
DataForSEO Lighthouse APICore Web Vitals, 성능 점수페이지당 과금
Google Search Console API실제 검색 노출·클릭 데이터무료 (OAuth 연동 필요)

개발·테스트 도구

도구용도
Vitest유닛·통합 테스트 (MCP 툴, DB 쿼리 등)
PlaywrightE2E 테스트 (도메인 오버뷰, 키워드 탐색 흐름)
oxlintRust 기반 고속 ESLint 대체 린터
Prettier코드 포매터
knip미사용 exports·의존성 탐지
WranglerCloudflare Workers 로컬 개발·배포 CLI
pnpm 10패키지 매니저
PostHog프로덕션 에러 추적·분석

4아키텍처 심화 분석

ASCII 구조도 + 핵심 설계 패턴.

시스템 전체 구조도

┌─────────────────────────────────────────────────────────────────┐ │ 사용자 / AI 에이전트 │ └───────────────┬──────────────────────────────┬──────────────────┘ │ 브라우저 (React UI) │ MCP 클라이언트 │ │ (Claude Code, Hermes...) ▼ ▼ ┌───────────────────────────────────────────────────────────────┐ │ Cloudflare Workers (엣지 런타임 / workerd) │ │ │ │ ┌──────────────────┐ ┌──────────────────────────────┐ │ │ │ TanStack Start │ │ MCP Server (OAuth 2.0) │ │ │ │ (SSR + API) │ │ ┌────────────────────────┐ │ │ │ │ │ │ │ 18개 MCP 툴: │ │ │ │ │ /routes/_app │ │ │ research_keywords │ │ │ │ │ /routes/_project│ │ │ get_domain_overview │ │ │ │ │ /routes/api │ │ │ get_backlinks_overview │ │ │ │ └─────────┬────────┘ │ │ get_rank_tracker │ │ │ │ │ │ │ get_serp_results │ │ │ │ ┌─────────▼────────┐ │ │ find_serp_competitors │ │ │ │ │ Better Auth │ │ │ search_console_tools... │ │ │ │ │ (인증 미들웨어) │ │ └────────────┬───────────┘ │ │ │ └─────────┬────────┘ └───────────────┼──────────────┘ │ │ │ │ │ │ ┌─────────▼─────────────────────────────▼──────────────┐ │ │ │ Drizzle ORM + D1 바인딩 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Cloudflare Workflows (장기 비동기 — 사이트 오디트) │ │ │ │ Cloudflare Durable Objects (채팅 에이전트 상태) │ │ │ └─────────────────────────────────────────────────────┘ │ └───────┬─────────────────────────────────────────────────┬────┘ │ D1 (SQLite) │ KV / R2 ▼ ▼ ┌──────────────┐ ┌───────────────────────────────────────────┐ │ Cloudflare │ │ 외부 API │ │ D1 Database │ │ DataForSEO (SERP / Keywords / Backlinks │ │ (26개 테이블) │ │ / Lighthouse) + Google Search Console │ └──────────────┘ └───────────────────────────────────────────┘

핵심 설계 패턴 1: 3가지 인증 모드

OpenSEO는 단일 AUTH_MODE 환경 변수로 배포 시나리오를 전환한다.

AUTH_MODE=local_noauth ← Docker 로컬 사용 (인증 없음, admin@localhost 자동 주입) AUTH_MODE=cloudflare_access ← Cloudflare Access JWT 검증 (팀/인터넷 공개용) AUTH_MODE=hosted ← Better Auth 이메일/비번 + 조직 관리 (SaaS 모드)

빌드 시 AUTH_MODE 값이 Vite에 의해 클라이언트 번들에 인라인된다. 그래서 Docker 이미지 빌드는 컨테이너 시작 시점에 이뤄진다 — 런타임에서야 AUTH_MODE를 알 수 있기 때문.

핵심 설계 패턴 2: MCP OAuth 2.0 플로우

AI 에이전트 (Claude Code 등) │ │ 1. MCP 클라이언트 등록 요청 ▼ Cloudflare Workers OAuth Provider (OAUTH_KV에 등록 정보 저장) │ │ 2. 사용자 OAuth 동의 화면 표시 ▼ 사용자 브라우저 → 승인 │ │ 3. Access Token 발급 (KV 저장) ▼ 에이전트 → MCP 툴 호출 (Authorization: Bearer ...) │ │ 4. 프로젝트 권한 검증 (D1 DB 조회) ▼ DataForSEO API 호출 → 결과 반환

핵심 설계 패턴 3: DataForSEO 프록시 + 캐싱 레이어

OpenSEO는 DataForSEO를 단순히 통과시키지 않는다. 자체 D1 DB에 결과를 캐싱한다. 예를 들어 키워드 메트릭(keywordMetrics 테이블)은 한 번 불러오면 이후 같은 프로젝트의 요청에서 재사용된다. 이는 DataForSEO API 비용을 절감하는 핵심 설계다.

핵심 설계 패턴 4: 사이트 오디트 — Cloudflare Workflows

사용자 → 오디트 시작 요청 │ ▼ Workers API → Workflow 인스턴스 생성 (workflowInstanceId 저장) │ ▼ Cloudflare Workflows (장기 실행 허용, 재시도·체크포인트 지원) ├── Phase 1: 크롤링 (cheerio + robots-parser + tldts) │ 각 페이지: 상태코드·타이틀·메타·h1~h6·이미지·링크 수집 │ → auditPages 테이블에 저장 │ └── Phase 2: Lighthouse (DataForSEO Lighthouse API) 모바일+데스크탑 각각 측정 → auditLighthouseResults 테이블 + R2 전체 JSON

5디렉토리 구조 해부

코드가 어디에 어떻게 배치돼 있는가.

open-seo/ ├── .agents/skills/ ← AI 에이전트용 스킬 7개 (마크다운) │ ├── keyword-research/SKILL.md 키워드 리서치 워크플로 │ ├── competitor-analysis/ 경쟁사 분석 │ ├── competitive-landscape/ 업계 전체 경쟁 지형 │ ├── keyword-clustering/ 키워드 군집화 │ ├── link-prospecting/ 링크 빌딩 후보 발굴 │ ├── seo-coach/ SEO 전략 코치 │ └── seo-project-setup/ 프로젝트 초기 설정 │ ├── .claude/skills/ ← Claude Code 전용 스킬 │ ├── merge-ready/ PR 머지 전 체크리스트 │ └── openseo-release-notes/ 릴리스 노트 생성 │ ├── src/ │ ├── routes/ ← TanStack Start 파일 기반 라우팅 │ │ ├── __root.tsx 앱 루트 (전역 레이아웃) │ │ ├── _app/ 인증 불필요 앱 페이지 │ │ │ ├── ai.tsx AI & Agents 설정 페이지 │ │ │ ├── billing.tsx 결제 페이지 │ │ │ ├── projects.tsx 프로젝트 목록 │ │ │ └── settings.tsx 계정 설정 │ │ ├── _project/p/$projectId/ 프로젝트별 SEO 기능 페이지 │ │ │ ├── domain.tsx 도메인 오버뷰 │ │ │ ├── keywords.tsx 키워드 리서치 │ │ │ ├── backlinks.tsx 백링크 분석 │ │ │ ├── rank-tracking/ 순위 추적 │ │ │ ├── audit.tsx 사이트 오디트 │ │ │ ├── brand-lookup.tsx 브랜드 검색 (AI Visibility) │ │ │ ├── saved.tsx 저장된 키워드 │ │ │ └── prompt-explorer.tsx AI 프롬프트 탐색기 │ │ └── api/ REST/RPC API 엔드포인트 │ │ │ ├── server/ │ │ ├── mcp/ ← MCP 서버 구현체 │ │ │ ├── server.ts 18개 MCP 툴 등록 │ │ │ ├── transport.ts HTTP SSE 트랜스포트 │ │ │ ├── oauth-provider.ts OAuth 2.0 프로바이더 │ │ │ ├── tools/ 개별 툴 구현 │ │ │ │ ├── research-keywords.ts │ │ │ │ ├── get-domain-overview.ts │ │ │ │ ├── get-backlinks-overview.ts │ │ │ │ ├── dataforseo-research-tools.ts ← 6개 툴 (SERP·로컬 등) │ │ │ │ └── search-console-tools.ts │ │ │ └── formatters.ts MCP 응답 포매터 │ │ └── workflows/ ← Cloudflare Workflows (사이트 오디트) │ │ │ ├── db/ ← 데이터베이스 스키마 │ │ ├── app.schema.ts 핵심 테이블 (projects, keywords, audits...) │ │ ├── better-auth-schema.ts 인증 관련 테이블 │ │ ├── billing.schema.ts 결제 관련 │ │ └── gsc.schema.ts Google Search Console 토큰 │ │ │ ├── client/ ← 클라이언트 전용 코드 │ │ ├── components/ 공통 UI 컴포넌트 │ │ ├── hooks/ 검색 히스토리 등 커스텀 훅 │ │ └── lib/ CSV 내보내기, 클립보드, 에러 메시지 │ │ │ └── lib/ ← 공통 유틸 (auth, 에러 처리) │ ├── drizzle/ ← DB 마이그레이션 파일 (0000~0025.sql) ├── docs/ ← 셀프호스팅·GSC 설정 가이드 ├── Dockerfile.selfhost Docker 셀프호스팅용 ├── compose.yaml Docker Compose └── wrangler.json Cloudflare Workers 설정
구조 이해 팁

routes/_project/p/$projectId/가 SEO 기능의 심장이다. 파일 하나가 곧 페이지 하나다. domain.tsx는 도메인 오버뷰, keywords.tsx는 키워드 리서치 — TanStack Router의 파일 기반 라우팅 덕분에 URL 구조가 디렉토리 구조와 1:1 대응된다.

src/server/mcp/가 AI 에이전트 연동의 전부다. 여기에 툴을 추가하면 Claude Code가 새로운 SEO 기능에 접근할 수 있게 된다.

6학습 포인트

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

배울 것 1: TanStack 에코시스템 풀스택

TanStack Start + Router + Query + Table + Form을 모두 하나의 프로젝트에서 볼 수 있다. React 생태계에서 Next.js가 아닌 대안적 풀스택 구성의 실제 사례를 보기 드문데, OpenSEO가 그 교과서다.

실습 아이디어

TanStack Router 타입 안전 라우팅 체험

src/routes/_project/p/$projectId/keywords.tsx를 열고 useParams(), useSearch()의 타입이 어떻게 자동 추론되는지 확인해보자. Route 파일의 validateSearch가 URL 쿼리스트링을 Zod로 검증하는 패턴도 학습 포인트다.

배울 것 2: Cloudflare Workers 풀스택 아키텍처

Cloudflare Workers는 Node.js가 아닌 workerd(V8 아이솔레이트) 환경이다. 파일시스템 없음, 실행 시간 제한, Worker 간 상태 공유 불가. 이 제약에 맞게 아키텍처를 짜는 방법을 OpenSEO에서 직접 볼 수 있다. D1(SQLite), KV, R2, Durable Objects, Workflows를 각 용도에 맞게 조합하는 패턴이 핵심이다.

배울 것 3: MCP 서버 구현

src/server/mcp/server.ts에서 18개 MCP 툴이 어떻게 등록되는지 보자. 각 툴은 입력 스키마(Zod), 핸들러 함수, 출력 스키마로 구성된다. instrumentMcpToolHandler로 모든 툴 호출이 PostHog에 추적되는 계측 패턴도 실무에 바로 적용 가능하다.

배울 것 4: Drizzle ORM + SQLite 스키마 설계

src/db/app.schema.ts는 실무 수준의 SQLite 스키마 예시다. 소프트 삭제(archivedAt), 복합 유니크 인덱스, 부분 인덱스(WHERE status IN ('pending','running'))로 중복 실행 방지, 의도적 FK 없는 스냅샷 테이블 등 실제 프로덕션 패턴이 담겼다.

배울 것 5: SEO 데이터 파이프라인

DataForSEO API를 어떻게 호출하고 캐싱하고 정규화하는지 볼 수 있다. dataforseo-client npm 패키지 사용법, 비용 최적화를 위한 배치 요청 패턴, 결과를 D1에 저장해 재사용하는 캐싱 전략이 핵심이다.

7시스템 요구사항 · 설치

Docker로 5분 만에 시작하거나, Cloudflare 에지에 직접 배포.

요구사항

항목최솟값비고
DockerDocker Desktop 설치로컬 셀프호스팅 경로 (권장)
DataForSEO API 키신규 계정 $1 무료 크레딧최소 충전액 $50
Node.js (로컬 개발)v22pnpm 10 필요
Cloudflare 계정 (CF 배포)무료 플랜 가능Workers + D1 + KV + R2 사용
Google OAuth (선택)Google Cloud 프로젝트Search Console 연동 시만
RAM4GB+Dockerfile에서 --max-old-space-size=4096 설정됨

Docker 빠른 시작 (가장 쉬운 방법)

# 1. 레포 클론
git clone https://github.com/every-app/open-seo.git
cd open-seo

# 2. 환경 변수 파일 복사
cp .env.example .env

# 3. DataForSEO API 키 설정 (.env 편집)
# DATAFORSEO_API_KEY=your_base64_encoded_login:password

# 4. 컨테이너 시작
docker compose up -d

# 5. 브라우저에서 접속
open http://localhost:3001
Docker 설계 포인트

Dockerfile.selfhost를 보면 빌드가 이미지 빌드 시가 아닌 컨테이너 시작 시에 이뤄진다. AUTH_MODE 같은 환경 변수가 Vite에 의해 클라이언트 번들에 인라인되기 때문이다. CMDpnpm run db:migrate:local && NODE_OPTIONS=--max-old-space-size=4096 pnpm run build && vite preview를 순서대로 실행한다.

Cloudflare 배포 (팀·멀티디바이스 용)

# Wrangler 로그인
npx wrangler login

# D1 DB 마이그레이션 (프로덕션)
pnpm run db:migrate:prod

# 빌드 & 배포
pnpm run deploy

# 또는 GitHub 리포지토리의 "Deploy to Cloudflare" 버튼 클릭

로컬 개발 환경

# 의존성 설치
pnpm install

# .env.local 파일 생성 후 DataForSEO 키 설정
cp .env.example .env.local

# D1 로컬 마이그레이션 (Wrangler 로컬 SQLite 사용)
pnpm run db:migrate:local

# 개발 서버 시작
pnpm run dev

# 테스트 실행
pnpm test          # 유닛 테스트
pnpm test:e2e      # E2E 테스트 (Playwright)

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

난이도별로 단계적으로 도전해보자.

LV.1 — 입문

Docker로 OpenSEO 실행하고 DataForSEO 무료 크레딧 사용해보기

Docker 빠른 시작 가이드를 따라 앱을 띄우고, DataForSEO 신규 계정의 $1 무료 크레딧으로 키워드 리서치를 3개 해보자. DataForSEO 대시보드에서 실제 API 호출 비용이 얼마나 차감됐는지 확인한다.

목표: DataForSEO API가 실제로 어떤 데이터를 반환하는지 직접 체감하기
LV.2 — 초급

Claude Code에 OpenSEO MCP 연결하기

앱의 "AI & Agents" 메뉴를 열고 MCP 연결 가이드를 따라 Claude Code에 OpenSEO를 MCP 서버로 등록한다. 그런 다음 .agents/skills/keyword-research/SKILL.md를 읽고, Claude Code에서 직접 키워드 리서치 스킬을 실행해본다.

목표: AI 에이전트 + MCP + SEO 도구가 실제로 어떻게 연결되는지 체험
LV.3 — 중급

새로운 MCP 툴 추가하기

src/server/mcp/tools/ 안의 기존 툴(예: research-keywords.ts)을 참고해 DataForSEO의 다른 API(예: Google Trends API)를 새로운 MCP 툴로 구현해보자. src/server/mcp/server.ts에 등록하고, 유닛 테스트도 작성한다.

배울 것: MCP 툴 스키마 설계, DataForSEO 클라이언트 사용, 타입스크립트 타입 추론
LV.4 — 고급

새로운 SEO 기능 페이지 추가하기

TanStack Start로 새 페이지를 추가하는 것을 실습한다. 예시: "내 도메인의 Google 검색 노출 트렌드" 페이지. src/routes/_project/p/$projectId/에 새 파일을 만들고, Google Search Console API 데이터를 TanStack Query로 패칭하고, Recharts로 시각화한다.

배울 것: TanStack 파일 기반 라우팅, Query 데이터 패칭, Recharts 차트
LV.5 — 도전

Cloudflare Workers 엣지에 자신의 OpenSEO 포크 배포하기

코드를 포크해 커스텀 기능(예: 팀용 공유 키워드 리스트, Slack 알림 통합)을 추가한 뒤 Cloudflare Workers에 배포한다. Wrangler의 D1·KV·R2 바인딩을 직접 설정하고, AUTH_MODE=cloudflare_access로 Cloudflare Access 인증을 붙여 안전하게 공개 URL로 서비스해보자.

배울 것: Cloudflare Workers 배포, D1 프로덕션 마이그레이션, Wrangler 환경 관리

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

OpenSEO를 이해하고 확장하기 위한 주차별 학습 계획.

주차주제목표학습 자료
1주Cloudflare Workers 기초workerd 환경 이해, wrangler CLI, D1·KV 바인딩 실습Cloudflare Workers 공식 문서, Workers Playground
2주TanStack Router + Start파일 기반 라우팅, 타입 안전 URL 파라미터, SSR 모드TanStack 공식 문서 + 예제 레포
3주TanStack Query + Table서버 상태 관리, stale-while-revalidate, 가상 스크롤 테이블TanStack Query v5 공식 가이드
4주Drizzle ORM + SQLite 설계스키마 정의, 마이그레이션, 복합 인덱스, 소프트 삭제 패턴Drizzle ORM 문서, SQLite 공식 문서
5주MCP(Model Context Protocol)MCP 스펙 이해, 서버 구현, OAuth 2.0 인증 플로우modelcontextprotocol.io, MCP SDK 문서
6주DataForSEO API 활용SERP·Keywords·Backlinks API 각 엔드포인트, 비용 최적화DataForSEO 공식 API 문서
7주Better Auth + OAuth이메일/비번·소셜 로그인 구현, 세션 관리, JWT 검증better-auth.js 공식 문서
8주Cloudflare Workflows + Durable Objects장기 실행 비동기 워크플로, 상태 있는 서버리스 객체Cloudflare Workflows·DO 문서, 공식 예제
9주AI SDK + 에이전트 스킬Vercel AI SDK로 LLM 호출, 스킬 마크다운 설계 패턴sdk.vercel.ai, OpenSEO .agents/skills/ 소스
10주SEO 도메인 지식키워드 의도 분류, 백링크 품질 평가, Core Web Vitals, Lighthouse 점수Google Search Central 문서, Ahrefs SEO Blog

10핵심 키워드 사전

이 레포를 이해하는 데 필요한 핵심 용어 정리.

용어정의OpenSEO에서의 역할
DataForSEOSEO 데이터 제공 B2B API 서비스OpenSEO의 모든 SEO 데이터 소스. SERP·키워드·백링크·Lighthouse 데이터 제공
MCP (Model Context Protocol)AI 에이전트가 외부 도구를 표준 방식으로 호출하는 프로토콜Claude Code·Hermes 등이 OpenSEO SEO 데이터를 직접 사용하게 하는 연결 레이어
Cloudflare WorkersV8 아이솔레이트 기반 서버리스 엣지 런타임OpenSEO의 서버 실행 환경. Node.js와 다르게 파일시스템 없음, 전 세계 엣지 실행
D1 (Cloudflare)Cloudflare의 서버리스 SQLite 데이터베이스프로젝트·키워드·순위 추적·오디트 결과 저장 (26개 테이블)
KV (Key-Value)Cloudflare의 글로벌 분산 KV 스토어OAuth 토큰·MCP 클라이언트 등록 정보 저장
Durable ObjectsCloudflare의 상태 있는 서버리스 객체온보딩 채팅 에이전트의 대화 상태 유지
Cloudflare Workflows장기 실행·재시도·체크포인트 지원 비동기 워크플로사이트 오디트 크롤링처럼 수 분이 걸리는 작업 처리
TanStack StartTanStack Router 기반의 풀스택 React 프레임워크Next.js 대안. SSR + 파일 기반 라우팅 + Workers 네이티브 지원
Drizzle ORM타입스크립트 최우선 SQL ORMD1에 대한 타입 안전 쿼리, 스키마 정의, 마이그레이션 관리
Better Auth타입스크립트 인증 라이브러리이메일/비번, Google OAuth, 조직 멤버십, 세션 관리
SERP Feature구글 검색 결과 페이지의 특수 블록이미지 팩·Featured Snippet·People Also Ask 등. OpenSEO가 순위 스냅샷에 함께 저장
Keyword Difficulty (KD)특정 키워드로 1페이지 상위에 오르기 얼마나 어려운가를 0~100으로 나타낸 점수DataForSEO Labs API에서 제공, 키워드 메트릭에 캐싱
Core Web Vitals구글이 정한 웹 성능 핵심 지표 (LCP, CLS, INP)Lighthouse API로 측정해 auditLighthouseResults에 저장
workerdCloudflare의 오픈소스 서버리스 JS 런타임Workers의 실제 실행 엔진. V8 기반으로 Node.js와 호환성 주의 필요
oxlintRust로 작성된 고속 JavaScript 린터ESLint 대신 사용. 타입 인식(--type-aware) 린팅 지원

11참고 링크

출처·심화 학습 자료 모음.