버전관리 시스템
- CVS
- SVN
- Git
버전관리시스템 Version Control Systems, VCS
- 여러 팀원이 작업한 코드를 합치고 관리 → 협업 도구
- 개발 프로세스 단계에서 소프트웨어의 변경 사항을 체계적으로 관리하고 추적
■ CVS - Concurrent Version System
특징
- 1990년에 출시
- 개발과정에서 사용하는 파일들의 변경 명세를 관리하기 위한 시스템
- 중앙에 위치한 Repository에 파일을 저장하고, 모든 사용자가 파일에 접근할 수 있도록 설계
- 파일의 히스토리를 보존하기 때문에 과거 이력을 확인할 수 있음
- checkout으로 파일 복사, commit으로 변경사항 저장
장점
- 오랜 기간 많은 유저가 사용하였고 시스템이 안정적
- 파일 전체를 저장하지 않고 변경사항만 저장하여 적은 용량 사용
단점
- 버전 분기가 힘들고, 장기간 분기된 버전 운영에 대해 미설계
- Commit 중 오류가 발생하면 롤백되지 않음.
- 상대적으로 속도가 느림.
- 디렉터리의 이동이나 이름 변경을 허용하지 않는다. 서브 디렉터리의 파일은 모두 지우고 다시 추가해야 한다.
■ SVN - Subversion
특징
- CVS의 단점을 보완하기 위해 2000년에 출시
- 개발과정에서 사용하는 파일들을 관리하기 위한 중앙 관리 시스템
- 최초 1회에 한해 파일 원본을 저장하고 이후에는 실제 파일이 아닌 원본과 차이점을 저장하는 방식
- 버전 분기 가능
장점
- CVS와 높은 호환성을 유지
- commit 실패 시 롤백 지원
- 언제든지 원하는 버전으로 복구 가능
단점
- 파일과 디렉토리 변경 관련 버그
- CVS에 비해 상대적으로 불안정
- Local Repo가 없기 때문에 자신만의 version history 관리 불가능
- commit에 실수가 있을 시 다른 개발자에게 바로 영향
■ Git
특징
- 2005년 리누스 토르발스가 리눅스 커널의 개발을 위해 출시
- 개발자가 중앙 서버에 접속하지 않은 상태에서도 코딩 작업을 할 수 있도록 지원
- 로컬에 다수의 독립성이 보장되는 branch를 허용하고 쉽게 생성, 병합, 삭제를 지원
- Staging Area를 통해 Repository로 업로드
- Staging Area : 변경사항이 저장소에 커밋되기 전에, 반드시 거쳐야만 하는 중간단계
장점
- 로컬 우선 작업으로 CVS, SVN 보다 성능 우수
- 분기 버전의 효율적인 운영
- 서버 저장소와 개발자 저장소가 독립적이므로 서버 저장소 Repository 장애에도 문제없이 버전 관리 가능
- commit 실수가 있어도 서버에 바로 영향 없음
- 팀 개발을 위한 분산 환경 코딩에 최적화
단점
- 많은 기능 지원으로 높은 진입 장벽
- push : 로컬 저장소의 데이터를 원격 저장소로 밀어넣기
- pull : 원격 저장소의 데이터를 로컬 저장소에 가져와 병합하기
- 브랜치(Branch) : 각자 독립적인 작업 영역(저장소)
- 여러 개발자들이 동시에 다양한 작업을 할 수 있게 만들어 주는 기능
- Merge : 변경 이력 병합하기
'Infrastructure' 카테고리의 다른 글
브랜치 전략 GitFlow, GitHubFlow, GitLabFlow (0) | 2022.11.11 |
---|---|
인프라를 업그레이드하는 방법: 스케일 업(Scale-up)과 스케일 아웃(Scale-out) (0) | 2021.11.08 |