단계 | 담당 함수/파일 | 핵심 코드(요약) | 설명 |
---|---|---|---|
① GitHub API 호출 | overview/utils.py → fetch_detailed_commit_history |
python<br>response = requests.post("<https://api.github.com/graphql>", …)<br>commit_history = [edge["node"] for edge in edges]<br>…<br>if save_to_db:<br> save_commits_to_db(owner, repo, filtered_commits) |
GraphQL API로 최대 count*3 개의 커밋을 받아서 Python 측에서 username 필터링 후 반환.save_to_db=True (기본값)이면 DB 저장 함수 호출. |
② DB 저장 | overview/utils.py → save_commits_to_db |
python<br>repository, _ = Repository.objects.get_or_create(owner=owner, name=repo)<br>commit, created = Commit.objects.get_or_create(…)<br>if created:<br> fetch_and_save_commit_files(owner, repo, sha, commit) |
Repository , Commit , CommitFile 3 테이블에 정보 insert.새로운 커밋일 때만 파일 상세를 한 번 더 GET /repos/{owner}/{repo}/commits/{sha} 로 불러 저장. |
③ REST 엔드포인트 | overview/views.py → save_commits_api |
POST /overview/api/save-commits/ 가 들어오면 fetch_detailed_commit_history(save_to_db=True) 실행 |
확장 프로그램이 먼저 저장만 하도록 호출할 때 사용. |
④ 확장 프로그램 트리거 | gitFolio/background/background.js → analyzeRepository |
js<br>const response = await fetch( ${backendUrl}/overview/api/generate/, { … }) |
크롬 확장에서 “개요 생성”·사이드패널 등 모든 분석 요청은 결국 위 generate API를 호출 → ①~② 과정을 자동 수행. |
분석 파이프라인
views.generate_overview_api
→
python
commits = fetch_detailed_commit_history(..., save_to_db=True) # ①-②
analysis = analyze_commit_messages(commits, owner, repo, username, save_to_db=True)
analyze_commit_messages
CommitAnalysis
테이블에 캐싱(있으면 update_or_create).프론트엔드로 전달
format_analysis_md
로 Markdown 변환 후 JSON {analysis: …}
형태로 응답.popup.js
또는 sidepanel.js
에서 marked.js
로 렌더링, 복사·저장·다운로드 기능 제공.저장된 커밋 목록 조회
/overview/api/commits/?owner=…
views.commit_list_api
utils.get_stored_commits
시나리오 | GitHub API 재호출? | DB 커밋 재사용 | 기존 분석 재사용 |
---|---|---|---|
팝업/사이드패널에서 “개요 생성” 버튼 재클릭 | ✅ 항상 fetch_detailed_commit_history 실행(API → 저장도 다시 수행) |
🔄 기존 커밋이 있으면 get_or_create 때문에 중복 insert 안 됨(차이는 additions/deletions 변동 시 새 row 생김) |
✅ CommitAnalysis 가 이미 있으면 재분석 건너뜀 (analyze_commit_messages 내부 캐시) |
커밋 목록 보기만 호출 (commit_list_api ) |
❌ 먼저 DB 조회 → 데이터 있으면 API 호출 안 함 | ✅ DB 데이터 그대로 직렬화 | - |
수동 저장만 실행 (save_commits_api ) |
✅ API 호출 | ✅ | 옵션에 따라 analyze_commit_messages 실행 → 분석 캐시 |
정리하면 “커밋 저장”은 항상 발생하지만, 이미 저장된 SHA는 덮어쓰지 않고 건너뜁니다. GitHub API 트래픽을 완전히 회피하진 못하고, - 단지 분석 결과는 캐싱됩니다.
bash
# 1) 가상환경 활성화
.\\venv\\Scripts\\activate # Windows
# 또는
source venv/bin/activate # macOS, Linux
# 2) Django shell 진입
python manage.py shell
python
from overview.models import Repository, Commit, CommitAnalysis
repo = Repository.objects.get(owner="myUser", name="myRepo")
Commit.objects.filter(repository=repo).count()
CommitAnalysis.objects.filter(repository=repo, username="myUser").exists()