| 데이터 수집 | Node.js + google-play-scraper |
| 스케줄링 | GitHub Actions (매일 1회) |
| 데이터 저장 | JSON 파일 (GitHub 저장소 커밋) |
| 웹사이트 | GitHub Pages (HTML + JS + Chart.js) |
| 비용 | 0원 (전부 무료) |
| 항목 | 주기 | 이유 |
|---|---|---|
| 기본 정보 (별점, 순위, 버전 등) | 매일 | 변화 추적의 핵심 |
| 리뷰 | 3일에 1회 | GitHub Actions 한도 절약 |
| 조건 | 설정 | 구분 |
|---|---|---|
| 요청 간 딜레이 | 2~5초 랜덤 | 필수 |
| 배치 처리 | 10~20개씩, 배치 간 10~30초 대기 | 필수 |
| 재시도 | 최대 3회, 지수 백오프 (5초->15초->45초) | 필수 |
| 타임아웃 | 요청당 30초, 전체 120분 | 필수 |
| 부분 실패 허용 | 실패율 30% 이상 시 전체 중단 | 필수 |
| 429 에러 자동 중단 | 5회 연속 시 스크래핑 중단 | 필수 |
| 로그 기록 | 성공/실패/건너뛴 수 + 실패 사유 | 필수 |
| User-Agent 설정 | 일반 브라우저 User-Agent 사용 | 권장 |
| 실행 시간 분산 | 시작 시 0~10분 랜덤 대기 | 권장 |
| 에러 | 의미 | 처리 |
|---|---|---|
| 404 | 앱 삭제됨 | "삭제됨" 기록, 재시도 안 함 |
| 429 | 속도 제한 | 60초 대기 후 재시도 |
| 503 | 서버 에러 | 30초 대기 후 재시도 |
| TIMEOUT | 응답 없음 | 15초 대기 후 재시도 |
| 변경 감지 방법 | URL 비교 |
| 변경 시 표시 | img 태그로 이전/현재 이미지 나란히 표시 (before/after) |
| 이미지 저장 | 안 함 (URL만 기록, 저장 공간 0) |
| GitHub 이메일 | Actions 실패 시 자동 발송 | 설정됨 |
| 웹사이트 상태 표시 | 마지막 수집 시간 + 경과 경고 | 설정됨 |
| 탭 | 항목 |
|---|---|
| 기본 정보 | 패키지명, 카테고리, 가격, 인앱구매, 등급, 크기, 버전, 출시일, 업데이트, 최소Android, 짧은/전체 설명, 업데이트노트, 권한 |
| 평점/리뷰 | 별점, 별점분포, 리뷰수, 다운로드, 리뷰 20개씩 (최신순/도움순), 더보기 버튼, 개발자 답변 |
| 개발자 | 이름, 이메일, 웹사이트, 주소 |
| 미디어 | 아이콘, 스크린샷 |
| 순위/마켓 | 카테고리순위, 인기차트, 인기급상승, 에디터스초이스, 유사앱 |
| 변화 내역 | 오늘 변화 테이블 (이전값 -> 현재값) |
| 추세 그래프 | 별점/리뷰수/다운로드/순위 꺾은선, 별점분포 누적막대, 기간 선택 (7/30/90일/전체/날짜 범위) |
| 변경 히스토리 | 날짜별 타임라인, 이미지 before/after, 기간 선택 |