- 개발자들은 GitHub의 코드 리뷰 경험에 불만을 많이 느끼고 있으며, 이를 개선하기 위해 새로운 시도중
git-review라는 실험적 도구는 코드 리뷰를 브라우저 웹 인터페이스가 아닌, 로컬에서 직접 코드와 함께 다루도록 설계됨- 리뷰는 단일 커밋으로 관리되며, 코드 안에 주석처럼 리뷰 코멘트를 남기고, 리뷰어와 작성자가 이 커밋을 함께 수정해 나가는 방식
- 그러나 리뷰 중간에 코드가 수정되거나 리베이스될 경우, 충돌 처리와
--force-with-lease사용 등에서 불편함이 발생해 큰 성공을 거두지 못함 - 결국 웹 기반 리뷰로 복귀했지만, 리뷰 상태를 Git 저장소에 직접 포함시키는 발상은 여전히 매력적이며, Gerrit-style Change-Id 도입 등 향후 Git 개선과 함께 더 나은 대안이 나올 가능성이 있음
코드 리뷰 시스템에 대한 문제 인식
- 현재 많은 사람들이 GitHub의 코드 리뷰 프로세스에 대해 불만을 가지는 상황임
- 주요 문제는 스택된 풀 리퀘스트 및 인터디프 리뷰에 대한 지원 부족과 더불어,
- 리뷰 상태가 저장소 내부에 저장되지 않음
- 원격 우선 웹 인터페이스를 통한 리뷰가 필수적임
- 내가 가지고 있는 문제는 리뷰의 탈중앙화 부족과 인터페이스 비효율성임
코드 작성 및 리뷰 워크플로우의 비교
- 사람들은 코드를 작성할 때 로컬에서 에디터를 사용함
- 메모리 및 NVMe 지연이 적고, 사용자의 특이한 워크플로우에 최적화된 환경임
- 코드 리뷰 역시 소스 브랜치를 로컬로 pull 해서 작업하는 방식을 선호함
- Magit과 같은 도구를 통해 diff 뿐만 아니라 전체 코드 컨텍스트 탐색 가능함
- 테스트 실행, 코드 정의로의 이동, 리팩토링 시도 등 강력한 개발 환경 이용이 가능함
- 반면, PR에 피드백을 남기려면 브라우저에서 느린 웹 인터페이스로 이동해야 하며, 큰 diff에서는 입력 지연도 심함
이상적인 코드 리뷰 인터페이스 및 저장 구조
- 실제로 코드에 인라인으로 코멘트를 남기거나, 직접 코드를 수정하는 것이 가장 자연스러움
// CR(matklad): Hm, this check seems imprecise to me. // Shouldn't we compare `replica.view` instead of `header.view` here? if (header.view != view) return; - 데이터가 로컬 git 저장소가 아닌 원격 DB에 저장되면서, 지연과 벤더 락인 문제도 발생함
git-review의 아이디어와 실제 경험
git-review의 아이디어는 다음과 같음:- 코드 리뷰가 PR 브랜치 최상단의 단일 커밋으로 이루어짐
- 해당 커밋에 특수 마커가 달린 코드 코멘트가 추가됨
- 리뷰어와 작성자가 이 커밋을 번갈아 가며 수정하며 push --force-with-lease에 기반한 협업이 이뤄짐
- 모든 댓글이 해결됨 표시(//? resolved) 되고 리뷰 종료 시 리버트 커밋 추가로 기록이 남음
- 아이디어는 단순하고 실용적이지만, 실제로는 다음과 같은 문제 발생
- 리뷰 중 코드 수정 시 하위 커밋이나 신규 커밋에서 코멘트와의 충돌이 잦음
- force-push 과정에서 협업 마찰과 작업 복잡도 증가
- 코드의 변경 이력과 리뷰 진행 간의 불일치 및 병합 충돌 관리가 어렵게 됨
새로운 변화와 미래 가능성
- 앞으로 Git upstream에서 Gerrit 스타일의 Change-Id가 도입될 가능성이 있음
- 커밋별 수정 이력 추적이 손쉬워져 인터디프 리뷰 지원이 확대될 전망임
- 하지만
git-review방식과는 일부 충돌이 예상됨 - 새로운 Change-Id 구조에서는 커밋 자체에 리뷰 코멘트 추가 등의 색다른 접근이 가능해질 수 있음
결론 및 참고할 만한 시스템 소개
- 결국 현재는 웹 인터페이스 기반 코드 리뷰로 다시 돌아온 상황임
- 보다 나은 솔루션에 대한 필요성은 여전히 남아 있음
- 참고할 만한 관련 시스템 및 도구 소개
- Fossil: 모든 정보를 저장소 내부에 보관하는 SCM 시스템
- NoteDb: Gerrit의 리뷰 상태 저장 이력을 git으로 통합
- git-bug: 이슈 정보를 git에 저장
- git-appraise: 리뷰 정보를 git 자체에 보관
- prr: 에디터 내에서 GitHub API와 연동해 리뷰 인터페이스 구현
- How Jane Street Does Code Review: 더 나은 현실의 예시 소개
- git-pr: PR 워크플로우 전체를 git의 네이티브 기능으로 대체하는 프로젝트
마무리
- 아직 완벽한 해결책은 없는 상황이며, 더 나은 개발자 경험을 위한 시도가 계속되고 있음
- 앞으로의 발전 방향에 많은 기대감이 존재함