코딩항해기
[기초] 소프트웨어 버전 관리 도구 본문
공유 폴더 방식
공유 폴더 방식은 버전 관리 자료가 로컬 컴퓨터의 공유 폴더에 저장되어 관리되는 방식으로 개발자들은 개발이 완료된 파일을 약속된 공유 폴더에 매일 복사한다. 담당자는 공유 폴더의 파일을 자기 PC로 복사한 뒤 이상 유무를 확인하며, 오류가 확인되면 등록한 개발자에게 수정을 의뢰한다. 이상이 없다면 각 개발자들이 동작 여부를 다시 검토한다.
파일을 잘못 복사하거나 다른 위치로 복사하는 것을 대비하기 위해 파일의 변경사항을 데이터베이스에 기록해 관리한다.
종류에는 SCCS, RCS, PVCS, QVCS등이 있다.
클라이언트/서버 방식
버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리하는 방식으로, 서버의 자료를 개발자별로 자신의 PC로 복사하여 작업한 후 변경된 내용을 서버에 반영하는 방식이다. 모든 버전 관리는 서버에서 수행하며, 하나의 파일을 서로 다른 개발자가 작업할 경우 경고 메세지를 출력한다. 서버에 문제가 생기면 서버가 복구되기 전까지 다른 개발자와의 협업 및 버전 관리 작업은 중단된다.
종류에는 CVS, SVN, CVSNT, Clear Case, CMVC, Perforce 등이 있다.
분산 저장소 방식
버전 관리 자료가 하나의 원격 저장소와 분산된 개발자 PC의 로컬 저장소에 함께 저장되어 관리되는 방식으로, 개발자 별로 원격 저장소의 자료를 자신의 로컬 저장소로 복사하여 작업한 후 변경된 내용을 로컬 저장소에서 우선 반영한 다음 이를 원격 저장소에 반영한다. 로컬 저장소에서 버전 관리가 가능하므로 원격 저장소에 문제가 생겨도 로컬 저장소의 자료를 이용해 작업할 수 있다.
종류에는 Git, GNU arch, DCVS, Bazaar, Mercurial, Team Ware, Bitkeeper, Plasic SCM 등이 있다.
Subersion (SVN)
CVS를 개선한 것으로 아파치 소프트웨어 재단에서 2000년에 발표했다. 서버의 자료를 클라이언트로 복사해와 작업한 후 변경 내용을 서버에 Commit한다. 모든 작업은 trunk 디렉터리에서 수행되며, 추가 작업은 branches 디렉터리에서 별도의 디렉터리를 만들어 작업한 후 병합한다. 서버는 주로 유닉스를 사용하며 소스가 오픈되어 있어 무료로 사용할 수 있다. CVS의 단점이었던 파일이나 디렉터리의 이름 변경, 이동 등이 가능하다.
add | 버전 관리 대상으로 등록 |
commit | 버전 관리 대상을 서버의 소스파일에 적용 |
update | 서버 최신 commit 이력을 소스파일에 적용 |
checkout | 버전 관리 정보와 소스파일을 서버에서 클라이언트로 받아옴 |
lock/unlock | 서버의 소스파일이나 디렉터리를 잠금 또는 해제 |
import | 아무것도 없는 서버 저장소에 처음으로 소스를 업로드하는 명령어 |
export | 버전 관리에 대한 정보를 제외한 순수한 소스 파일만 서버에서 받아옴 |
info | 지정한 파일에 대한 위치나 마지막 수정 일자에 대한 정보 표시 |
diff | 지정한 파일이나 경로에 대해 이전 리비전과의 차이를 표시 |
merge | 다른 디렉터리에서 작업된 버전 관리 내역을 기본 개발 작업과 병합 |
Git
리누스 토발즈가 2005년 리눅스 커널 개발에 사용할 관리 도구로 개발한 이후 주니오 하마노에 의해 유지보수되고 있다. 분산 버전 관리 시스템으로 2개의 저장소, 로컬과 원격 저장소가 존재한다. 버전 관리가 지역 저장소에서 진행되므로 버전 관리가 신속하게 처리되고, 원격 저장소나 네트워크에 문제가 있어도 작업이 가능하다. 브랜치를 이용하면 기본 버전 관리 틀에 영향을 주지 않으면서 다양한 형태의 기능을 테스팅 가능하다. 파일의 변화를 스냅샷으로 저장하는데 스냅샷은 이전 스냅샷의 포인터를 가지므로 버전의 흐름을 파악할 수 있다.
'기타 > 기초 지식' 카테고리의 다른 글
[기초] 디지털 저작권 관리 DRM (0) | 2025.01.28 |
---|---|
[기초] 소프트웨어 패키징 (0) | 2025.01.27 |
[기초] 단위 모듈의 구현 (0) | 2025.01.26 |
[기초] 미들웨어 솔루션 명세 (1) | 2025.01.25 |
[기초] 인터페이스 방법 명세화 (1) | 2025.01.24 |