다른 글 보기

재현 가능한 커밋

예전에 올렸던 이슈를 요즘 변경 사항들에 맞게(?) 업데이트했습니다. 솔직히 지금 많이 자동화되어서 꽤 만족하고 있긴 한데(…) 그래도 요즘 그 위에서 작업하면서 느낀 점을 바탕으로 다시 적었습니다. 그러다 보니 예전에 회사 일 할때도 느꼈던 걸 지금 다시 느껴서 여기 짤막하게 생각을 남겨봅니다.

어쩌면 그저 diff 방식이 잘못된 것수도 있겠지만 아무튼.


사실 너무 간단한 데 변경은 큰 경우들이 있습니다. 여기서 간단하다는 것은 작업자의 기준입니다. 지금 당장 생각나는 것으로는 아래와 같은 것들이 있습니다:

맥락을 알고 보면 사실 간단한 작업이지만, 이것은 GitHub diff로 보게되면 정말 그저 base branch와의 diff입니다. 위에 나열한 상황과 같은 맥락 정보를 담고 있지 않기 때문에 그저 매우 큰 변경사항일 뿐입니다.

그래서 예전에 이를 해소하고자 PR 설명에 “XX 정규식으로 바꾼 것이므로 YY 같이 해서 검증하실 수 있습니다” 같이 첨부했던 기억도 있습니다.[1] 사실 그 작업자를 온전히 신뢰하고 잘 했겠지, 하는 것도 방법이고 종종 그렇게 approve하기도 합니다. 하지만 요즘 Claude Code 등으로 자동으로 작업해서 PR을 올리기도 하니 스스로가 PR을 올리기 전 리뷰어가 되기도 하면서 더 이 부분이 신경 쓰이는 것 같습니다.

그래서 기계적으로 돌렸던 부분이라면 그것은 기계가 다시 실행하면서 검증할 수 있으므로 그렇게 하고 싶다는 생각이 있었습니다. 커밋을 의도적으로 잘 분리해서 단위를 만들고 검증해주는 CI는 해당 커밋의 전 커밋으로 기준을 맞추고 커밋 메시지 등을 통해 취한 액션이 무엇인지 파악한 뒤 그 액션을 실제로 취하고 그 변경사항이 커밋의 변경사항과 같은지 확인해줍니다. 그러면 사람은 그 외의 커밋들만 리뷰하면 된다는 아이디어입니다.

기대하는 사례는 RustPython의 경우 “XX 버전의 라이브러리로 업데이트 한 것이 맞는지”, “scripts/update_lib 스크립트를 실행한 것이 맞는지” 를 검증하는 것이고, 예전에 생각했던 사례는 코드를 수정할 때 리팩토링 류라면 codemod 도구(e.g., jscodeshift, ast-grep)로 코드를 업데이트 하고 변경 사항이 실제로 그것으로 인한 것임을 검증하는 것입니다.

그러면 리뷰어가 할 일은 codemod 도구를 실행할 때 주어진 인자들 뿐입니다.


  1. 정확히 어느 PR인지 몰라서 첨부는 못 하지만.. ↩︎