본문 바로가기
TIP/Utility

[형상관리] SVN, git

by ojava 2019. 12. 25.
반응형

지금껏 형상관리 툴을 세 가지 정도 써봤다.

맨 처음 개발을 시작했을 때 SVN을 사용하다가 (요즘 친구들은 git부터 시작하더라 ^_ㅜ)
회사에 입사하고 나서도 한 동안은 SVN만 사용했는데, 나중에 넘겨받은 소스들에서는 언제적부터 쓰던 소스코드인지 CVS도 있었다. git도 어쨌든 사용하기는 해봤다. (정책 상의 사유로 오픈소스로 공개해야 하는 git hub는 아니었지만)

 

CVS는 전 개발자가 계정정보를 제대로 안알려주고 떠나서 비밀번호를 변경하느라 애를 먹기도 했지만, commit history 관리 형태가 불편하다는 점에서 매우 마음에 들지 않았고 결정적으로는 제 각기 다른 형상관리툴을 사용하고 있던 방식을 일원화하기 위해서 향후 SVN으로 전환해버렸다.

이번에는 잘 쓰고 있었던 SVN 방식에서 벗어나서 git에 적응해보고자 한다.

 

1) 버전 관리 방식의 차이

기본적으로는 소스코드의 이력 관리(형상관리, 버전관리) 를 통해 누락되는 소스가 없도록 하고, 예전 버전으로 돌리는 등의 작업을 할 수 있도록 한다는 목적은 같으나, 방식에 일부 차이가 있다.

크게 중앙집중형 방식과 분산관리 방식으로 생각할 수 있다.

 

1.1) 중앙집중형 방식 (CVCS, Central Version Control System)

SVN의 버전 관리 방식이다. 중앙 서버에 올라간 소스코드를 사용자가 내려받아 작업하고, 작업이 완료된 결과물을 commit하여 서버로 올려보내는 방식. 

가장 단순한 방식이고, 이해하고 사용하는데 어려움이 없으나 가끔 문제가 발생한다.

중앙 집중형 방식이므로 소스코드를 관리하는 서버가 죽으면 그 시간동안 update, commit 과정에 문제가 발생한다. 하지만 뭐 서버가 죽을 정도라면 다른 문제가 있어도 있겠다 싶으니 이해한다 치고.
제일 중요한 건, commit 한 내용이 바로 중앙서버로 업로드 되는 방식이므로 그 소스를 공유하는 모든 작업자에게 영향이 간다.

연계된 다른 소스 코드를 수정하는 개발자에게 어디어디 바뀐거 영향받을 수 있으니 update 받지마세요 ^_ㅜ 하는 순간이 오기도 한다.

동일한 파일에 대해 여러 작업자가 작업하는 경우, 충돌이 발생하는 건 예삿일.
내 작업 목록에 빨간불 뜨는 거 너무 싫어어...

 

1.2) 분산관리 방식 (DVCS, Division Version Control System)

git에서 사용하고 있는 분산관리 방식은 중앙집중형 방식과 조금 개념이 다르다.
SVN에서는 commit = 중앙서버에 업로드 였다면, git은 최종적으로 중앙서버에 올리기까지 몇 가지의 과정을 더 거쳐야 한다. 

그 과정에서 나오는 개념이 로컬저장소다. 로컬 작업공간에서 작업을 진행하다가 중간중간 올리고자 하는 내용을 로컬저장소로 올려서 작업한 내용에 대한 이력을 관리할 수 있다.
개발이 끝나서 해당 파일을 최종적으로 반영하고자 할 때, 그 때 중앙서버에 업로드하는 방식이다.
git에 기능이 어찌나 많은지, 로컬저장소에 올리기 전에도 commit 할 대상을 지정할 수 있는 스테이지 영역이라는 것도 있는데, 진행해야 하는 작업이 많을 경우 작업별로 commit 대상을 분리할 수 있는 기능이다.

'로컬 작업공간 -> (스테이지 영역) -> 로컬저장소 -> 중앙서버' 의 형태로 구성된다.

그리고 이 과정에서 사용되는 명령어도 헷갈릴 수 있어서 아래와 같이 정리한다.

  SVN git
중앙서버의 내용 내려받기 update pull (fetch + merge를 한 번에 처리할 경우)
스테이지 영역에 추가   add (생략가능, commit과 동시 처리 가능)
로컬저장소로 내용 올리기   commit
로컬저장소로 내용 내려받기   fetch
로컬저장소에서 내용 합치기   merge
중앙서버로 내용 올리기 commit push

 

해당 개념에 대해 잘 설명해둔 이미지가 있어서 그 이미지를 올려둔 블로그를 첨부한다.

https://dzzienki.tistory.com/46

 

GIT 과 SVN의 개념 및 장단점 형상관리, 버전관리

GIT 과 SVN 을 이해하려면 먼저 형상관리(버전관리)에 대해 이해해야 한다. 프로젝트를 진행할 때 각자 업무를 나눠서 맡은 부분을 개발을 하게 되는데, 각자가 개발한 코드 혹은 문서들을 하나의 관리 도구에서..

dzzienki.tistory.com

 

중앙집중형 방식과 분산관리 방식을 비교했을 때, 분산관리 방식의 장점은 아래와 같다.

- 로컬저장소에 올리기 때문에 commit에 부담이 없어진다. (파일 유실 염려 저하, 작업이력 관리 효율성 증대) 
- 로컬저장소에 각자 이력을 받아서 관리하고 있으므로, 중앙서버가 다운되거나 터져버려도 다시 복구가 쉽다.
- 하나의 파일에 대해서 작업자별로 각기 다른 작업을 할 수 있고, 각 이력을 별도로 관리할 수 있다.
   이 장점으로 인해, 다양한 작업자들이 동시다발적으로 다양한 작업을 진행할 수 있다.
   이를 branch 라고 하고, git의 가장 큰 특징이라고 할 수 있다.

 

2) 형상관리 방식 트렌드 변화

작업자가 혼자라서 SVN만 사용해도 불편함이 없거나, 중앙서버와의 통신과정에서 느리다는 느낌을 느껴본적이 없다고 하더라도 git을 사용해보는 건 트렌드 확인을 위해서도 중요하다.

2016년 stackoverflow 대상, 형상관리 사용 비중 조사결과
(출처 - https://rhodecode.com/insights/version-control-systems-2016)

 

이제 2019년도 끝나가는 마당에 최신자료가 없어서 2016년 자료를 가져왔는데, 오픈소스 진영은 git을 통해 배포한지는 너무나도 오래된 일이고 일반 개발회사도 git으로 전환하고 있다. 뭐 물론 오픈소스 형태가 아닌 설치 방식의 git 환경이겠지만.

여튼 이미 2010년 이후로 미친듯이 증가하는 git 사용률을 보면 나도 git 생태계에 적응해야 한다는 사명감에 불탄다. checkout, update, commit만 알면 되던 SVN의 편리성은 매우 동감하지만 이제 git으로 넘어가야할 시기가 된 것 같다.

 

 

 

참고 사이트

git 기초 개념 - https://git-scm.com/book/ko/v2
svn 능력자를 위한 git 가이드 - https://www.slideshare.net/einsub/svn-git-17386752

 

반응형