📋
핵심 요약
GitHub Star는 북마크일 뿐 — 진짜 살아있는 레포는 RVS(Repo Vitality Score) 5축(Momentum 30%·Freshness 20%·Health 25%·Engagement 15%·Contemporary 10%)으로 가려낸다.
Star 50,000개지만 2년째 방치된 레포(RVS ~32점)보다, Star 5,000개에 3일 전 푸시·Open이슈 15개인 레포(RVS ~78점)가 실제로 더 쓸만하다.
GitHub API의 Star·fork·open_issues·pushed_at·created_at 값만 있으면 RVS 계산 함수를 바로 돌릴 수 있다(본문 Python 코드 포함).

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 뽑아볼게 ㅎㅎ

참고 자료

  • GitHub 공개 API — Star, Fork, Open Issues, Push 이력 등 레포 활동 데이터
  • 본문에 포함된 RVS 계산 Python 함수 — GitHub API 값만 넣으면 바로 실행 가능한 코드