이제 관심밖의 IT 기술/Pro Git 번역
1.1 About Version Control (버젼 컨트롤에 대하여)
트래이닝맨
2012. 9. 20. 17:18
728x90
반응형
1.1 시작하기 - 버젼 컨트롤
무엇이 버젼 컨트롤인가? 그리고 왜 이것을 신경써야하는가? 버젼 컨트롤이란 변경내용을 하나의 파일이나 여러개의 파일에 저장하는 하나의 시스템이다. 그리고 우리는 이 시스템을 통하여 차후에 특정 버젼을 다시 불러올수 있다. 이 책에 나와 있는 소스 샘플들을 당신은 버젼 컨드롤를 하는 파일로서 사용하겠지만, 사실 당신은 어떤 타입의 파일도 버젼 컨드롤 할 수 있다.
만약에 당신이 그래픽 또는 웹 디자이너라면, 이미지 그리고 레이아웃의 매 버젼을 간직하고 싶을 것이고, 이때 버젼 컨트롤 시스템(VCS) 을 사용하는 것은 매우 유용할 것이다. 이것은 당신으로 하여금 파일 또는 프로젝트 전체를 이전 상태로 돌아가도록 할수도 있고, 더 나아가 매번 어떤것들이 변경되었는지 비교가 가능하고, 누가, 언제 마지막으로 문제를 유발시킬수는 무언가를 수정했는지 조차 알 수 있다.
보통 VCS를 사용한다는 것은 당신이 어떤것들을 망치거나 파일들을 잃어버렸을때 당신은 이것들을 쉽게 복구 할 수 있음을 의미한다. 게다가, 당신은 이 모든것들을 하는 데 있어서 들여야 하는 노력은 매우 적다는 것이다.
로컬 버젼 컨트롤 시스템 (Local version Control Systems)
많은 사람들이 택하는 버젼 컨트롤 방법은 파일들을 다른 디렉토리에 복사는 것이다.(만약에 센스있는 사람이라면, 디렉토리 명을 시간 기준으로 사용할것이다.). 이 방법은 심플하기 때문에 일반적으로 사용되나 이것은 많은 오류를 발생하기 쉽다.그리고 당신의 어떤 디렉토리에 복사했는지 쉽게 잊어버리고, 당신의 의지와 상관없이 실수로 다른 파일에 쓴다거나 복사를 할수 있다.
이러한 이슈에 대처하기 위해서, 프로그래머들은 아주 오래전에 모든 변경에 대한 내용을 파일에 유지하도록 하는 아주 간단한 데이타베이스를 가지고 있는내부 VCS를 개발했다.(see Figure 1-1).
.png)
유명한 VCS 툴중에 하나로 RCS라 불리는 시스템이 있는데, 이것은 현재도 많은 컴퓨터들에 의해 사용되고 있다. 심지어 Mac OS 시스템에서도 개발자 툴을 설치하면 rcs 명령어가 포함되어 있다. 이 툴은 기본적으로 어떤것이 변경이 생겼을때 파일들 사이의 다른 부분을(Patch set) 특정 포멧으로 유지하는 방식으로 운영된다; 파일들은 어느 순간 모든 패치들을 포함하는 방법으로 재생성될 수 있다.
중앙집중식 버젼 컨트롤 시스템(Centralized Version Control Systems)
사람들이 흔히 만나는 다음 메이져 이슈는 그들은 다른 시스템을 사용하는 개발자들과 협업하기를 원하는 다는 것이다. 이 문제를 해결하기 위해서 중앙집중식 버젼 컨트롤 시스템(CVCSs)이 개발되었다. CVS, Subversion 그리고 Perforce 같은 이러한 시스템은 버져닝된 파일들과 중앙에서 파일들을 체크아웃 받는 수많은 고객들을 포함하고 있는 하나의 서버를 가지고 있다.수년에 걸쳐서, 이것은 버젼 컨트롤의 기준이 되었다.
Figure 1-2. Centralized version control diagram.
이 방법은 많은 장점들을 제공해주었고 특히 로컬 VCSs 많은 것들을 제공해주었다. 예를 들어, 모든사람들은 정확하게 다른 사람들이 무엇을 하고 있는지 알수 있다는 장점이 있다. 관리자는 누가 무엇을 할수 있는지에 대한 세밀한 컨트롤이 가능해졌다.; 그리고 관리자에겐 각 사용자가 사용하는 내부 데이터베이스를 관리하는데 있어서 CVCS를 사용이 기존보다 훨씬 쉬워졌다
그러나 이 방법에도 심각하게 불리한 점들도 있다. 가장 명확하게 중앙집중식 서버의 단점을 보여주는 예가 있다. 만약에 서버가 한 시간동안 다운된다면, 그 시간동안 아무도 협업을 할수도 없을 뿐더라, 변경된 내용을 저장할 수도 없게 된다.그리고 만약에 백업을 하지 않은 상태에서 중앙 데이터베이스를 담고 있는 하드 디스크에 문제가 발생한다면, 개인들이 자신의 로컬 장비에 저장한 history를 제외한 모든 것들을 잃을 수 있다. 이것은 로컬 VCS도 똑같이 격는 문제이다. 만약 모든 프로젝트의 히스토리를 한곳에서 관리를 하고 있다면 당신은 언제든지 모든것을 잃을 수 있는 위험이 있는 것이다.
분산 버젼 컨트롤 시스템(Distributed Version Control Systems)
여기가 바로 분산 버젼 컨트롤 시스템이 들어갈수 있는 부분이다.DVCS에서는 (git, Mercurial, Bazaar 또는 Dars), 사용자가 그냥 제일 최근의 파일의 snapshot을 다운받지 않는다. 그들은 완전히 그 저장소를 복사해 온다. 그래서 모든 서버가 내려가더라도 이런 시스템들은 이를 통해 협업을 할 수 있고, 그 어떤 사용자의 저장소도 서버를 복원시키기 위해 복사가 될 수 있다. 매 체크아웃은 정말 모든 데이터를 백업한다.
.png)
더욱이, 당신이 같은 프로젝트를 다른 방식으로 사용하고 있는 다른 그룹의 사람들과 동시에 협업할 수 있도록, 많은 이런 종류의 시스템들은 그들이 사용중인 몇몇의 외부 저장소들을 잘 조율하고 잘 다룬다. 이것은 당신의 중앙 시스템에서는 가능하지 않았던 몇몇 workflow 타입을 설정할 수 있도록 해준다.
반응형