IBM의 Version Control  Solution 중 Rational 에서 만든 ClearCase라는 제품이 있다.
자세한 역사는 잘은 모르겠지만, 분산 환경과 복잡한 버전 관리에 있어 우수하다고 한다.

해야 할 일도 형상관리인지라, 이 ClearCase라는 것에 대한 파악이 필요하고,
마침 잘 설명되어 있는 PPT를 구해, 그 내용을 번역 하면서 정리해보도록 하겠다.
이 내용은  ftp.ccs.neu.edu/pub/people/laf/Talks-2000-nonames/ClearCase.ppt에서 원본을 다운로드 받을 수 있다.

소스 제어

소스 제어란, 간단하게 말하면, 변경사항이 발생하는 경우 새로운 버전을 매겨 등록 관리하는 것을 말한다. 그래서 변경 때 마다 버전이 매겨 지기 때문에, 어디서 무엇이 어느 시점에 추가/수정/삭제되었는지 판단되기 때문에, 문제가 발생할 때 어느 부분의 변경으로 발생되어 있는지 정확하게 추적할 수 있게 된다.

다음 그림에서 보듯 특정 사람이 특정 내용을 변경할 때, 먼저 버전 관리되는 항목 중 변경할 항목을 Check Out을 한다. 이는 무척 중요한 행위인데, Check Out을 하는 순간 그 시점의 코드는 그 사람의 소유가 되게 된다. 그리고 필요한 내용에 따라 변경한 다음 Check In을 하게 되면 버전 관리 도구는 자동으로 버전을 증가 시키고 서버에 등록하게 된다. 아래의 그림에 따르면 0번 버전의 내용을 Check Out 한 뒤 수정하고 다시 Check In을 통해 버전을 1 증가 시켜 1번 버전이 되는 것이다. 이처럼 변화를 준 뒤 Check Out-Check In을 함으로써 해당 버전 관리 내용의 버전은 증가되게 된다. 여기서 버전 관리를 하게 되는 주축, 최종 배포 버전이 되는 코드 내용이 바로 Main Line이라고 한다.

기존 버전 관리 소프트웨어 종류

사실 버전 관리 작업은 늘 필요로 했던 요청 사항이였고, 예전부터 이미 다양한 도구들이 만들어졌고 사용되고 있었다. 그 중 대표적인 것이 아래와 같다.

* ClearCase - Windows and UNIX
    - 지금 부터 살펴볼 도구.
* Visual SourceSafe – Windows
    - MS에서 주로 사용되는 버전 관리도구로 Visual Studio랑 가장 궁합이 잘 맞는 도구
* CVS – UNIX
    - Unix 계열의 제품으로 Client는 여러 플랫폼을 지원하지만, 서버는 Unix만 제공. linux용인 제품도 많다.
* CMVision - Unix and Windows
   - 모름
* Control CS - Unix and Windows
   - 모름

각 도구들은 현재 버전 관리 뿐만 아니라 파일 관리까지 제공하며 Text Diffrencing에서 부터 Binary Diffrencing까지 다양한 형태로 제공된다. 이 중 살펴볼 버전 관리도구가 바로 ClearCase이다.

ClearCase
ClearCase에는 무척 다양한 기능이 탑재 되어 있다. 모든 기능을 세세히 살펴보는 것은 어렵고 대표적인 기능들을 설명하도록 하겠다.

Overview
ClearCase의 개괄적인 대표적인 장점들은 아래와 같다.

  • 모든 종류의 파일과 디렉터리에 대한 버전 관리 기능을 제공한다.
  • 각 버전 이력에 대한 정보를 항상 기록하며 필요하면 버전 이력에 대한 보고서를 제시한다.
  • 매 Release 때 마다 정확한 코드 복제를 보장한다.
  • 최신 버전 코드 복제 및 추적 기능을 제공한다.
  • 강력한 코드 버전 분할(Branch) 및 통합(Merge) 기능을 제공한다.
  • 모든 소프트웨어 구성요소의 통합을 보장한다.

각 장점들을 기준으로 하나씩 설명하도록 하겠다.

ClearCase의 중요 기능 요소.
버전 관리를 위한 기능을 기본적인 기능은 다음과 같다.

  • 버전 분할(Branching)
  • 버전 통합(Merging)
  • 버전 라벨 처리(Labeling)

사실 각 상황이나 구성에 따라 복잡한 기능들이 많지만, 버전 관리 작업을 단순화 하면, 위의 3가지 매커니즘을 통해 버전을 관리하게 된다.  위의 기능들을 적용한 결과물을 트리형태로 표시하면 아래의 그림과 같다.


/Main 이 바로 버전 관리의 중요 지점이라고 보면 된다. 그 중 0, 1, 2, 3, … 이 버전을 의미한다. /Main을 계승하는 버전이 실제적으로 배포될 버전이며 그 버전들 중 최신 버전(그림에서는 5번이 된다.)을 컴파일 하여 제공하면 되는 것이다.  각 요소들의 파일, 디렉토리에 관계 없이 모든 요소들이 버전관리를 받게 된다. 또한 버전 관리를 받는 요소에 Check Out되는 순간 Read Only가 되어 다른 이들이 수정하지 못하게 끔 한다. 

BRANCH
라는 부분은 특정 버전에서 다른이가 Check-Out된 내용에 대한 수정작업을 하거나, 기능적인 테스트를 위해 임시적인 버전을 설정하여 구성할 때 사용된다. 위의 그림에서 보면 3번에서 /Rls2_bugfix라는 하위에 다시 0, 1, 2 식으로 새롭게 버전이 만들어지는데 이 처럼 /Rls2_bugfix 라는 형태로 구성되는 것을 Branch라고 한다. /Rls2_bugfix는 /Main의 3번 소스를 그대로 가져와 새롭게 변경하고 적용하는 것이다. 보통 이런 작업은 버그 수정 작업을 하거나, 검증되지 않은 새로운 기능 추가할 때 사용된다. /Main의 3번 소스를 기준으로 새로운 기능을 추가하여 자체적으로 컴파일 하고 실행해보고 이상이 없다면 /Main에 돌려주고, 문제가 있다면 폐기하는 일종의 임시 버전 같은 것이다. 이 Branch 작업은 무한대로 할 수 있으며 Branch된 버전에 새롭게 더 Branch 처리를 할 수 있다.

MERGE
란, BRACH된 하위 버전을 상위 버전에 포함시키는 작업이 된다. 통합 결과 이상이 없다면 이런 단계를 통해 버전에 합쳐지게 된다. 이 작업은 하위의 작업이 상위로 올라가는 형태로 추가되게 된다. 물론 통합될 필요가 없는 경우에는 하위 버전을 그냥 버릴 수 있다.

LABELS
는 각 버전에 이름을 붙이는 작업이다. 단순히 번호로 나열된 버전에 특정한 이름이나 버전을 붙여 해당 버전의 의미를 정확히 나타내는 것이다. 위의 예제에서는 Beta, Rls 1.0, Rls 2.0 …. 이런 식으로 붙여 해당 버전이 베타 버전 소스이다, 새로 Relase된 버전이다 이런 식으로 이정표를 새기는 작업을 하게 된다. Code Complete나 특정 개발 마일스톤 때 매겨지게 된다.

위의 기본 기능을 편리하게 할 수 있도록 ClearCase에서는 다음과 같은 기능들을 제공한다.

  • Check Out –> 편집 –> Check In 이라는 단순한 모델로 버전 관리를 한다.
  • 특별히 충돌하는 내용이 없는 변경사항에 대해 지능적인 Merging 기능을 제공하여 자동적으로 버전 통합(Merge) 해준다.
  • 그래픽 기반의 비교 및 통합(Merge) 도구를 제공한다.
  • Dynamic(동적) View, Snapshot(순간보존 형) View라는 모델을 제공해 상황에 맞는 형태로 작업할 수 있도록 제공한다.

View와 VOB

View
View란 ClearCase에서 제공하는 모델 중 하나로, 작업 공간 관리를 위한 기초 단위이다. 각각 개별적인 개발자 혹은 밀접한 작업자 그룹에서 독자적으로 작업하는 공간으로 VOB(Versioned Object Base)에서 필요한 사항들만 나타내는 부분이다. 프로젝트 전반적인 소스 코드가 있을 때, 각 개발자 혹은 독자 그룹 마다 주로 보는 파일 이나 디렉터리들이 다를 것이다. 그래서 전체 소스 코드 중 주로 보게 되는 항목들을 선택하여 볼 수 있도록 제공하는 부분이다. 그래서 프로젝트에 해당하는 파일이나 디렉터리를 모두 공유해서 사용하지만, 마치 개별적인 특정 폴더 및 파일을 보여주게 된다.

VOB(Versioned Object Base)
ClearCase에 각 요소들을 저장하는 저장장소로 모두 읽기 전용으로 제공된다. 네트워크 기반의 저장장소로써, 모든 이들의 소스를 저장하고 관리받는 기준 소스 정보들이다. 각 사용자들은 이 VOB를 공유하게 되며 수정할 때는 View에서 수정하게되며 최종적으로 변경 사항 적용될 때 View에서 VOB로 적용된다. Windows에서는 네트워크 드라이브로 UNIX에서는 Mount된 디렉터리로 제공된다.

View와 VOB의 관계
위에서는 단순히 텍스트로 나열하기만 해 조금 난해할 수 있는데, VOB와 View의 관계를 굳이 표현하면 아래와 같다.

즉 사용자의 환경에 따라 공통의 VOB 자료를 View의 설정만 다르게 해서 필요한 내용을 중심으로 표시하는 내용이다. 만일 개발자 1이 특정 소스를 변경했을 때 Check-In 하지 않는 이상 VOB에 반영되지 않기 때문에, 다른 이들은 간섭되지 않는다. 즉 최종 변경 후 Check In이 되어야 VOB에 반영되며 반영되어야 다른 이들에게도 전파가 되게 된다.

Configuration Specification
위에서 언급했을 때 사용자 별로, 버전 별로 보여주는 내용이 틀려지도록 할 수 있다고 했다. 이 때 이런식으로 보여질 수 있도록 View내에 값을 설정할 수 있는데, 그 설정을 Configuration Specification(구성 정의?)라고 한다. 이 안에 마치 SQL의 쿼리 처럼 규칙에 필요한 사항들에 해당하는 값을 넣으면 전체 VOB 내용 중 Filter되어 해당 View에 전달되게 된다. 이 값은 Create View 할 때 기본값이 설정되며 필요시 수정하여 변경할 수 있다.

기본 값은 아래와 같다.

element * CHECKEDOUT
element * \main\LATEST

위의 내용을 의미하는 바는 Check Out된 항목 들과, Main 의 LASTEST 항목들을 모두 가져오게 된다.

View의 종류
지금까지 View가 무엇인지를 언급했다면 이번에는 View의 종류를 언급하려 한다.
개발 환경에 따라 다르게 설정하여 진행하게 되는데, 여기에는 2가지 종류가 있다.

  • Snapshot View
  • Dynamic View

Snapshot View
Snapshot이라는 뜻 때로 특정 시점의 그대로의 내용을 표시하는 View이다. 즉 한번에 모든 설정과 값들을 사용자의 환경에 그대로 붑고, VOB와의 통신은 끊은 채 독자적으로 관리하는 View이다. 보통 네트워크로 ClearCase와 항상 연결되기 어려운 환경이거나, 공동작업이 거의 없는 부분에 대한 수정하는 경우 많이 사용된다.

Dynamic View
각 요소들을 투명하게 연결하여, 항상 최신 버전을 유지하고, 변경된 사용만 업데이트 하기 때문에 적은 양만 업데이트 하며, 빌드에 대한 감사등을 지원한다. 보통 네트워크 드라이브와 같이 상시 연결된 채널을 구성하게 된다.

Snapshot – Dynamic View 의 유사점

  • Configuration Specification 을 통해 버전 요소들을 선택할 수 있다.
  • Check Out – 편집 – Check In 의 기본 행위로 동작한다.
  • Check Out한 대상을 Reserved(예약)/(Unreserved)비 예약 상태로 설정할 수 있다.

Snapshot – Dynamic View의 차이점

  • Snapshot은 버전 자체가 만료될 수 있기 때문에 주기적인 서버 동기화 작업이 필요하다.
  • Dynamic의 경우 Check Out 하는 경우 서버와의 항상 동기화 작업을 수행하기 때문에, VOB에서 굳이 최신 버전을 일일이 받아 올 필요가 없다.
728x90

+ Recent posts