LearningCollector: LICENSE 추가, README 최신화, 저장소 설명/토픽 설정
LearningCollector 프로젝트에 실제로는 없었던 MIT LICENSE 파일을 추가하고, 그동안 쌓인 기능 변화를 반영해 README를 전면 갱신한 PR입니다.
요약
이번 PR은 코드 로직을 건드리는 대신 문서 정비에 집중했습니다. README에 라이선스가 MIT라고 명시돼 있었지만 실제 LICENSE 파일은 존재하지 않았던 걸 발견하고 파일을 새로 추가했고, 그 김에 README 전체를 지금 프로젝트 상태에 맞게 다시 썼습니다. 백준 문제풀이 수집 기능 비활성화, PR 수집 기능 추가, 조직 레포 지원, 콘텐츠 기반 태그 등 그동안 실제 코드에는 반영됐지만 문서에는 미처 옮기지 못했던 변경사항들을 정리한 셈입니다. 커밋 1개로 구성된 단순한 PR이고, 2026년 7월 8일에 생성되어 3분 만에 바로 병합됐습니다.
배경 및 목적
README 맨 아래에는 "MIT License"라는 문구가 있었는데, 정작 저장소 루트에는 LICENSE 파일이 없었습니다. 오픈소스로 공개하는 이상 라이선스 문구만 있고 실제 파일이 없는 건 앞뒤가 안 맞는 상태였죠.
여기에 더해 README 자체가 프로젝트의 예전 모습을 담고 있었습니다. 원래는 백준 풀이 수집, GitHub 커밋 수집, AI 채팅 기록 수집 세 가지 축으로 소개돼 있었는데, 실제로는 백준허브 연동 서비스가 종료되면서 백준 수집 기능이 비활성화된 지 오래고, 대신 PR 수집 기능이 새로 생겼고, 개인 레포뿐 아니라 조직 레포까지 조회하도록 확장돼 있었습니다. 코드는 앞서갔는데 문서가 못 따라간 상황을 정리할 필요가 있었습니다.
구현 내용
LICENSE 파일 추가
표준 MIT 라이선스 텍스트를 담은 LICENSE 파일을 21줄 새로 추가했습니다. Copyright 연도는 2026년, 저작자는 저장소 소유자인 cjang3285로 명시했습니다.
README 전면 개편
변경 규모가 꽤 컸습니다(+69/-159줄). 주요 내용은 다음과 같습니다.
수집 대상 재정리: 기존에 있던 백준 문제풀이 항목을 지우고, GitHub PR 수집 항목을 새로 추가했습니다. PR은 "진행 중인 PR은 나중에 바뀔 수 있어 제외"하고 병합되었거나 닫힌 것만 수집한다는 설계 의도도 함께 명시했습니다.
- **GitHub 커밋**: 개인 레포는 물론, 소속된 조직(organization) 레포까지 모든 브랜치에서 커밋 수집
- **GitHub PR**: 병합되었거나 닫힌 Pull Request (진행 중인 PR은 나중에 바뀔 수 있어 제외)
- **AI 채팅 기록**: Claude, ChatGPT, Gemini 대화 마크다운 파일
백준 수집이 비활성화된 사실도 숨기지 않고 명시적으로 안내했습니다.
백준 문제풀이 수집 기능은 백준허브 연동 서비스 종료로 현재 비활성화되어 있습니다 (
core/github_collector.py에 주석 처리, 필요 시 복구 가능).
콘텐츠 기반 태그 기능 문서화: 카테고리별 고정 태그를 붙이던 방식에서, AI가 초안 내용을 직접 보고 구체적인 태그를 붙이는 방식으로 바뀐 걸 반영했습니다.
프로젝트 구조 갱신: classifier.py(커밋 분류)를 제거하고, groq_client.py, ai_client.py, blog_api.py, collection_rules.py 등 실제로 추가된 파일들을 트리에 반영했습니다. data/ 디렉토리 구조도 prs/ 폴더가 생기고 baekjoon/은 레거시로 표시하는 식으로 현행화했습니다.
작동 원리 섹션 압축: 기존에는 GraphQL API의 제약사항이나 Gemini API 모델명, retry 로직 세부사항까지 코드 예시와 함께 장황하게 설명돼 있었는데, 이번에 훨씬 간결하게 정리했습니다. 대신 실제로 바뀐 동작 방식 - 레포별 pushedAt을 먼저 확인해 변경 없는 레포는 브랜치/커밋 조회 자체를 생략한다거나, 레포당 요청 1번으로 브랜치+커밋을 함께 조회하며 레포 간 조회는 병렬 실행한다는 점 - 을 새로 추가했습니다.
중복 제거 전략 표로 정리: 기존에는 소스별로 섹션을 나눠 설명했는데, 이걸 표 하나로 압축했습니다.
| 소스 | 중복 키 |
|---|---|
| 개발 커밋 | 커밋 SHA |
| PR | PR의 GraphQL 전역 ID |
| AI Chat | 원본 마크다운 파일명 |
| Draft | 소스 JSON 파일명 |
문제 해결 섹션 삭제: exec_date.log 관련 트러블슈팅이나 Gemini API 한도 초과 대응법 등 예전에 자세히 적어뒀던 "문제 해결" 섹션을 통째로 들어냈습니다. 지금은 관련 로직이 안정화되면서 굳이 문서에 남겨둘 필요가 없다고 판단한 것으로 보입니다.
관련 프로젝트 섹션 삭제: BaekjoonHub, Claude Exporter 등을 소개하던 마지막 섹션도 제거하고, 라이선스 문구를 실제 LICENSE 파일 링크로 교체했습니다.
.env.example 정리
더 이상 쓰지 않는 GROQ_API_KEY 항목을 제거했습니다. api/groq_client.py는 코드베이스에 폴백용으로 남아있지만 실제로는 미사용 상태라, 환경변수 예시에서까지 사용자에게 요구할 필요는 없다고 정리한 것으로 보입니다.
배운 점 및 개선점
코드는 계속 바뀌는데 문서는 그 속도를 못 따라간다는 걸 다시 느낀 PR이었습니다. 특히 "README에 라이선스가 명시돼 있지만 실제 파일은 없다"는 건 사소해 보여도 오픈소스 프로젝트에서는 꽤 중요한 문제라, 이번 기회에 바로잡았습니다.
문서 갱신 작업을 하면서 오래된 트러블슈팅 섹션이나 관련 프로젝트 소개처럼, 당장은 유용했지만 시간이 지나며 가치가 떨어진 내용을 과감히 쳐내는 것도 README 관리의 일부라는 걸 느꼈습니다. 앞으로는 기능이 추가되거나 비활성화될 때마다 README를 바로바로 갱신하는 습관을 들이는 게 좋을 것 같습니다.