Star가 높다고 좋은 레포? 솔직히 아니지

GitHub에서 뭐 찾을 때 Star 순으로 정렬하지? 나도 그랬어. 근데 생각해보면 Star는 그냥 북마크야. "나중에 볼게요" 누른 거랑 똑같단 말이지.

진짜 중요한 건 지금도 활발하게 돌아가고 있냐는 거잖아. 그래서 내가 쓰는 기준이 RVS(Repo Vitality Score)야. 5가지 축으로 레포의 실제 체력을 본다.

RVS — 5축 평가

가중치뭐 보는 거냐면
Momentum30%하루 평균 Star 증가량. 꾸준히 관심 받는지
Freshness20%마지막 푸시가 언제인지. 7일 이내면 만점
Health25%Open 이슈 비율. 버그 쌓여있으면 감점
Engagement15%포크 비율. 실제로 갖다 쓰는 사람이 많은지
Contemporary10%2025년 이후 생성된 레포에 가산점

100점 만점이고, 70점 넘으면 진짜 잘 굴러가는 레포라고 보면 돼.

예시로 감 잡아보자

레포 A: Star 50,000개, 마지막 푸시 2년 전, Open 이슈 2,000개

레포 B: Star 5,000개, 마지막 푸시 3일 전, Open 이슈 15개

Star만 보면 A가 압도적으로 좋아 보이지? 근데 RVS 돌려보면:

레포StarRVS해석
A50K~32점유물. 방치된 박물관
B5K~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 뽑아볼게 ㅎㅎ