프로젝트 배경
Githru의 핵심 엔진인 CSM(Commit Summary Map)은 Git 커밋 히스토리를 분석하고 시각화하는 데이터 구조입니다. 대규모 저장소 지원과 복잡한 Git 워크플로우(multi-parent merge, squash merge) 처리를 위해 엔진 개선이 필요했습니다.
| 항목 | 비교 | 값 (% 개선) |
|---|---|---|
| 초기 로딩 | 60 % 개선 | |
| 렌더링 성능 | 25.96 % 개선 | |
| 스크롤 속도 | 80 % 개선 |
주요 구현 내용
1. 페이지네이션 기반 CSM Dictionary Builder 구현
대규모 저장소를 지원하기 위해 메모리 효율적인 페이지네이션 로직을 구현했습니다(210줄 추가). 청크 단위 데이터 처리로 메모리 사용량을 최적화했으며, 점진적 데이터 로딩으로 초기 로딩 시간을 단축했습니다. Dictionary 구조를 설계하여 빠른 커밋 조회 성능을 확보했습니다.
- 전체 커밋 로드
- 청크 분할
- Dictionary 빌드
- 점진적 렌더링
2. Multi-parent Merge 지원
포괄적인 테스트 케이스를 작성하여 270줄의 테스트 코드를 추가했습니다. Octopus merge(3개 이상의 부모) 시나리오를 테스트하고, 복잡한 브랜치 병합 패턴을 검증했습니다. Edge case 처리 및 안정성을 확보하여 테스트 커버리지를 대폭 향상시켰습니다.
3. Squash Merge 로직 개선
Squash merge 감지 및 처리 로직을 고도화했습니다(60줄 수정). 커밋 히스토리 압축 시 메타데이터를 보존하도록 개선했으며, 주석 및 문서화 개선으로 유지보수성을 향상시켰습니다. 병합 전략에 따른 분기 처리도 최적화했습니다.
4. 코드 구조 리팩토링
CSM 빌더 코드의 가독성을 개선했습니다(40줄 리팩토링). 133줄 개선, 50줄 삭제로 코드를 간소화했으며, 함수 분리 및 책임 명확화를 수행했습니다. 매직 넘버를 제거하고 상수화했으며, 변수명 및 함수명을 개선하여 의도를 명확하게 했습니다.
5. Parent Indexing 최적화
CSM parent indexing 상수를 단순화했습니다(7줄 추가, 10줄 삭제). mergedIntoStem을 mergedIntoBaseStem으로 명확화하고(15줄 수정), 인덱싱 로직을 단순화하여 버그 가능성을 감소시켰습니다. 코드 이해도가 향상되어 신규 개발자 온보딩이 개선되었습니다.
기술적 성과
확장성
수만 개 커밋의 대규모 저장소 처리 가능
안정성
270줄 테스트 코드로 복잡한 시나리오 검증
성능
페이지네이션으로 메모리 사용량 최적화
유지보수성
코드 구조 개선 및 명확한 네이밍
사용 기술
- TypeScript
- Git 내부 구조 분석
- 자료구조 설계 (Dictionary, Tree)
- Jest 테스트 프레임워크
- 알고리즘 최적화
측정 가능한 결과
| 항목 | 비교 | 값 (줄) |
|---|---|---|
| 엔진 코드 | 600 줄 | |
| 테스트 코드 | 270 줄 | |
| 삭제 코드 | 50 줄 |
총 600줄 이상의 엔진 코드를 작성하고 개선했습니다. 270줄의 테스트 코드로 안정성을 확보했으며, 페이지네이션 적용으로 메모리 사용량을 감소시켰습니다. 복잡한 Git 워크플로우 지원을 확대했고, 대규모 Git 데이터의 초기 로딩을 약 60% 단축했습니다. 렌더링 성능은 25.96% 향상되었으며, 커밋 리스트 스크롤 속도는 80% 개선되었습니다.