3. 버전관리의 이해와 적용
3.1. 버전관리 이해
3.1.1. 버전관리 정의와 필요성
- 버전관리 시스템(VCS)
- 파일 변화를 시간에 따라 기록, 특정 시점의 버전을 다시 가져올 수 있는 시스템
- 소스 코드 관리, 백업, 복구에 용이
- 협업 시 혹은 다른 장소에서 작업 시 소스 동기화 용이
- 동일 소스에서 동시에 다른 프로젝트가 진행 될 시 소스 병합에 용이
- 이력 변경 확인 용이
3.1.2. 버전관리종류 | 로컬 버전 관리 시스템(⊃ RCS)
- RCS(Revision Control System)
- Patch Set(파일이 변경되는 부분)을 관리
- Patch Set은 특별한 형식의 파일로 저장됨
- 일련의 Patch Set을 적용해 모든 파일을 특정 시점으로 되돌릴 수 있음
3.1.3. 버전관리종류 | 중앙집중 버전 관리 시스템(CVCS)
- 특징
- 파일을 관리하는 서버가 별도로 존재, 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout)
- 장점
- 팀원의 진행 상황을 알 수 있고 한 곳에서 관리 가능
- 단점
- CVS, Subversion, Perforce 등이 이 시스템을 이용
3.1.4. 버전관리종류 | 분산 버전 관리 시스템(DVCS)
- 클라이언트가 단순히 파일의 마지막 스냅샷을 받아오지 않고 서버에 있는 저장소를 히스토리와 함께 모두 복제해 가져옴
- 서버에 문제가 생겨도 가져왔던 저장소 복제물로 계속 작업을 할 수 있음
- Git, Mecurial, Bazaar, Darcs 등이 이 시스템을 이용
3.2. 버전관리 툴
3.2.1. Git (GitHub, GitLab)
- 특징
- DVCS
- 디렉토리가 네트워크 상태나 중앙 서버와 독립적으로 동작
- 저장소의 완전한 복사본을 로컬에 저장
- 변경 이력 모델 : Snapshot
- 브랜치 병합 : n-Way
- 수 많은 병렬 브랜치를 전제로 설계되었고 구현언어(C, Bourne Shell, Perl) 특성상 Linux에서 성능이 가장 좋음
- 장점
- 처리 속도가 빠름
- 일시적 작업에 대한 이력관리가 용이
- 이미 Commit한 소스 파일도 수정 가능
- 단점
- 저장소를 모두 복사해오기 때문에 대용량 소스 코드 관리에 부적절
+) Git, GitHub, GitLab 차이점
- gitHub
- git을 사용하는 프로젝트를 지원하는 웹 호스팅 서비스
- 무료 플렌 사용 시
- 디스크 사용량 제한 없음
- 프로젝트 최대 1GB
- 개별 파일 최대 100MB
- 비공개 프로젝트 호스팅 불가
- gitLab
- snipet section을 통해 전체 프로젝트를 공유하지 않고도 적은 양의 코드 공유 가능
- 저장소 push와 pull이 github보다 느림
- 무료 플렌 사용 시
3.2.2. Subversion(SVN)
- 특징
- CVCS
- 파일 및 디렌토리 삭제, 이동, 이름 변경, 복사 지원
- 장점
- 소스파일 이외의 이진 파일도 효율적으로 저장 가능
- 저장소의 크기 상관 없이 일정한 시간에 업데이트 가능해 처리 속도가 상대적으로 빠름
- 단점
- 안정성이 CVS보다 불안정, svn 디렉토리로 인해 가독성이 떨어짐
3.2.3. Mercurial
- 특징
- 쉽게 사용하는 것에 중점을 둔 UI
- Windows에서 성능이 가장 좋음
- 변경 이력 모델 : Patch
- 브랜치 병합 : 2-Way
- 장점
- 패키지에 필요로한 대부분의 확장이 포함되어 추가 설정이 필요 없음
3.3. 현 프로젝트 적용
3.3.3. 사용할 툴 : GitHub
- 선정 이유
- 웹 기반 호스팅 서비스로 접근이 용이
- 이슈 트래킹 및 위키와 같은 공동 작업 기능 제공
참고자료
버전관리란? - git
Git vs Mercurial - naver D2
버전 관리 시스템 추천 - gaerae
VCS-버전관리 시스템에는 어떤것들이 있을까? - redcow77
jira 사용법 유튜브