Programming/생산성&도구

01. 소프트웨어 형상 관리(SCM), 버전 관리 시스템(VCS)

엘레나림 2019. 7. 19. 02:26

첫번째로 먼저 형상관리와 버전관리의 정의를 살펴보고, 왜 이것이 필요한 지, 어떤 절차를 거치는지 알아보자.

 

소프트웨어 형상 관리 (SCM, Software Configuration Management)
소프트웨어 개발 과정에서 소프트웨어의 변경사항을 관리하고 소프트웨어 형상을 체계적으로 관리하고 유지하는 기법.

버전 관리 시스템 (VCS, Version Control System)
소프트웨어 소스 코드만을 관리하는 내역을 버전 관리라 정의. 형상 관리보다 좁은 개념으로 소스 코드만을 관리하는 시스템을 말한다. 하지만 일반적으로 형상 관리와 동일한 의미로 사용되고 있다.
형상
소프트웨어 개발 단계의 각 과정에서 만들어지는 프로그램을 설명하는 문서, 데이터 등을 통칭하는 말

사전적으로 소프트웨어 형상 관리란? 소프트웨어 개발 생명주기 전반에 걸쳐 생성되는 모든 산출물의 종합 및 변경 과정을 체계적으로 관리하고 유지하는 일련의 개발 관리 활동으로, 소프트웨어의 가시성과 추적 가능성을 부여하여 제품의 품질과 안정성을 높이는 기법이다.

 

 

형상관리원래 더 큰 개념이지만, 일반적으로 버전 관리 (version control, revision control), 소스 관리 (source control), 소스 코드 관리 (source code management, SCM)와 같은 의미로 사용된다. 즉, 동일한 정보(프로그램)에 대한 여러 버전을 관리하는 것으로, 소프트웨어 공학에서는 팀 단위로 개발 중인 소스 코드나 청사진(설계도) 등 디지털 문서의 작업 단계별 버전을 관리하는 작업으로 정의된다.

 

 

그럼 버전관리시스템을 왜 사용할까? 사용했을 때의 장점은? 

우리는 작업 중 파일을 되돌리거나 수정내용을 비교해보며 사용하고 싶을 때가 많이 있다. 따라서 시간에 따른 파일 변화를 추적할 수 있는 시스템이 필요하다. VCS를 사용하면 파일을 잃어버리거나 잘못 고쳤을 때 쉽게 복구가 가능하다. 

또한 현재 개발중인 버전과 릴리즈된 버전 등 하나의 프로젝트를 여러 버전으로 분리할 수 있기 때문에 이전 버전의 버그 수정도 용이하다.

처음엔 각자 자신의 로컬 컴퓨터에서 파일 변경 정보를 관리했다. 프로젝트를 진행하다보면 다른 개발자와 작업해야 하는 경우가 많은데 서로서로 수정한 코드를 제대로 알 수 없는 문제가 생긴다. 중복된 코드를 작성할 수 도 있으며 이동하면서 소스가 유실되는 경우도 있다. 그래서 파일 변경 정보 데이터베이스를 서버에 놓고 관리하기 시작했고 소스코드를 안전하게 보관할 수 있게 되었다.

 

버전관리를 위한 여러 시스템들이 있지만 개략적인 구조는 다음과 같다.

 

버전 관리 시스템의 구조

 

버전관리 시스템은 크게 클라이언트 - 서버 모델과 분산 모델, 2가지로 나뉜다.

 1) 클라이언트-서버 모델 버전관리 시스템(CVCS)

하나의 서버(중앙 저장소)를 공유하는 각각의 클라이언트(개발자)가 저장소의 일부분만 사용(checkout)하는 형태이다. 개발자들은 자신이 작업하는 부분만 로컬에 임시로 저장한 후 개발하는 형태인데, 이 모델은 중앙 저장소에서 프로젝트 관리의 모든 것을 처리하기 때문에 서버에 문제가 생겨 데이터가 날아가면 불완전한 로컬 파일만 남게 된다는 단점이 있다. 잘 알려진 CVS나 SVN(SubVersion), Perforce가 이런 형태의 형상관리 시스템이다. 

 

Client - Server 모델 버전 관리 시스템

 2) 분산 모델(DVCS)

분산 모델은 프로젝트에 참여하는 모든 클라이언트(개발자)가 전체 저장소에 대한 개별적인 로컬 저장소를 갖고 작업하는 형태이다. 클라이언트-서버 모델과는 다르게 클라이언트(개발자) 각자가 온전한 전체 저장소의 사본을 로컬에 가지게 된다.(Clone)  대부분의 DVCS 환경에서는 리모트 저장소가 존재하기 때문에 동시에 다양한 그룹과 다양한 방법으로 협업이 가능하다. 이런 종류의 시스템 중 가장 널리 알려진 것이 Git이다.

분산 모델 형상 관리 시스템

 

[출처] Git(형상 관리) 개요|작성자 Benny

https://git-scm.com/book/ko/v2/

 


형상관리 또는 버전관리가 무엇인지, 왜 이것이 필요하게 되었는지, 형상관리시스템의 구조는 어떤 것이 있는지 알아보았다. 다음 포스팅은 가장 많이 사용하는 버전관리시스템이자 분산 모델 형상 관리 시스템 중 하나인 Git에 대해 자세히 알아보기로 하자.