본문 바로가기
개발

Git과 SVN의 특징 및 차이점과 어떤 버전 관리 시스템을 사용할 것인가?

by developer's warehouse 2023. 11. 28.

이 글에서는 Git과 SVN에 대해서 설명합니다.

git vs svn 썸네일

형상관리(Version Control Revision Control) 툴 이란?

 

  • 소프트웨어의 소스를 관리하며 버전 관리 툴이라고도 합니다.
  • 형상관리는 소스의 변화를 끊임없이 관리하는 것을 말합니다.
  • 소스를 버전 별로 관리할 수 있어서 개발할 때 실수로 소스를 삭제하거나, 수정하기 이전으로 돌아가야 되는 경우 유용하게 사용됩니다. 특히 유지보수 시에 고객이 사용하는 버전의 코드를 찾는데 유용합니다.
  • 팀 프로젝트에서도 누가 무엇을 어떻게 수정했는지도 알 수 있기 때문에 코드를 병합하거나 수정된 소스를 추적하는 데에도 쓰입니다.

 

형상관리툴 종류

 

  • Client/Server 타입: Subversion(SVN), CVS, Perforce, ClearCase, TFS
  • 분산저장소 타입 : Git, Mercurial, Bitkeeper, SVK, Darcs
  • Folder 공유 타입 : RCS, SCCS

 

SVN vs Git

Subversion(SVN)

Subversion(SVN)은 2000년에 CVS를 대체하기 위해 만들어졌으며 현재까지 두루 사용되는 형상관리 툴 입니다.

trunk: 프로젝트에서 가장 중심이 되는 저장소로 개발버전의 메인 저장소를 의미합니다.

branches: trunk에서 분리되어 나온 나뭇가지를 뜻하며, 프로젝트 내의 작은 프로젝트 혹은 메인 개발버전의 특정 릴리즈 버전으로 구성할 수 있습니다.

tags: 버전 별로 소스코드를 따로 관리하는 공간(버전 별로 태그를 붙여서 tag 저장소 안에 보관한다고 생각하면 됩니다. 유지보수 시 소스 찾을 때 사용합니다.)

특징

- SVN은 보통 대부분의 기능을 완성해 놓고 소스를 중앙 저장소에 commit

- commit의 이미 자체가 중앙 저장소에 해당 기능을 공개한다는 의미입니다.

- (GIT과 가장 큰 차이점) 개발자가 자신만의 version history를 가질 수 없다. (그렇기 때문에 local History를 이용하긴 하지만, 일시적이다. 내가 며칠 전까지의 내용에 한해 작업했던 내역을 확인 가능하지만 버전 관리가 되진 않습니다.)

- commit 한 내용에 실수가 있을 시에 다른 개발자에게 바로 영향을 미치게 되는 단점도 있습니다.

- 하지만, 개발자가 자신만의 브랜치를 만들어서 사용하는 경우 위의 단점들은 모두 사라질 수 있습니다.

 

Git

- 매우 빠른 속도와 분산형 저장소. SVN보다 많은 기능을 지원하지만 익숙해지기에 더 많은 시간이 필요하며 사용법도 조금 더 복잡하다.

- SVN을 사용하다 GIT을 사용하게 되면 무척 헷갈리고 개념 이해에 어려움을 겪을 수 있다.

 

특징

- (SVN과 가장 큰 차이점) 반면, git은 개발자가 자신만의 commit history를 가질 수 있고, 개발자와 서버의 저장소는 독립적으로 관리가 가능.

- commit 한 내용에 실수가 있더라도 이 바로 서버에 영향을 미치지 않는다

- 개발자는 마음대로 commit(push)하다가 자신이 원하는 순간에 서버에 변경 내역(commit history)을 보낼 수 있으며, 서버의 통합 관리자는 관리자가 원하는 순간에 각 개발자의 commit history를 가져올 수 있음.

 

SVN과 Git의 차이점 정리

- Git이 SVN과 다른 점은 분산형 관리 시스템이라는 것입니다.

- SVN : 중앙 서버에 소스코드와 히스토리를 저장

- Git : 소스코드를 여러 개발 PC와 저장소에 분산해서 저장

- 그렇기 때문에 중앙 서버에 장애가 발생해도 로컬 저장소에 커밋을 할 수 있으며, 로컬 저장소들을 이용하여 중앙 저장소의 복원도 가능합니다.

- 사본을 로컬에서 관리하기 때문에 GIT이 SVN에 비해 일반적으로 빠릅니다 (SVN은 변경 로그 하나 보는 것도 네트워크로 서버 접속이 필요합니다.)

 

개발자 입장에서 SVN과 Git의 차이점 정리

개발자 입장에서 볼 때, Git과 SVN의 주요 차이점은 다음과 같습니다:
 
관리 방식: SVN은 중앙집중관리방식을 사용하며, Git은 분산관리방식을 사용합니다. 이는 SVN이 한 저장소(Repository)를 가지고 모든 개발자가 동시에 작업을 수행한 뒤 개발 종료 후 그 저장소를 가지고 배포하는 반면, Git은 동일한 저장소에서 각각 Branch를 따간 후 필요한 부분을 개발하고 Master Branch에 합친 뒤(Merge) Master Branch를 배포하는 식으로 사용합니다.
 
로컬 저장소의 유무: SVN은 로컬 저장소가 없습니다. 따라서 중앙의 SVN 서버가 장애가 발생하면 SVN으로 작업을 할 수 없습니다. 반면에 Git은 원격 Repository에 장애가 나도, 로컬 저장소를 이용해 push 및 pull이 가능합니다.
 
개발자의 독립성: Git은 개발자가 자신만의 commit history를 가질 수 있고, 개발자와 서버의 저장소는 독립적으로 관리가 가능합니다.
 
브랜치 관리: Git은 동일한 저장소에서 각각 Branch를 따간 후 필요한 부분을 개발하고 Master Branch에 합친 뒤(Merge) Master Branch를 배포하는 식으로 사용합니다. 이는 특정 branch를 합친 후 에러가 발생했다면 그 branch만 다시 떼어놓으면 버전 관리도 간단하게 할 수 있다는 장점이 있습니다.
SVN의 경우에도 동일하게 개발자 개인의 branch를 따서 사용 가능합니다. 다만, 이 모든 작업은 서버에서 이뤄집니다.
 
사용 케이스: 한번 개발하고 한동안 추가 개발이 없는 경우에는 SVN이 유리하며, 지속적으로 개발하고 코드 안정성이 필요한 경우에는 Git이 유리하다고 합니다. 하지만, SVN의 경우에도 지속적으로 개발하는데는 큰 지장은 없습니다.
 
마지막으로, git을 사용하더라도 github를 사용해서 관리하는 경우에는 github가 중앙 서버 저장소를 의미하므로 svn과 크게 다르지 않을 수 있습니다.
svn도 git과 유사한 방식으로 조금 더 단순하게 사용할 수 있는 장점이 있습니다.
 

SVN과 Git 결론

SVN과 Git 중 어떤 것이 더 쉽고 직관적인지는 사용자의 개인적인 경험과 선호도에 따라 다를 수 있습니다.

그러나 일반적으로, SVN은 사용하기 쉽고 직관적이라는 의견이 많습니다. 이는 SVN이 중앙집중식 버전 관리 시스템이기 때문에, 개발자가 커밋을 하면 바로 중앙 저장소에 반영되기 때문입니다.

 

반면에 Git은 분산 버전 관리 시스템으로, 개발자가 커밋을 하면 먼저 로컬 저장소에 반영되고, 이후에 원격 저장소로 푸시(Push)하는 방식을 사용합니다. 이로 인해 Git은 브랜치 관리와 병합이 더 용이하며, 변경 사항이 많고 배포가 잦은 프로젝트에 더 적합할 수 있습니다.

 

저는 Git과 SVN을 모두 사용하고 있는데, 무조건 Git이 최신이어서 좋고 SVN을 사용하면 뒤 떨어지는 것이다.라는 생각은 하지 않는 것이 좋을 것 같습니다.

버전 관리 시스템을 사용할 때에는 여러 가지 상황과 환경을 고려해서 선택하시는 것이 좋습니다.

따라서, 프로젝트의 요구사항, 팀의 작업 흐름, 그리고 개인의 선호도에 따라 결정하시면 될 것 같습니다.

 

facebook twitter kakaoTalk kakaostory naver band shareLink