Team Foundation Server2006. 8. 31. 11:11

지금 제가 참여하고 있는 프로젝트에서는 Microsoft Team Foundation Server를 사용하고 있다. 그래서 소스 제어도 TFS의 기능을 사용한다. 처음 쓸 때는 그 전에 많이 사용했던 Visual SourceSafe와 큰 차이가 없어 보였는데, 쓰면 쓸수록 이제 좀 차이들이 보이고 있다.


그리고 얼마 전에 아주 큰 차이를 하나 알게 되었다. 그리고 아주 당황...-_-;; 이 차이 때문에, 소스 제어를 사용하는 습관을 일부 바꿔야 하기 때문이다..


내용은 다음과 같다. 기존 VSS에서는 소스를 편집하기 위해서는 Check-out이란 것을 해야 한다. Check-out은 그 소스를 내가 편집하고 있다라고 마킹을 하면서, 다른 개발자들이 사용하지 못하게 Lock을 거는 것을 말한다. 이 점은 TFS도 다르지 않지만, 그 후에 결정적인 차이가 있다. VSS에서는 Check-out을 하게 되면, VSS 서버에 있는 최신 버전을 자동적으로 로컬로 다운로드 받게 된다. 당연히 다른 개발자가 뭔가 추가를 했거나 수정을 했을 수도 있기 때문에, VSS 서버에 있는 버전을 받아야 최신 상태의 소스를 가지고 편집을 할 수가 있다. 그런데, TFS의 소스 제어에서는 Check-out을 할 때에 서버 버전을 받지 않는다. 기존에 로컬 PC에 있던 버전이 그대로 있을 뿐이다.. 즉, 최근에 최신 버전을 받은 시점으로부터 Check-out을 하기 전 사이에 다른 개발자가 그 소스를 수정했다면, 그 수정 사항이 반영되지 않은 소스를 그대로 가지고 있게 된다는 것.


사실 혼자서 작성하고 수정하는 소스라면 전혀 상관은 없다. 혼자서만 작업하기 때문에, 굳이 서버에서 최신 버전을 받지 않아도 된다. 하지만, 두 사람 이상이 같이 작업하는 소스라면, 좀 불편한 상황이 발생한다. Check-out을 하기 전에 항상 최신 버전을 받아야만, 다른 사람이 작업한 부분을 로컬로 받을 수가 있는 거다. 그래서, VSS를 사용할 때와 달리 항상 Check-out과 Get Latest Version을 같이 해 주어야 하는 수고..가 발생을 한다. VSS 때의 습관(Check-out만 하는)을 가지고 작업하다 보면, 큰 문제가 발생할 수도 있다..(개발자들끼리 사이가 나빠지게 될 수도...-_-;;;)


이 사항은 TFS 소스 제어의 Bug가 아니라, By-Design이다. 하지만, 공식 문서에는 이 내용에 대해서 상세한 언급은 없다. MSDN의 블로그에 좀 자세한 이유를 분석한 기사가 있는데 참고할만한 내용이다. (http://blogs.msdn.com/buckh/archive/2005/08/20/454140.aspx) 이 글의 개요는 "TFS의 소스 제어에서는 각 개발자가 가지고 있는 로컬 복사본을 어떤 특정 시점의 Snapshot이라고 생각하고 있다. 그렇기 때문에 이 Snapshot의 통일성을 유지하기 위해서 이런 형태로 동작하게 만들었다" 라는 것이다. 음.. 뭐 일리가 있긴 하지만, 아무래도 여러 사람이 작업하는 경우에는 불편하지 않나 생각이 든다. 물론 거의 대부분 하나의 소스 파일은 한 명의 개발자가 작업하긴 하겠지만, 반드시 그 개발자만이 작업한다고는 볼 수가 없다. 잘 모르는 부분에 대해서 도움을 받는다던 지, 추가할 기능이 생겼다던지 등의 경우가 얼마든지 생길 수가 있다. 그럴 경우에는 연관된 개발자들이 꽤 불편하지 않을까 하는 생각이 든다.

Posted by kkongchi