관련 출처 :
- [위키백과] 버전 관리
- [위키백과] 구성 관리
- [위키백과] 포크 (소프트웨어 개발)
- [위키백과] CVS
- [위키백과] 서브버전
- [위키백과] 깃 (소프트웨어)
- [생활코딩] 지옥에서 온 Git
- [깜찍이닷(prosports0)님의 블로그] 버전관리 시스템의 개요 및 주요 용어정리
버전 관리(Version Control, Revision Control), 소스 관리(source control), 소스 코드 관리(source code management, SCM)란 동일한 정보에 대한 여러 버전을 관리하는 것을 말한다.
주로 팀 단위로 개발 중인 소스 코드나, 청사진 같은 설계도 등의 디지털 문서를 관리하는데 사용된다. 그러한 문서의 변경 사항들에 숫자나 문자로 이뤄진 ("개정판 번호"나 "개정판 레벨"이라고도 불리는) "버전"을 부여해서 구분한다. "버전"을 통해서 시간적으로 변경 사항과 그 변경 사항을 작성한 작업자를 추적할 수 있다. 간단한 버전 관리 방법으로는 처음 작성한 코드에 버전 번호 1을 부여한다. 변경 사항이 생기면, 버전 번호를 2로 증가시킨다. 이처럼 추후 변경 사항이 발생 시마다 버전 번호를 1씩 증가시킨다.
형상 관리 소프트웨어 엔지니어링에서 버전 관리는 일반적인 소프트웨어 소스 코드만을 관리하는 내역을 주로 버전 관리라고 정의하게 된다. 반면, 소프트웨어 구성 관리(Software Configuration Management) 또는 형상 관리는 소프트웨어의 변경사항을 체계적으로 추적하고 통제하는 것으로, 일반적인 단순 버전관리 기반의 소프트웨어 운용을 좀 더 포괄적인 학술 분야의 형태로 넓히는 근간을 이야기한다. 소프트웨어 소스 코드 뿐 아니라 개발 환경, 빌드 구조 등 전반적인 환경 전반적인 내역에 대한 관리 체계를 정의하고 있다. 즉, 하나의 소프트웨어 산출물(binary)을 생성하기 위해 필요로 하는 아이템들과 공정 방식의 정의, 그리고 재생성을 위한 전반적인 환경까지 베이스라인(baseline)화하여 관리하는 방식 전체를 의미하며 이를 체계화한 사항을 형상 관리 시스템으로 정의하고 있다. |
(1) 사용 이유
거의 대부분의 주요 소프트웨어 개발 프로젝트는 아직도 소프트웨어의 설계도라 할 수 있는 소스 코드 작성이 주요한 부분이 되며 이러한 소스 코드는 기업체 또는 연구소의 핵심 역량이 응축된 핵심 자산이다. 따라서 어떠 형태로든 소스 코드를 백업하여 분실의 위험에서 보호하고 개정 전후 내용을 파악하여 추후 발생할지도 모를 오류 수정에 대비하는 절차가 필요하다.
버전 관리 소프트웨어는 조직의 핵심 자산인 소스 코드의 개정과 백업 절차를 자동화하여 오류 수정 과정을 도와줄 수 있는 시스템으로 거의 모든 소프트웨어 개발 프로젝트에서 필수적인 요소로 인식되고 있다. 버전 관리 소프트웨어를 사용하는 경우, 고정된 파일의 이름을 사용하면서 변경 사항은 컴퓨터 또는 소프트웨어가 관리하도록 할 수 있다.
아래의 예시와 같은 경우를 위해 버전 관리 시스템이 사용된다.
- 오류 복구
- 이전 버전으로의 복구
- 개별 수정 부분에 대한 전체 동기화 과정의 자동화
- 소스 코드의 변경 사항 추적
- 안정적인 대규모 수정 작업
- 가지내기(Branch)를 통해 프로젝트에 미치는 영향을 최소화하는 동시에 새로운 부분 개발
- 접붙이기(Merge)를 통해 검증 끝난 개발 부분을 본류(trunk)에 통합
다양한 상황에서 사용되지만 정리하자면, 아래와 같이 크게 세 가지 측면을 위해 사용된다.
Backup
Recovery
Collaboration
(2) 개념 및 용어
Repository | 관리 대상의 모든 파일, 관련 버전, 변경 이력 정보를 저장하는 공유 데이터베이스 - Local Repository : 현재 개발 환경에서의 파일 저장소 - Remote Repository : 서버상의 파일 저장소 |
Trunk |
주류, 프로젝트의 중심 |
Branch | 주류에서 파생된 프로젝트, 개발 라인 - Master Branch : 메인 개발 라인 |
Tag | 특정 시점의 프로젝트 전체를 복사 및 보관 |
Revision |
저장소에 저장된 파일의 버전 새롭게 저장소에 커밋할 경우, 해당 파일의 개정 번호 증가 |
Check Out |
저장소에서 선택한 파일 또는 디렉토리를 현재 작업 환경으로 복사 디렉토리의 경우, 포함된 파일 및 하위 디렉토리 모두 체크 아웃 버전 관리를 위한 파일이 포함됨 (저장소와의 연결을 위함) |
Check In, Commit |
작업 파일 또는 디렉토리의 변경 사항을 저장소에 새 버전으로 저장 |
Conflict | 동일한 파일에 대한 변경 사항 확인 충돌이 발견할 경우, 해결이 완료되어야 커밋 가능 |
Import |
(버전 관리되고 있지 않은) 로컬 디렉토리의 파일을 처음으로 저장소에 저장 |
Export | 체크 아웃과는 달리, 버전 관리 파일을 제외한 소스 파일만을 받아옴 |
Change log, History |
수정 기록 |
Update, Sync | 동기화, 저장소에 있는 최신 버전의 파일 또는 디렉토리 가져옴 |
Fork | 하나의 소프트웨어 소스 코드를 통째로 복사하여 독립적인 새로운 소프트웨어 개발 허용되는 라이선스를 따라야 함 |
(3) 프로그램 종류
CVS
CVS(Concurrent Versions System, 동시 버전 시스템)는 클라이언트-서버 구조로 이루어진 동시 버전 관리 시스템이다. CVS는 아직도 쓰이는, 리비전 관리 시스템(Revision Control System)이라 불린 초기 버전 관리 시스템에서 태어났다. CVS는 오픈 소스 프로젝트에서 널리 사용되었으나, 아래와 같은 한계를 맞아 CVS를 대체하는 Subversion(SVN)이 개발되었다.
- CVS 저장소의 파일들은 이름을 바꿀 수 없다. 제거하고 나서 다시 추가해야 한다.
- CVS 프로토콜은 디렉터리의 이동이나 이름 변경을 허용하지 않는다. 서브 디렉터리의 파일은 모두 지우고 다시 추가해야 한다.
- 아스키 코드로 된 파일 이름이 아닌 유니코드 파일을 제한적으로 지원한다.
CVS - Concurrent Version System (CVS 공식 홈페이지)
SVN
서브버전(Subversion)은 자유 소프트웨어 버전 관리 시스템이다. 서버-클라이언트 모델을 따르며 서버는 작업하는 컴퓨터내에 둘 수도 있고, 전산망에 연결된 별도의 컴퓨터에 두고 사용할 수도 있다. CVS와 매우 비슷하면서도 CVS에 존재하지 않는 기능을 제공하고 버그를 수정한 오픈 소스 버전 관리 시스템이다. 현재는 아파치 최상위 프로젝트로서 전 세계 개발자 커뮤니티와 함께 개발되고 있다.
서브버전은 오픈소스 커뮤니티에 잘 알려져 있고, Apache Software Foundation, KDE, GNOME, Free Pascal, GCC, 파이썬, Ruby, Samba, Mono와 같은 많은 오픈 소스 프로젝트에 사용되고 있다. 또한, 네이버 개발자 센터, SourceForge.net, Tigris.org, Google code에서는 오픈소스 프로젝트를 위해 서브버전 호스팅을 하고 있다. BountySouce System은 오로지 이것만 사용한다.
Apache Subversion (SVN 공식 홈페이지)
Git
깃(Git)은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다. 기하학적 불변 이론을 바탕으로 설계됐고, 분산 버전 관리 시스템으로서 빠른 수행 속도에 중점을 두고 있는 것이 특징이며 데이터 무결성, 분산, 비선형 워크플로를 지원한다. 다른 대부분의 분산 버전 관리 시스템이 클라이언트-서버 시스템인 것과는 달리, 모든 노드의 모든 깃 디렉터리는 네트워크 접속이나 중앙 서버와는 독립적으로 동작하는 완전한 이력 및 완전한 버전 추적 기능을 갖춘 저장소이다.
깃은 많은 GUI를 지원하는 것이 특징이다. 현재 소스트리, GitHub Desktop 등의 여러 GUI를 사용할 수 있다. 또한 Cgit, Gitweb 등의 웹 인터페이스와 터미널 인터페이스도 존재한다.
Git - Fast Version Control System
'Study > 용어' 카테고리의 다른 글
SSL 과 TLS (0) | 2020.03.22 |
---|---|
VPN (0) | 2019.02.12 |
젠킨스 (Jenkins) (0) | 2018.08.23 |
포터블 (Portable) (0) | 2018.08.23 |
호스팅 (0) | 2018.08.21 |
댓글