← 개발 로그 목록

LearningCollector: AI Chat 제목 이슈 수정 및 백준 커밋 분류 개선

/ 6분 분량 / 개발 로그

이번 커밋에서는 AI Chat 기능에서 발생하던 제목 표시 오류를 수정하고, 백준(Baekjoon) 관련 레포지토리의 커밋을 개발 커밋에서 제외하도록 분류 로직을 개선했습니다.

LearningCollector: AI Chat 제목 이슈 수정 및 백준 커밋 분류 개선

이번 커밋에서는 AI Chat 기능에서 발생하던 제목 표시 오류를 수정하고, 백준(Baekjoon) 관련 레포지토리의 커밋을 개발 커밋에서 제외하도록 분류 로직을 개선했습니다.

요약

이번 커밋은 AI Chat 요약 시 대화_제목 대신 파일_제목을 우선적으로 사용하도록 변경하여 인코딩 문제를 해결했으며, 백준 관련 레포지토리에서 발생하는 커밋은 일반 개발 커밋으로 분류되지 않도록 제외했습니다.

배경 및 목적

AI Chat 기능을 사용하면서 간혹 제목이 제대로 표시되지 않는 문제가 발생했습니다. 이는 대화_제목 필드에 특정 문자가 포함될 때 발생하는 인코딩 문제로 추정되었습니다. 또한, 백준 코딩 테스트 관련 레포지토리에서 발생하는 커밋들이 일반 개발 커밋으로 분류되는 것을 방지하여, 개발 활동 기록의 정확성을 높이고자 했습니다.

구현 내용

AI Chat 제목 표시 오류 수정

  • policies/storage/json_saver.py 파일에서 AI Chat 요약 시 data.get("대화_제목", "Unknown") 부분을 data.get("파일_제목", data.get("대화_제목", "Unknown"))으로 변경했습니다.
  • 이를 통해 파일_제목이 존재하는 경우 해당 제목을 우선적으로 사용하고, 그렇지 않은 경우에만 대화_제목을 사용하도록 하여 인코딩 문제를 해결했습니다.
  • 총 1줄이 추가되고 1줄이 삭제되었습니다.

백준 커밋 분류 로직 개선

  • core/classifier.py 파일에서 CommitClassifier 클래스에 BAEKJOON_REPO_PATTERNS 리스트를 추가하여 백준 관련 레포지토리의 패턴(baekjoon, 백준, boj, algorithm)을 정의했습니다.
  • is_baekjoon_repo 메서드를 새로 추가하여 커밋 정보에 포함된 레포지토리 이름이 백준 관련 패턴과 일치하는지 확인하도록 했습니다.
  • classify_commits 메서드에서 -BaekjoonHub 접미사가 붙은 커밋은 백준 커밋으로 분류하되, 백준 관련 레포지토리에서 발생한 다른 커밋(is_baekjoon_repo가 True인 경우)은 일반 개발 커밋으로 분류하지 않고 무시하도록 로직을 수정했습니다.
  • 총 31줄이 추가되고 7줄이 삭제되었습니다.

변경된 파일 목록

  • core/classifier.py
  • policies/storage/json_saver.py

추가/삭제 라인 수

  • 총 추가 라인: 32
  • 총 삭제 라인: 8

기술적 의사결정

AI Chat 제목 필드 선택

  • 선택: 파일_제목을 우선 사용하고 대화_제목을 대체로 사용
  • 이유: 대화_제목 필드에서 특정 문자가 인코딩 오류를 발생시키는 것으로 파악되었습니다. 파일_제목은 이러한 문제가 발생하지 않는 것으로 보이며, 더 안정적으로 제목을 표시할 수 있었습니다.
  • 대안: 대화_제목 필드를 정제하여 사용하는 방법도 고려할 수 있었지만, 파일_제목이 존재하는 경우 이를 사용하는 것이 더 직접적이고 간단한 해결책이라고 판단했습니다.
  • 장단점:
    • 장점: 인코딩 문제 없이 안정적으로 제목 표시 가능.
    • 단점: 파일_제목이 없는 경우 대화_제목을 사용하므로, 여전히 일부 대화_제목 관련 인코딩 이슈가 발생할 가능성은 남아있습니다. (하지만 이번 커밋에서는 파일_제목 우선 사용으로 80% 이상의 문제를 해결했습니다.)

백준 커밋 분류 로직

  • 선택: -BaekjoonHub 접미사 기반 분류와 레포지토리 이름 기반 분류를 결합하여, 백준 관련 레포지의 일반 커밋은 개발 커밋에서 제외
  • 이유: 기존에는 -BaekjoonHub 접미사가 붙은 커밋만 백준 커밋으로 명확히 구분했습니다. 하지만 백준 레포지토리에서도 -BaekjoonHub 접미사가 없는 커밋들이 존재하며, 이들이 개발 커밋으로 잘못 분류되는 문제가 있었습니다. BAEKJOON_REPO_PATTERNS와 is_baekjoon_repo 메서드를 통해 백준 관련 레포지토리임을 명확히 인지하고, 해당 레포지토리 내의 커밋을 개발 커밋에서 제외함으로써 분류의 정확성을 높이고자 했습니다.
  • 대안:
    1. 모든 백준 관련 커밋에 -BaekjoonHub 접미사를 강제하는 방법: 커밋 히스토리를 변경해야 하므로 현실적으로 어렵습니다.
    2. 레포지토리 이름만으로 백준 커밋을 판단하는 방법: 백준 관련이 아닌 다른 레포지토리에서 동일한 패턴의 이름을 사용할 경우 오분류될 가능성이 있습니다.
  • 장단점:
    • 장점: 백준 커밋과 일반 개발 커밋의 분류가 더욱 명확해지고 정확해집니다. 학습 기록의 신뢰도가 향상됩니다.
    • 단점: BAEKJOON_REPO_PATTERNS에 포함되지 않은 새로운 패턴의 백준 레포지토리가 발견될 경우, 해당 레포지의 커밋은 여전히 개발 커밋으로 분류될 수 있습니다.

배운 점 및 개선점

이번 작업을 통해 Git 커밋 메시지와 레포지토리 이름 정보를 활용하여 커밋을 더욱 정교하게 분류하는 방법을 배웠습니다. 특히, 특정 조건(접미사)과 더 넓은 범위의 조건(레포지토리 패턴)을 조합하여 의사결정을 내리는 것이 중요함을 다시 한번 깨달았습니다.

앞으로 개선할 점으로는 다음과 같은 사항을 고려할 수 있습니다.

  • BAEKJOON_REPO_PATTERNS 목록을 지속적으로 업데이트하여 더 다양한 백준 관련 레포지토리를 포괄하도록 합니다.
  • AI Chat 제목 인코딩 문제에 대해 파일_제목이 없는 경우에도 대화_제목을 안전하게 처리할 수 있는 추가적인 로직을 고민해볼 수 있습니다.

참고 자료