Title:
버전 관리의 베스트 프랙티스
|
edited by
Youngrok Pak
at
11 years ago.
<h2>버전 관리 정책을 만들 때 고려해야 할 원칙</h2>
<ul>
<li>trunk의 소스코드는 테스트를 통과하며 언제든 deploy 가능한 상태를 유지하는 것이 좋다.</li>
<li>커밋되지 않은 코드, 커밋되었으나 trunk에 병합되지 않은 코드, trunk에 있으나 deploy되지 않은 코드는 모두 재고(work in progress)로, 줄일 수록 좋다.</li>
<li>deploy는 언제든, 누구든 쉽게 할 수 있는 일이어야 한다.</li>
</ul>
<h2>용어 정리</h2>
<p>간결한 서술을 위해 몇 가지 용어를 축약해서 사용한다.</p>
<ul>
<li><q>버전 관리</q> Version Control, Software Configuration Management 등.</li>
<li><q>trunk</q> HEAD, trunk, master를 통칭</li>
<li><q>deploy</q> 서버에 코드를 배치하고 동작시키는 것. 혹은 배포판을 빌드해서 배포하는 것(distribute).</li>
</ul>
<h2>코드 수정 방법</h2>
<h3>일반적인 수정 사항</h3>
<p>새로운 기능을 추가하거나, 버그를 수정하는 등의 일반적인 수정 사항이고, production에 바로 deploy해도 별 문제가 없는 것으로 추정되는 변경사항의 경우.</p>
<ol>
<li>trunk에서 최신 소스코드 가져오기 (svn update, git pull, ...)</li>
<li>코드 수정, 리팩터링, 테스트</li>
<li>trunk에 커밋 (svn commit, git add & git commit & git push)</li>
</ol>
<h3>모험적인 수정 사항</h3>
<p>수정된 코드가 제대로 동작하지 않을 가능성이 있거나, 다른 기능을 망가뜨릴 가능성이 있는 것으로 추정되는 경우. 그 외에 여러 가지 개발자가 코드가 안전한지 확신할 수 없는 경우.</p>
<ol>
<li>trunk에서 최신 소스코드 가져오기</li>
<li>브랜치 만들기</li>
<li>브랜치에서 커밋. 중앙 저장소에 통합(git push)할지는 그 때 그 때 판단.</li>
<li>작업하면서 주기적으로 trunk에서 최신 변경사항 통합(git pull)</li>
<li>테스트 서버에서의 deploy 등으로 개발자가 확신을 가질 수 있는 상태까지 코드 안정화</li>
<li>코드가 안정화되면 trunk에 병합(mere)</li>
</ol>
<h2>Deploy (or Distribute)</h2>
<ol>
<li>빌드 머신에서 trunk의 최신 소스 가져오기</li>
<li>빌드 & 자동 테스트</li>
<li>필요한 수동 테스트</li>
<li>Deploy</li>
</ol>
<p> </p>
<h2>참고자료</h2>
<ul>
<li><a href="http://www.jamesshore.com/Agile-Book/version_control.html">http://www.jamesshore.com/Agile-Book/version_control.html</a></li>
<li><a href="http://www.noop.nl/2008/05/the-single-best.html">http://www.noop.nl/2008/05/the-single-best.html</a></li>
<li><a href="http://www.accurev.com/whitepaper/pdf/SCMBranchingModels1.pdf">http://www.accurev.com/whitepaper/pdf/SCMBranchingModels1.pdf</a></li>
<li><a href="http://blogs.starcio.com/2007/09/top-10-tips-on-version-control-for.html">http://blogs.starcio.com/2007/09/top-10-tips-on-version-control-for.html</a></li>
<li><a href="http://c2.com/cgi/wiki?CostOfBranching">http://c2.com/cgi/wiki?CostOfBranching</a></li>
</ul>
<p> </p>
<p style="padding-left: 30px;">