Star가 높다고 좋은 레포? 솔직히 아니지
GitHub에서 뭐 찾을 때 Star 순으로 정렬하지? 나도 그랬어. 근데 생각해보면 Star는 그냥 북마크야. "나중에 볼게요" 누른 거랑 똑같단 말이지.
진짜 중요한 건 지금도 활발하게 돌아가고 있냐는 거잖아. 그래서 내가 쓰는 기준이 RVS(Repo Vitality Score)야. 5가지 축으로 레포의 실제 체력을 본다.
RVS — 5축 평가
| 축 | 가중치 | 뭐 보는 거냐면 |
|---|---|---|
| Momentum | 30% | 하루 평균 Star 증가량. 꾸준히 관심 받는지 |
| Freshness | 20% | 마지막 푸시가 언제인지. 7일 이내면 만점 |
| Health | 25% | Open 이슈 비율. 버그 쌓여있으면 감점 |
| Engagement | 15% | 포크 비율. 실제로 갖다 쓰는 사람이 많은지 |
| Contemporary | 10% | 2025년 이후 생성된 레포에 가산점 |
100점 만점이고, 70점 넘으면 진짜 잘 굴러가는 레포라고 보면 돼.
예시로 감 잡아보자
레포 A: Star 50,000개, 마지막 푸시 2년 전, Open 이슈 2,000개
레포 B: Star 5,000개, 마지막 푸시 3일 전, Open 이슈 15개
Star만 보면 A가 압도적으로 좋아 보이지? 근데 RVS 돌려보면:
| 레포 | Star | RVS | 해석 |
|---|---|---|---|
| A | 50K | ~32점 | 유물. 방치된 박물관 |
| B | 5K | ~78점 | 살아있는 프로젝트. 당장 써도 됨 |
차이 확 느껴지지? B가 Star는 1/10인데 실제로 쓸만한 건 B야.
왜 이게 중요하냐면
사이드 프로젝트에 쓸 라이브러리 고를 때, 팀에서 새 도구 도입 검토할 때 Star만 보고 "아 이거 유명하니까~" 했다가 낭패 보는 경우 진짜 많거든. 레포가 죽었는지 살았는지 판단하는 눈이 있어야 삽질을 줄일 수 있어.
Python으로 바로 써먹기
from datetime import datetime, date
def rvs(stars, forks, open_issues, pushed, created):
created_date = datetime.strptime(created, "%Y-%m-%d").date()
pushed_date = datetime.strptime(pushed, "%Y-%m-%d").date()
today = date.today()
days_since_created = (today - created_date).days or 1
days_since_push = (today - pushed_date).days
momentum = min(stars / days_since_created / 10, 30)
if days_since_push <= 7: freshness = 20
elif days_since_push <= 30: freshness = 18
elif days_since_push <= 90: freshness = 14
elif days_since_push <= 180: freshness = 8
else: freshness = 1
issue_ratio = open_issues / stars if stars > 0 else 1
if issue_ratio < 0.001: health = 25
elif issue_ratio < 0.005: health = 20
elif issue_ratio < 0.01: health = 15
elif issue_ratio < 0.05: health = 8
else: health = 2
fork_ratio = forks / stars if stars > 0 else 0
engagement = min(fork_ratio * 150, 15)
year = created_date.year
if year >= 2025: contemporary = 10
elif year >= 2024: contemporary = 7
elif year >= 2022: contemporary = 3
else: contemporary = 0
return round(momentum + freshness + health + engagement + contemporary, 1)
GitHub API로 Star, fork, open_issues, pushed_at, created_at만 가져오면 끝. 복사해서 바로 써도 되고.
한 줄 요약
Star는 인기투표. RVS는 건강검진. 레포 고를 땐 건강검진표를 봐라.
다음 편에선 이 RVS 기준으로 2026년 상반기 진짜 잘 나가는 오픈소스 TOP 10 뽑아볼게 ㅎㅎ