image.png

image.png

1. 커밋을 가져와 DB에 저장하는 위치

단계 담당 함수/파일 핵심 코드(요약) 설명
① GitHub API 호출 overview/utils.pyfetch_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.pysave_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.pysave_commits_api POST /overview/api/save-commits/ 가 들어오면 fetch_detailed_commit_history(save_to_db=True) 실행 확장 프로그램이 먼저 저장만 하도록 호출할 때 사용.
④ 확장 프로그램 트리거 gitFolio/background/background.jsanalyzeRepository js<br>const response = await fetch(${backendUrl}/overview/api/generate/, { … }) 크롬 확장에서 “개요 생성”·사이드패널 등 모든 분석 요청은 결국 위 generate API를 호출 → ①~② 과정을 자동 수행.

2. 저장된 커밋 데이터를 어떻게 활용하는가

  1. 분석 파이프라인

    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)
    
    
  2. 프론트엔드로 전달

  3. 저장된 커밋 목록 조회


3. 캐시(데이터베이스) 재사용 여부

시나리오 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 트래픽을 완전히 회피하진 못하고, - 단지 분석 결과는 캐싱됩니다.


4. 명령 프롬프트(터미널)에서 확인-테스트 방법

bash

# 1) 가상환경 활성화
.\\venv\\Scripts\\activate           # Windows
# 또는
source venv/bin/activate         # macOS, Linux

# 2) Django shell 진입
python manage.py shell

(a) 저장된 커밋 갯수 확인

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()

(b) 수동으로 저장/분석 트리거