매일 모든 개발자가 메인라인에 커밋하게 하라.(Everyone Commits To the Mainline Every Day)

통합은 무엇보다도 소통에 관련된 것이다. 통합은 개발자들이 다른 개발자들에게 자신들이 만든 변경을 알려 줄 수 있도록 한다. 잦은 의사소통은 변경내역이 개발될 때 마다 사람들이 얼른 알수 있게 한다.

개발자가 메인라인에 커밋을 하기 위한 사전 전제 사항은 개발자가 자신들의 코드를 올바르게 빌드 할 수 있어야 한다는 것이다. 물론 빌드 테스트 통과 까지 포함해서 얘기다. 여느 커밋 사이클(처럼)에서 개발자는 먼저 메인라인과 매치시키기 위해 자신들의 워킹카피 업데이트를 수행한다. 메인라인과 충돌을 해결한 후에 개발자 머신에서 빌드를 수행한다. 빌드가 통과되어야 메인라인에 커밋할 수 있게 된다.

이러한 일들을 자주 수행함으로써, ‘두 개발자 사이에 충돌이 없음’을  보다 빨리 확인할 수 있다. 문제를 빨리 해결하기 위해서는, 문제를 빨리 발견해야 한다. 매일 몇 시간마다 커밋하는 개발자들간 발생하는 충돌은 커밋이 수행되는 그 몇 시간 안에 감지된다. 해당 시점에서 아직 많은 일들이 꼬이지는 않았을 것이므로 쉽게 충돌을 해결할 수 있다. 몇 주간 감지되지 못한 충돌은 해결하는데 매우 어려울 것이다.

워킹카피를 업데이트 할 때마다 빌드를 한다는 사실은 개발자들이 텍스트 충돌 뿐만 아니라 컴파일 충돌을 감지한다는 것을 의미한다. 빌드에서 자체테스팅이 되기 때문에 코드 수행 단계에서의 충돌 또한 감지된다. 코드 수행 시의  충돌은 소스 코드에서 오랫동안 발견되지 않는 경우 특히 더 처리하기 어려운 버그이다. 커밋 수행 간에 오직 몇시간의 변경만이 있으므로 문제가 잠재할 수 있는 여지는 그 만큼 줄게 된다. 게다가 많은 변경이 발생하지 않았으므로 버그를 찾는데 도움이 되는 diff-debugging을 사용할 수 있다.

내 경험상 원칙은 모든 개발자들이 매일 저장소에 커밋을 해야 한다는 것이다. 실제로는 그 이상으로 개발자들이 커밋을 하면 할수록 효과적이다. 커밋을 더 자주 할 수록 충돌 에러가 발생할 여지가 적어지며 더 신속하게 충돌을 해결할 수 있다.

잦은 커밋은 개발자들이 그들의 일을 몇시간 단위의 일감으로 분해할 수 있도록 한다. 이는 진행 상항을 추적할 수 있도록 하여, 현재 진행 상황 파악을 용이하게 한다. 종종 사람들은 초기에는 몇시간만에 의미있는 뭔가를 하지 못한다고 느끼는데, 우리는 멘토링과 훈련이 도움을 줄 수 있다는 것을 알게되었다.

메인글로 돌아가기

원문보기
Continuous Integration

본 포스트는 Martin Fowler 선생께서  쓴 글을 번역 게재한 글이다. 선생은 본인의 글을 직접 게재하는 것을 허용하지는 않지만, 번역은 허용하고 있다.
원문에도 한국어 번역글로 등록이 되어있는데, 이 글보다 몇 년 앞서 더 훌륭한 솜씨로 한글로 번역해 놓은 글이 있으니 참조하면 좋을 듯 하다. (황상철님의 실용주의이야기 의 ‘지속적인 통합‘)

댓글 남기기