2009년 1월 8일 목요일

VSS, CVS, SVN 비교

Google Trend에서 세가지 SCM(Software Configuration Management)의 경향을 살펴봤습니다. (아래 그림 참조)

CVS가 여전히 압도적인 우위를 점하고 있고, 상대적으로 SVN은 꾸준히 성장을 하고 있습니다. 물론 Google Trend가 실제 제품의 점유율을 보여주지는 않지만 그만큼 사람들의 관심사는 엿볼 수 있을 것 같습니다.
CVS의 감소는 SVN으로 대체되고 있는 듯 보입니다.
하지만 이렇게 더딘 이유는 CVS도 충분히 좋은 SCM이고 더 좋은 SCM이 나왔다고 함부로 바꿀 수 있는 것이 아니기 때문입니다.
물론 새로 시작하는 회사가 있다면 SVN을 쓰면 좋겠지만, 기존에 수년가 CVS를 쓰던 회사가 치명적인 문제도 없는데 SVN을 그냥 바꿀 필요는 없겠지요.



(3가지를 비교한 그래프입니다. SVN의 성장이 눈이 띕니다. 아래 Comment의 권남님이 제시한 그래프를 보면 SVN의 비율이 훨씬 더 높아지네요. 그리고 미국과 인도에서의 CVS 검색 비중이 아주 높고 나머지 나라에서는 SVN이 더 높은 나라가 많네요.)


(VSS는 점차 감소 추세입니다.)


(CVS는 약간의 감소추세이나 급격하지는 않네요)


(SVN의 성장 추세는 괄목할 만하네요)


제가 가장 오랫동안 사용한 SCM은 VSS입니다. 제가 사용한 VSS는 v6.0이었습니다.
물론 유료지요. 하지만 제가 종종 겪었던 가장 큰 문제는 깨지는 저장소였습니다. CS구조가 아닌 NFS 방식으로 파일을 공유하기 때문에 그런 문제가 있었던 것으로 생각합니다. 물론 VSS 2005에서 안정성(stability)를 향상하고 HTTP를 지원한다고 하지만 그 당시는 제가 SVN을 사용하고 있을 때라서 VSS가 얼마나 좋아졌는지 모릅니다. 혹시 최신 VSS를 쓰고 계신 분은 평가를 올려주시면 좋겠습니다.

하지만, 안정성이 가장 중요한 요소 중 하나인 SCM에서 자주 깨지는 저장소는 신뢰를 잃기에 충분했습니다. 
매일 백업을 받고 있었으므로 몇 시간 분량의 손실만 있을 뿐 복구는 할 수 있었지만, 개발 시간을 낭비하게 만드는 것은 아주 짜증나는 일이었습니다.

그리고 허약한 Branch기능은 부족한 기능 중에 하나였습니다.

그 뒤에 CVS를 거쳐서 SVN을 사용하게 되었는데, 제가 써본 SCM 중에서 최고는 SVN입니다.

VSS < CVS < SVN 이라고 생각합니다.

SVN은 일단 무료이며, 그 오랫동안 사용하면서 저장소는 단 한번도 깨진 적이 없습니다.
그리고 빠릅니다. 아무리 큰 디렉터리를 태깅하거나 브랜치를 해도 시간은 몇 십초 안 걸립니다.
CVS에서 엄청나게 큰 디렉터리 태깅하면서 기다려보신 분은 아실 겁니다.
그렇게 빠른 이유는 SVN은 기존의 SCM의 파일 시스템과 완전히 다른 방식을 사용하고 있기 때문입니다. 기존의 대부분의 SCM들이 RCS(Revision Control System)에서 기초한 파일시스템을 사용하는데 반해서 SVN의 파일시스템은 기존의 단점을 없애고 새로 만들었습니다. 즉 각 Revision의 Diff만 저장하는 방식입니다.
따라서 태그나 브랜치를 만들 때는 Diff가 없으므로 순식간에 이루어집니다.

그리고 SVN의 VSS와 비교한 장점 중의 하나가 협업이 훨씬 쉬워졌다는 겁니다.
SVN도 Lock기능이 있지만, 이걸 사용하지 않고도 협업에 문제가 없습니다. 왜냐하면 하나의 파일을 동시에 수정할 경우에는 Merge를 해주기 때문입니다. 이때 사용하는 3way Merge에 대해서는 제가 올린 글이 있으니 참조하세요.

기존에 VSS를 사용할 때는 물론 Multi-lock 기능이 있기는 하지만, 며칠씩 Lock을 걸어 놓고 풀지 않는 사람 때문에 보통 귀찮은 게 아니었습니다. SVN을 사용하면서 이런 문제는 싹 사라졌습니다.

VSS를 사용하면서는 IDE와 통합되는 기능이 왠지 멋져 보이고 매우 편리하다고 생각했었는데, SVN과 TortoiseSVN을 IDE와 별도로 쓰면서 불편하게 생각되어 본 적이 별로 없었습니다. SVN도 IDE와 통합해주는 Plug-in들이 있지만 이는 취향에 따라서 선택하면 되고 꼭 써야 하는 필수요소는 아닙니다.

결국 SVN의 빠른 속도, 안전한 저장소, 뛰어는 브랜치 기능, 머지기능 등은 저와 저희 팀이 즐겁게, 제대로 일하는데 많은 도움을 주었습니다.

누군가 새로 SCM을 사용하려고 한다면 SVN을 추천합니다.

댓글 13개:

  1. 비교가 완벽하지는 않은 것 같습니다. svn은 svn말고 subversion으로 검색하는 비율도 높기 때문입니다.
    http://google.com/trends?q=cvs%2Csvn|subversion%2Cvss|sourcesafe|visualsourcesafe%2Cgit%2Cmercurial&ctab=0&geo=all&date=all&sort=0
    이게 더 정확한 결과 일듯 합니다.
    그리고, 저도 SVN이 더 좋습니다. 가장 좋은 점은 파일별이아닌 각 커밋별로 리비전을 관리한다는 점입니다. 불필요한 Tag를 생성할 필요를 줄여주죠.
    예전엔 eclipse용 클라이언트가 너무 후져서 거부감이 들었는데, 요즘엔 Eclipse용 클라이언트도 많이 안정화가 돼서 별다른 불편도 없네요.

    답글삭제
  2. git이나 mercurial 등의 분산형 소스코드 관리시스템의 비교는 한번 안하시나요^^;;
    잼있게 구독하고 있습니다.^^

    답글삭제
  3. 재미있는 비교네요 ㅎㅎ
    다만 한가지, CVS가 압도적으로 많은건 CVS가 아직 많이 사용되기 때문이기도 하지만
    미국에 전국 대형 약국 체인중에 CVS가 있는것도 한 몫 하는것 같습니다 (이미 아실지도 모르겠지만요)
    그래서 위의 비교에서는 CVS가 실제 이상으로 많은 점유율을 차지하는것 같습니다.
    아무튼 저는 CVS밖에 안써봐서 잘 모르겠지만, 요즘 정말 SVN이 잘 나가는것 같습니다 ㅎㅎ

    답글삭제
  4. 권남님 안녕하세요.
    그렇게 하니 SVN의 비율이 더 높은 수치로 나오는 군요. 감사합니다.

    답글삭제
  5. mixed님 안녕하세요.
    나중에 한번 기회가 되면 할려고 생각은 하고 있습니다. 지금 준비 중인 이슈가 많이 있어서 추후 올려보도록 하겠습니다.

    답글삭제
  6. fancyydk님 안녕하세요.
    찾아보니 www.cvs.com이 약국체인이네요. 몰랐었습니다. 그래도 여전히 CVS를 많이 쓰고 있겠죠?

    답글삭제
  7. 좋은 글 잘 보고있습니다^^

    답글삭제
  8. allting 님 안녕하세요.
    항상 관심 가져 주셔서 감사합니다. 좋은 S/W를 개발하고 계시더군요. 앞으로도 자주 의견 주고 받고 싶습니다.

    답글삭제
  9. 오래된 글에 리플 남기게 되네요 ㅎㅎ
    음.. 개인적으로는 SVN은 사용하고 회사에서는 CVS를 사용하지만, 관리자 측면과, 사용자 측면은 반비례 하는 편이라서 어느편이 좋다라고 하긴 애매한 감이 있습니다.

    사용자 측면에서는 속도라던가 여러모로 편리한 SVN에 손을 들에 주게 되지만,
    svn:// 방식으로 사용시에는 비밀번호가 평문으로 저장된다던가, 로그가 남지 않는다던가 하는 아쉬운 점이 있습니다.(물론 fake-security일지두 모르지만요) 그래서 대부분이 http+svn://을 사용하는 경향이 있는것 같습니다.

    아무튼 svn+ssh:// 든 svn:// 이든 svn+http 만큼의 사용자 편의는 제공하지 않는다는 점과, repository 기본 골격 구조등의 차이로 인한 관리의 어려움은 (tag / branch 디렉토리) cvs에 손을 들어주고 싶습니다.

    아마 이러한 관리상의 아쉬움을 svn이 보완한다면 svn이 완전한 대세가 되겠지만,
    사용상의 편함만으로 cvs를 버리고 svn으로 가기에는 조금 아쉬움이 있습니다.

    답글삭제
  10. 안녕하세요. 구차니님
    SVN과 CVS, VSS를 모두 오랫동안 써온 저는 SVN에 가장 높은 점수를 줍니다. 외형적인 기능 면으로는 크게 차이가 없어보이지만 보이지 않는 부분에서 많은 차이가 납니다. SVN의 아키텍처가 가장 훌륭하죠. 그래서 속도도 빠릅니다. tag, branch가 디렉터리로 관리되는 것이 좀 어려울 수 있지만, 이것도 익숙해지면, CVS보다 더 편리하더군요. 좋은 의견 감사합니다.

    답글삭제
  11. tfs가 최고죠-_-;;; 자바 닷넷 해보면서 tfs만큼 편한 것은 없습니다..;; 유료에 설치가 꽤 까다운 편이지만요..그담은 당연 svn입니다만..그러고 보면 ms가 툴하나는 참 잘만드는 것 같습니다..ㅎㅎ

    답글삭제
  12. 안녕하세요.
    TFS(Team Foundation Server)는 국내 레퍼런스가 100개 미만으로 알고 있는데, 사용하고 계신가보네요.
    언제 TFS와 SVN도 비교를 해서 올려보는 것이 좋겠네요. 사실 TFS는 Rational 솔루션들이 너무 무겁다면 가볍게 나온 솔루션이지만 이것 역시 엄청나게 무겁고 개발자에게 부담을 주는 것은 마찬 가지입니다. 기능면으로 비교하면 SVN에 있는 기능은 다 있고, 여타 다른 기능들과 많이 연동이 되어 있는 종합 선물세트죠.
    한방에 해결하고 싶은 분들은 쓰면 좋을 것 같습니다. 하지만 각각의 시스템중에서 가장 좋은 것들을 골라서 서로 느슨하게 연동하고 가볍게 쓰고 싶은 분들은 다른 선택을 하시는 것이 좋겠네요.

    답글삭제