RepoRank 구축: 오픈소스 영향·자금 조달 준비 엔진
출처: Dev.to

오픈소스 메트릭, 다중 소스 SQL 조인, 그리고 AI 기반 보조금 매칭을 연결하는 여정.
오픈소스 펀딩 위기
매일 개발자들은 전 세계 인프라를 움직이는 핵심 오픈소스 소프트웨어를 만들고 유지합니다. 하지만 생태계에서 가장 큰 문제 중 하나는 바로 자금 조달입니다. 유지보수자는 보조금 제안서, 피치덱, 스폰서십 신청서를 작성하느라 수 시간을 소비합니다.
프로젝트의 임팩트를 증명하려면 어려운 질문에 답해야 합니다:
- 몇 명의 개발자가 사용하고 있나요? (PyPI/npm 다운로드 수)
- 커뮤니티에서 이야기가 오가고 있나요? (HackerNews 언급)
- 현재 재정 상태는 어떻나요? (Open Collective 통계)
- 저장소는 얼마나 건강한가요? (GitHub 스타, 포크, 이슈)
이 데이터를 모으려면 4~5개의 서로 다른 API와 통합하고, 파편화된 JSON 구조를 파싱하고, 인증 코드를 보일러플레이트로 작성한 뒤, 조각들을 수작업으로 이어붙여야 합니다.
Pirates of the Coral‑bean 해커톤을 위해 저는 바로 이 문제를 해결하는 RepoRank를 만들었습니다. RepoRank는 Coral SQL과 Hugging Face Qwen 2.5 (72B) 를 활용해 다중 소스 신호를 즉시 집계하고, 전체 임팩트 점수를 계산하며, 전문적인 펀딩 피치를 생성하고, 프로젝트와 활성 보조금 프로그램을 매칭합니다.
비밀 무기: Coral SQL
4개 이상의 외부 API를 통합하려면 보통 문서를 읽고 API 래퍼 코드를 작성하는 데 며칠이 걸립니다. Coral은 API를 표준 SQL로 조회할 수 있게 함으로써 이 과정을 완전히 바꿉니다.
Coral에서는 API를 SQL 테이블처럼 취급합니다. RepoRank에서 핵심이 되는 단일 다중 소스 JOIN 쿼리는 다음과 같습니다:
SELECT g.full_name,
g.stargazers_count,
g.forks_count,
g.open_issues_count,
p.last_month_downloads AS monthly_downloads,
h.mention_count AS hn_mentions_6mo,
h.top_score AS hn_top_score
FROM github.repos_get g
JOIN pypi.packages p ON p.name = 'fastapi'
JOIN (
SELECT COUNT(*) AS mention_count,
MAX(score) AS top_score
FROM hackernews.stories
WHERE query = 'fastapi'
AND time > NOW() - INTERVAL '180 days'
) h ON 1 = 1
WHERE g.owner = 'tiangolo' AND g.repo = 'fastapi';
Coral은 내부적으로 실행을 담당해 패키지 통계, 지난 180일 동안 저장소 이름과 일치하는 HackerNews 스토리, GitHub 상세 정보를 가져와 하나의 평탄한 SQL 행으로 반환합니다.
우리가 필요로 했던 소스 구축
Coral에는 훌륭한 내장 소스가 많이 있지만, 전체 오픈소스 모습을 포착하려면 PyPI, npm, HackerNews, Open Collective의 데이터가 필요했습니다.
Python에서 API 요청을 직접 코딩하는 대신 Coral을 확장했습니다! 외부 REST와 GraphQL 엔드포인트를 SQL‑쿼리 가능한 테이블로 매핑하는 네 개의 맞춤형 YAML 소스 사양을 설계하고 작성했습니다.
아래는 Open Collective용으로 만든 맞춤형 GraphQL 소스 사양의 일부입니다:
dsl_version: 3
name: opencollective
backend: http
base_url: https://api.opencollective.com/graphql/v2
tables:
- name: collectives
filters:
- name: slug
required: true
request:
method: POST
path: /
body:
format: text
content: |
{
"query": "query ($slug: String) { collective(slug: $slug) { slug name stats { totalAmountReceived { value } contributorsCount } } }",
"variables": { "slug": "{{filter.slug}}" }
}
GraphQL 변수와 {{filter.slug}} 템플릿을 매핑함으로써 간단한 SQL WHERE 절만으로 Open Collective를 조회할 수 있습니다:
SELECT total_amount_received
FROM opencollective.collectives
WHERE slug = 'fastapi';
상위 레포에 대한 기여
다른 개발자들이 이를 활용하도록 돕기 위해 공식 withcoral/coral 레포에 세 개의 상위 Pull Request를 열었습니다:
- PR #827 – PyPI 패키지 소스 사양 및 문서 추가.
- PR #828 – npm 패키지 소스 사양 및 문서 추가.
- PR #829 – Open Collective GraphQL 소스 사양 및 문서 추가.
원시 데이터 → 실행 가능한 인사이트
Coral 엔진이 쿼리를 실행해 구조화된 레코드를 반환하면 RepoRank는 Hugging Face Qwen 2.5 (72B Instruct) 로 데이터를 넘깁니다.
구조화된 JSON‑스키마 출력을 활용해 Qwen은 전문가 수준의 오픈소스 분석가 역할을 수행하고 다음을 반환합니다:
- 임팩트 점수 (0‑100) – 모든 메트릭을 종합한 점수.
- 임팩트 내러티브 – 프로젝트의 실제 가치를 평이한 영어로 요약한 전문적인 설명.
- 펀딩 피치 – 스폰서십 양식에 바로 복사‑붙여넣기 가능한 한 줄짜리 임팩트 피치.
- 타깃 보조금 – 언어, 생태계, 프로젝트 규모에 맞는 3‑5개의 구체적인 프로그램(예: Google Summer of Code, PSF, MOSS, GitHub Sponsors).
프리미엄 사용자 경험
백엔드의 파워에 맞추어 다크 모드 대시보드를 구축했습니다. 주요 기능은 다음과 같습니다:
- 인터랙티브 SVG 레이더 차트 – 스타, 포크, 다운로드, 커뮤니티 버즈, 재정 지원, 저장소 건강 등 여섯 가지 핵심 메트릭에 대한 프로젝트 균형을 시각화.
- 세션 지속 GitHub 인증 – GitHub 계정을 연결하고 사이드바에 저장소를 로드한 뒤, 저장소를 클릭하면 즉시 임팩트 보고서를 생성.
(대시보드에 대한 나머지 설명은 원문을 참고하세요.)
# 즉시 분석 저장소
**클릭 가능한 보조금 카드**
알려진 보조금 신청 페이지에 직접 연결된 하드 매핑 링크와, 최신 프로그램을 위한 동적 Google 검색 대체 옵션.
**검사 가능한 쿼리**
Coral 엔진이 실행한 정확한 쿼리를 개발자가 확인할 수 있는 접이식 SQL 상세 뷰어.
**키보드 네비게이션**
- `Cmd+K` – 검색 바에 포커스
- `Cmd+Enter` – 분석 실행
- `Esc` – 모달 종료
[](https://media2.dev.to/dynamic/image/width=800,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft9aix0hqvmru94saslt8.png)
---
## 핵심 정리
- **SQL을 API 게이트웨이로** – API를 SQL 테이블처럼 다루면 데이터 오케스트레이션이 크게 단순해집니다. SQL로 다중 소스 조인을 작성하는 것이 비동기 API 집계 루프를 작성하는 것보다 깔끔합니다.
- **커뮤니티 확장** – YAML 사양을 작성해 Coral의 기능을 확장함으로써 선언형 소스 매핑의 강력함을 확인했습니다.
- **개발자 중심 AI** – AI 모델은 구조화되고 사전 필터링된 데이터를 받을 때 가장 효과적입니다. Coral의 데이터 수집 능력과 LLM의 합성 능력을 결합하면 뛰어난 파이프라인 