본문으로 바로가기

[웹개발 기초] 형상관리툴이란? (SVN GIT 간단비교)

category 3. 웹개발/3_1 웹개발 기본 2018. 11. 10. 18:21

[웹개발 기초] 형상관리툴이란? (SVN GIT 간단비교)




안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 형상관리툴, Git SVN 비교  ] 입니다. : ) 


형상관리(Version Control Revision Control)툴


 - 소프트웨어 버전 관리 툴이라고도 한다.


 - 형상관리는 소스의 변화를 끊임없이 관리하는 것을 말한다.


 - 소스를 버전 별로 관리할 수 있어서 개발할 때 실수로 소스를 삭제하거나, 수정하기 이전으로 돌아가야되는 경우 유용하게 사용되는 툴.


 - 또한 팀 프로젝트에서도 누가 무엇을 어떻게 수정했는지도 알 수 있기 때문에 코드를 병합하거나 수정된 소스를 추적하는 데에도 쓰인다.



▶ 형상관리툴의 종류


- Client/Server 타입 : Subversion(SVN), CVS, Perforce, ClearCase, TFS

- 분산저장소 타입 : Git, Mercurial, Bitkeeper, SVK, Darcs

- Folder 공유 타입 : RCS, SCCS


이중 내가 웹개발자로 있으면서 사용해본 경우는 CVS, SVN, GIT이다.



▶ 1. CVS

 - 1980년대에 만들어진 형상관리 툴이지만 파일 관리나 커밋 중 오류 시 롤백이 되지 않는 등 불편한 문제점이 있어 이후 SVN으로 대체됨


▶ 2. SVN

 - 2000년에 CVS를 대체하기 위해 만들어졌으며 현재까지 두루 사용되는 형상관리 툴

 

- trunk

   프로젝트에서 가장 중심이 되는 디렉토리


 - branches

   trunk에서 뻗어져 나온 나뭇가지를 뜻함. 프로젝트 내의 작은 프로젝트라고 생각하면 됨


- tags

   버전 별로 소스코드를 따로 관리하는 공간(버전 별로 태그를 붙여서 tag 디렉토리 안에 보관한다고 생각하면 됨)


▶ 3. GIT

 - 매우 빠른 속도와 분산형 저장소. SVN보다 많은 기능을 지원하는 대신 당연히 익숙해지기에 더 많은 시간이 필요함.

 - SVN을 사용하다 GIT을 사용하게 되면 무척 헷갈리고 개념 이해가 잘 되지 않았었다.


자세한 Git 설명 클릭 => http://goddaehee.tistory.com/91


▶ 4. SVN vs GIT 비교


- 특징


4.1 SVN

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

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

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

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


4.2 GIT

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

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

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


이렇게 git은 서버 저장소와 개발자 저장소가 독립적으로 commit history를 가져갈 수 있기 때문에 매우 유연한 방식으로 소스를 운영할 수 있으며, 이러한 유연성이 git의 가장 큰 장점이다.



댓글을 달아 주세요

  1. 개인의견 2019.11.26 10:34

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

    이걸 svn 의 단점이라고 적어두셨는데 사실 이건 git 도 마찬가지 아닌가요?
    어차피 타인의 소스를 업데이트 받아 작업한다는 관점에선 영향을 끼치는 건 동일한 것 같은데...

    • git의 commit과 svn의 commit은 의미가 좀 다른 것 같아요. git의 commit은 개인 로컬 리파지토리에 저장하고 리모트 리파지토리엔 영향을 주지 않으니 어떻게 커밋하시더라도 퍼시 전까진 다른사람과 협업시 충돌이 없는 것으로 알고있긴 합니다 ㅠ 혹시 틀린 내용이라면 설명을 달아주시면 수정 반영하겠습니다.

    • 개인의견 2019.11.26 10:58

      음... 제가 댓글을 좀 잘못 적었네요.

      말씀하신대로 git의 commit과 svn의 commit은 완전히 다른 기능인데 git은 commit에 안전하다! 라는 것으로 적어둔 것처럼 보여서요... svn의 commit에 비해 안전하려면 push 와 비교를 해야 하는 것 아닌가 해서 적어봤습니다.

      push 를 하게 되면 다른 이용자가 해당 소스를 받아서 사용하는데 그럼 결국 서버로 보내는 시점에서는 svn 이나 git 이나 똑같이 다른 사용자에게 영향을 끼칠 수 있는거 아닌가.... 싶어서 여쭤봤습니다. git의 commit은 말씀하신대로 로컬 레파지토리에 저장이 되므로 따지고 보면 그냥 로컬에서 혼자 수정하고 save 해두는 것과 무슨 차이지...? 싶어서요.

  2. 아 넵 커밋에 안전하다라기보다 협업시에 편리하다가 맞겠네요. 감사합니다

    • 개인의견 2019.11.26 11:05

      아닙니다. 그냥 제가 궁금해서 여쭤본 겁니다. ^^;;
      오늘도 즐코딩 되십시오~

  3. Question 2020.04.02 12:30

    안녕하세요, 글 읽다가 궁금한점이 있어서 여쭙습니다.

    개인의견님이 svn의 commit과 git의 push에 대해서 언급해주셨는데,
    svn은 commit 했을때 trunck가 아닌 branch로 내용을 반영하고 branch에서 다시 trunck로 합치는 작업이 불가능한가요?

    git의 경우에는 trunck와 대응되는 기준 브랜치, 보편적으로 master 브랜치에서 별도의 브랜치를 생성하고,
    해당 내용을 새로 생성한 별도의 브랜치에 반영한 후 master 브랜치로(브랜치 전략에 따라서 중간 브랜치가 더 있을 순 있지만요) Pull Request를 보내는 방법이 보편적인데,

    svn에서는 상기의 방법이 불가능한 것인지가 궁금합니다.