Git 기록 속 숨겨진 실수들을 찾아주는 CLI
18개월간 방치된 Python 기반의 Git 감사 도구가 GitHub Finish-Up-A-Thon 챌린지를 계기로 재탄생함
보안 취약점(Secret Leaks), WIP 커밋(WIP Commits) 등 코드의 문제점을 분석하고 AI 기반 복구 계획(AI-Powered Remediation)을 자동 생성함
모듈식 아키텍처(Modular Architecture) 도입, 자동화된 테스트(Automated Testing) 구축, GitHub Copilot 활용으로 생산성 향상
레거시 코드의 기술 부채와 재설계 동기
본문은 18개월간 방치된 Python 스크립트가 하드코딩된 제한 사항, 미완성된 기능, 예외 처리 부재 등 심각한 기술 부채(Technical Debt)를 안고 있었음을 명확히 함. 특히, 20개 커밋 제한과 취약한 문자열 파싱은 성숙한 저장소 히스토리를 분석하는 데 치명적인 결함이었음. 이러한 문제점을 해결하고 실제 사용 가능한 CLI 도구로 만들기 위해, 단순 스크립트 작성을 넘어 시스템 엔지니어링 관점에서의 재설계가 필요했음을 강조함.
git-regret의 다차원 분석 엔진 설계
재설계된 git-regret은 다차원 분석 엔진(Multi-Dimensional Analysis Engine)을 핵심으로, 심각도(Severity)별 분류를 통해 문제점을 제시함. 높은 심각도(High Severity)로는 API 키 유출(Secret Leaks)과 연속적인 수정 커밋 체인(Fix Chains)을, 중간 심각도(Medium Severity)로는 WIP 커밋(WIP Commits)과 'Regret Keywords'를 식별함. 이러한 분석은 디커플링된 아키텍처(Decoupled Architecture)를 기반으로 하며, 저장소 스캔 엔진(Repository Scan Engine)과 UI 렌더링(UI Rendering)을 분리하여 재사용성과 확장성을 높임.
GitHub Copilot을 활용한 개발 생산성 향상
개발 과정에서 GitHub Copilot은 정규 표현식(Regex) 생성, 테스트 픽스처(Test Fixture) 작성, 인수 파싱(Argument Parsing) 등 반복적인 CLI 개발 보일러플레이트 코드 작성을 가속화하는 데 크게 기여함. 특히, AWS 키, Stripe 키 등 보안 패턴 식별을 위한 정규 표현식 컴파일과 연속된 수정 커밋을 감지하는 상태 머신(State Machine) 구현에 Copilot이 활용되었음. 이를 통해 개발자는 핵심 로직 구현에 집중할 수 있었고, 테스트 환경 구축 또한 효율적으로 진행됨.
안전한 Git 도구 테스트 환경 구축
Git 도구의 단위 테스트(Unit Test)는 실제 저장소를 변경할 위험 때문에 어려움이 따름. git-regret은 Pytest를 활용하여 임시 저장소(Temporary Repository) 생성, 가상 Git 사용자 설정, 합성 커밋 히스토리(Synthetic Commit History) 생성 기능을 갖춘 테스트 환경을 구축함. 이 격리된 테스트 환경(Isolated Testing Environment)은 보안 키 탐지, 빈 히스토리, 페이지네이션, WIP 커밋 탐지 등 다양한 시나리오에 대한 35개의 독립적인 검증(Assertions)을 가능하게 하여 코드의 안정성을 확보함.
AI 기반 자동 복구 계획 생성 기능
git-regret의 핵심 기능 중 하나는 발견된 문제점에 대한 GitHub Copilot 기반의 자동 복구 계획(Automated Remediation Plan) 생성임. 사용자가 `--copilot` 플래그를 실행하면, 도구는 탐지된 보안 유출(Secret Leak), 수정 커밋 체인(Trailing Fix Chain) 등의 정보를 바탕으로 엘리트 엔지니어 관점의 프롬프트를 생성함. 이 프롬프트는 대화형 리베이스(Interactive Rebase) 계획, `git filter-repo` 명령어, 대체 커밋 메시지 초안 등을 포함하여 개발자가 즉각적인 수정 워크플로우를 시작할 수 있도록 지원함.