분산형 버전 관리 가이드


Plastic Book의 중앙 집중형 및 분산형 장을 읽고 분산형 개발의 기초에 대해 알아보십시오.

이 가이드를 사용하여 패키지 복제와 직접 복제 비교, 여러 서버에 걸친 인증, 명령줄 및 GUI를 사용한 복제 방법, 브랜치 탐색기로 분산형 리포지토리를 시각화하는 방법 등에 대해 알아보십시오.


복제 모드

다음과 같은 두 가지 복제 모드가 지원됩니다.

  • 서버 간 직접 복제 - Plastic SCM 클라이언트는 대상 서버에게 소스 서버에서 브랜치를 복제하도록 지시합니다. 서버는 인터넷이나 인트라넷 연결로 통신하여 데이터를 복제합니다.
  • 패키지 기반 복제 - Plastic SCM 클라이언트가 소스 서버에 연결되고 복제 패키지를 생성합니다. 생성된 패키지는 USB 드라이브 등을 사용해 사용자가 직접 전달하고 나중에 대상 서버에서 임포트합니다.

다음 그림에는 지원되는 두 가지 복제 모드가 나와 있습니다.

복제 모드

패키지 기반 복제 모드에서는 보안 제한 때문에 직접 연결이 불가능한 서버의 동기화를 유지할 수 있습니다.


명령줄에서 복제

위에서 설명한 모든 복제 시나리오와 방법은 Plastic SCM 명령 pushpull로 관리할 수 있습니다.

cm pull srcbranch destinationrepos

여기서 srcbranch는 복제 대상 브랜치와 해당 리포지토리를 식별하는 브랜치 사양이고, destinationrepos는 브랜치가 복제되는 리포지토리입니다.


직접 서버 복제

브랜치를 london:8084 서버의 코드 리포지토리에서 bangalore:7070code_clone 리포지토리로 복제한다고 가정하겠습니다. 명령은 다음과 같습니다.

cm pull main@code@london:8084 rep:code_clone@bangalore:7070

브랜치뿐만 아니라 전체 리포지토리를 복제하려는 경우 clone 명령을 사용하면 됩니다.

cm clone code@london:8084 code_clone@bangalore:7070

복제 패키지

패키지를 사용하여 브랜치를 복제하려면, 먼저 복제 패키지를 생성한 뒤 다른 서버로 패키지를 임포트합니다.

서버 box:8084의 리포지토리 코드에서 브랜치의 복제 패키지를 생성해야 한다고 가정하겠습니다.

cm push br:/main@code@box:8084 --package=box.pk

이전 명령을 사용하면 주 브랜치의 모든 콘텐츠가 포함된 box.pk라는 패키지가 생성됩니다.

나중에 이 패키지는 리포지토리 서버 berlin:7070에서 임포트됩니다.

cm pull rep:code@berlin:7070 --package=box.pk

인증

복제가 진행되는 동안 서로 다른 서버들 간에 상호 통신이 필요합니다. 그렇게 되면 서로 다른 인증 모드를 실행하는 서버들은 데이터를 교환해야 합니다.

이를 위해 복제 시스템에서는 다양한 인증 옵션을 설정할 수 있습니다.


인증 모드 설정

다음 그림에서는 클라이언트와 두 대의 서버가 있는 일반적인 시나리오를 볼 수 있습니다. 관련된 모든 Plastic SCM 구성요소는 LDAP에서 작동하도록 구성되며, 같은 LDAP 자격 증명을 공유하기 때문에 변환할 필요가 없습니다.

다음 두 가지 수준에서 인증이 발생합니다.

  1. 대상 서버에 연결하려면 클라이언트를 인증해야 합니다. 그림에서 대상 서버는 berlin입니다.
  2. 그런 다음 복제할 브랜치(샘플에서는 main)에 대한 정보를 가져오려면 berlinlondon 서버에 연결해야 합니다.

두 서버가 같은 인증 메커니즘을 사용하지 않거나 같은 LDAP 권한에 대해 인증하지 않는 경우, 2단계가 실패합니다.

분산형 시스템 인증 다이어그램

아래 그림은 사용자/비밀번호 인증을 사용하도록 london 서버를 구성한 시나리오를 보여 줍니다. 이 경우 2단계에서 서버 간 인증이 이뤄지지 않기 때문에 그림 상단과 같은 명령은 실패하게 됩니다.

서버 간 복제할 자격 증명 지정

이 문제를 해결하기 위해 복제 시스템에는 서버 간에 사용할 수 있는 인증 자격 증명을 지정할 수 있는 기능이 있습니다. 이 예에서 클라이언트는 berlin 서버에 london 서버와 통신할 수 있는 사용자 및 비밀번호를 지정할 수 있습니다.

다음 그림은 소스 서버에서 사용자/비밀번호를 사용할 때 인증 자격 증명을 지정할 수 있는 두 가지 방법을 보여 줍니다.

인증 자격 증명을 지정할 수 있는 두 가지 방법

첫 번째 옵션은 명령줄에서 모드와 사용자 및 비밀번호(UP용)를 지정하는 것입니다.

두 번째 옵션은 인증 파일을 사용하는 것으로, 인증 자격 증명을 반복적으로 사용해야 할 때 유용합니다. 그림에서 알 수 있듯이 인증 파일은 다음 두 줄을 포함하는 간단한 텍스트 파일입니다.

  • 인증 작업 모드 - UPWorkingMode, LDAPWorkingMode, NameWorkingMode, ADWorkingMode, NameIDWorkingMode
  • 인증 모드에 대한 특정 인증 데이터 - 두 번째 줄에 지정된 데이터는 구성 파일 client.conf의 SecurityConfig 섹션에 있는 데이터와 정확하게 일치합니다.

이제 다음 그림과 같이 반대 방향, 즉 berlin 서버에서 london 서버로 복제해야 한다고 가정합니다. LDAP 서버(이 경우 LDAP를 통해 액세스하는 Active Directory)에 연결하기 위한 매개 변수가 지정됩니다. LDAP에서 인증 파일은 일반적으로 프로세스를 쉽게 만드는 데 사용됩니다.

LDAP 서버와 통신하는 UP 서버

참고: 복제 패키지를 통해 복제하는 경우, 클라이언트가 익스포트 또는 임포트 작업의 수행 여부에 따라 클라이언트를 소스 또는 대상 서버에 연결할 수 있어야 합니다.

사용자 및 그룹 변환

서로 다른 보안 모드를 사용하는 서버 사이에서 복제를 수행할 때 문제가 되는 것은 인증뿐만이 아닙니다. 사용자 및 그룹 ID를 서로 다른 보안 모드 사이에서 변환해야 합니다.

다음 그림의 샘플은 사용자/비밀번호 인증 모드에서 LDAP 기반 인증 모드로 복제를 시도합니다. UP 노드의 사용자 목록은 일반 이름을 저장하지만, LDAP 서버의 사용자 목록은 SID를 저장합니다. 복제하는 특정 개정의 소유자를 repA에서 repB로 복사해야 하는 경우, repA의 사용자 목록에서 사용자 또는 그룹을 가져와 repB의 사용자 목록에 추가합니다. repA에서 가져온 이름을 repB의 목록에 바로 추가하면 나중에 berlin 서버가 LDAP 식별자를 해결하려고 할 때 잘못된 식별자를 찾아 문제가 발생할 수 있습니다. 사용자/비밀번호 모드의 사용자 식별자가 LDAP 디렉터리의 사용자 식별자와 일치하지 않고 복제된 리포지토리에서 잘못된 사용자 이름이 저장되기 때문입니다.

이 문제를 해결하려면 식별자를 변환해야 합니다.

복제에서 사용자 및 그룹 변환

Plastic 복제 시스템은 세 가지 다른 변환 모드를 지원합니다.

  • 복사 모드 - 기본 동작입니다. 복제 시 보안 ID를 리포지토리 간에 복사합니다. 이 모드는 다른 리포지토리를 호스팅하는 서버가 같은 인증 모드를 사용하는 경우에만 사용할 수 있습니다.
  • 이름 모드 - 이름을 기반으로 보안 식별자 간 변환이 이루어집니다. 이전 그림의 샘플에서 사용자 danielrepA에서 repB로 이름으로 변환해야 한다고 가정합니다. repB에서 Plastic SCM 서버는 이름이 daniel인 사용자를 찾으려고 시도하고 필요한 경우 해당 이름을 LDAP SID에 추가합니다.
  • 변환 테이블 - 이 모드 역시 이름을 기반으로 변환하지만, 대신 테이블을 사용합니다. 사용자가 지정한 테이블이 대상 서버에 이름을 연결할 방법을 알립니다. 소스 사용자 또는 그룹 이름을 어떻게 대상 이름으로 변환해야 하는지 알려 줍니다. 다음 그림에서는 변환 테이블을 구축하는 방법과 다른 인증 모드 간 변환 방법을 볼 수 있습니다.

변환 테이블 설명

참고: 변환 테이블은 한 줄에 두 개의 이름을 세미콜론(";")으로 구분하여 작성한 일반 텍스트 파일입니다. 첫 번째 이름은 변환할 사용자 또는 그룹(소스)을 나타내고 두 번째 이름은 대상을 나타냅니다.

그래픽 인터페이스에서 복제

복제는 명령줄 인터페이스(CLI)와 Plastic 그래픽 사용자 인터페이스(GUI) 툴 모두에서 가능합니다. 복제는 주로 브랜치와 관련되므로 브랜치 옵션의 하위 메뉴에서 가능한 모든 작업을 확인할 수 있습니다. 이 항목에서는 GUI에서 가장 일반적인 복제 작업을 수행하는 방법에 대해 설명합니다.


복제 작업

GUI에서 다음 작업을 수행하여 복제 및 분산형 협업이 구성되었습니다.

  1. 브랜치 작업:
    1. 선택한 브랜치 내보내기
    2. 선택한 브랜치 가져오기
    3. 원격 브랜치 가져오기
  2. 패키지 작업:
    1. 현재 브랜치에서 복제 패키지 생성
    2. 브랜치에서 복제 패키지 생성
    3. 복제 패키지 임포트하기

다음 그림에는 지원되는 여러 작업이 나와 있습니다. 명령줄에서는 모든 작업이 단일 명령으로 실행되지만, GUI에서는 내보내기(서버에서 대상으로 변경사항 이동)와 가져오기(원격 리포지토리에서 사용자 리포지토리로 변경사항 가져오기) 작업이 구분됩니다.

GUI 복제 작업


복제 메뉴

앞에서 설명한 대로, 모든 복제 작업을 브랜치 메뉴에서 사용할 수 있습니다(아래 그림 확인).

이 브랜치 내보내기, 이 브랜치 가져오기이 브랜치에서 복제 패키지 생성는 브랜치 뷰에 현재 선택되어 있는 브랜치와 관련된 옵션입니다.

원격 브랜치 가져오기, 복제 패키지 생성복제 패키지 임포트 등 나머지 옵션들은 현재 브랜치에 제한되지 않고 브랜치 메뉴 아래에 위치하여 모든 복제 옵션을 다 같이 유지하는 일반 복제 작업입니다.

GUI 브랜치 메뉴의 복제 옵션


원격 리포지토리로 변경사항 내보내기

변경사항을 원격 리포지토리로 내보내고 싶을 때마다 브랜치 메뉴에서 이 브랜치 내보내기를 선택하십시오. 변경사항 내보내기를 하는 것은 선택된 브랜치의 변경사항을 원격 리포지토리로 전송한다는 뜻입니다.

변경사항 내보내기

  • 서버 - 아직 대상 리포지토리에서 복제해 본 적이 없다면 서버 대상 이름 또는 서버 대상 ip와 포트 번호를 입력해야 합니다.
  • 서버 탐색 - 리포지토리에 이전 복제를 나열하고 구성된 프로필에 사용 가능한 서버의 목록을 나열합니다(고급 옵션 확인).
    브랜치를 가져올 때 브랜치가 어디에서(서버 또는 리포지토리) 왔는지 알 수 있도록 기록이 리포지토리에 생성됩니다. 이 서버는 나중에 내보내기 및 가져오기 작업 시 가능한 서버로 사용됩니다.
  • 복제 대상에 존재하는 리포지토리 - 브랜치가 이미 대상 리포지토리에 존재하는 경우 변경사항이 동기화됩니다. 대상 리포지토리에서 체인지 세트 충돌이 발생할 경우 경고 메시지가 나타납니다. 그런 다음, 병합 충돌이 해결되면 개발자가 브랜치를 로컬 서버로 가져온 뒤 내보내 변경사항을 조정해야 합니다.
    브랜치가 대상 리포지토리에 존재하지 않는 경우 새 브랜치가 생성됩니다(소스 리포지토리에서 사용되는 동일한 GUID가 식별).
  • 리포지토리 탐색 - 대상 서버의 리포지토리를 탐색합니다. 서버에 대한 접근 권한이 없다면 고급 옵션에서 프로필을 선택하거나 생성해야 합니다.

브랜치와 원격 변경사항의 동기화

브랜치를 다른 리포지토리로 내보내면 브랜치를 원격으로 수정할 수 있습니다. Plastic SCM을 사용하다 보면 브랜치에 원격으로 적용된 변경사항을 가져오고 싶을 때가 있습니다. 변경사항을 가져오려면 복제 브랜치 메뉴에서 이 브랜치 가져오기 작업을 사용해야 합니다.

다음 그림에 표시된 다이얼로그 박스는 변경사항을 내보내는 데 사용되는 다이얼로그 박스와 매우 비슷하지만, 아래 다이얼로그 박스는 서버가 작업 대상으로 오른쪽에 표시됩니다.

원격 브랜치에서 변경사항 가져오기

원격 브랜치에서 변경사항을 가져올 때 두 위치에서 충돌하는 체인지 세트가 있는 경우, 하위 브랜치가 생성될 수 있습니다.


원격 브랜치 임포트

복제 도중의 다른 공통 시나리오는 변경하거나 자식 브랜치를 생성하기 위해 원격 리포지토리의 브랜치를 사용자의 리포지토리로 임포트하는 것입니다.

임포트하려면 원격 브랜치 가져오기 옵션을 사용합니다. 다음 그림에 보이는 다이얼로그 박스가 표시됩니다. 이번에는 서버의 소스 서버, 리포지토리, 브랜치, 대상 리포지토리를 선택할 수 있습니다.

원격 브랜치 가져오기


원격 인증 관리

인증 장에서 설명한 대로, 여러 Plastic SCM 서버에서 다양한 인증 모드를 사용할 수 있습니다. 원격 서버에 연결하려고 할 때는 현재 프로필을 기본값으로 사용하게 됩니다(서버에 연결하는 데 사용되는 구성). 하지만 기본 프로필이 원격 서버에서 유효하지 않은 경우가 있습니다.

Plastic SCM을 인증 모드가 다양한 원격 서버와 연결이 되도록 구성하려면 복제 다이얼로그의 고급 옵션 버튼을 사용하십시오. 다음 그림에서와 같은 다이얼로그가 표시됩니다.

고급 옵션 다이얼로그 - I3 시각 테마

현재 선택된 프로필(스크린샷에 있는 기본 프로필), 변환 모드(자세한 내용은 인증 장 참조), 변환 테이블(선택사항)이 다이얼로그 박스에 표시됩니다.

이전 복제 작업에서 생성된 여러 인증 프로필을 획득하여 나열하거나 원격 서버 구성 프로필 편집 상자의 오른쪽에 있는 탐색 버튼을 눌러 새 인증 프로필을 만들 수 있습니다.

아래 그림과 같이 프로필을 선택, 편집, 생성, 제거할 수 있는 다이얼로그 박스가 표시됩니다.

프로필 선택 다이얼로그 - I3 시각 테마

참고: 서버를 변경할 때마다 복제 다이얼로그 박스가 자동으로 프로필을 선택하려고 시도합니다. 복제 다이얼로그 박스는 제공된 서버 정보를 바탕으로 가장 적합한 프로필을 찾습니다.

복제 프로세스 실행

지금까지의 모든 단계는 복제 프로세스를 설정하는 데 중점을 두었습니다. 작업을 올바르게 구성한 후 복제 버튼을 누르면 아래 그림과 같이 복제 진행 다이얼로그 박스가 표시됩니다.

복제 작업은 다음 세 가지 주요 상태로 나뉩니다.

  • 메타데이터 가져오기 - 소스 서버에서 발생합니다.
  • 메타데이터 내보내기 - 대상 서버에서 발생합니다.
  • 개정 데이터 전송 - 데이터가 소스에서 대상으로 전송될 때 두 개의 서버를 사용합니다.

언제든지 취소 버튼을 눌러 작업을 취소할 수 있습니다.

복제 작업이 완료되면 생성된 객체 수에 관한 세부사항이 있는 요약이 표시됩니다.

복제 작업 진행 - I3 시각 테마


패키지 생성

리포지토리의 브랜치, 또는 연결할 수 있는 서버의 브랜치에서 복제 패키지를 생성할 수 있습니다. 브랜치 뷰에서 선택한 브랜치의 패키지를 생성하려면 이 브랜치에서 복제 패키지 생성을 클릭합니다.

원격 브랜치에서 패키지를 생성하려면 복제 메뉴에서 복제 패키지 생성을 클릭합니다.

GUI에서 복제 패키지 생성

위 그림은 패키지 생성 다이얼로그를 보여 줍니다. 이는 선택한 브랜치에서 해당 브랜치의 모든 데이터 및 메타데이터가 담길 복제 패키지를 생성합니다. 복제 패키지는 직접 연결이 불가능할 때 서버 간 복제에 사용할 수 있습니다.


복제 패키지 임포트

복제 메뉴에서 복제 패키지 임포트를 선택하고 임포트할 패키지 파일을 선택합니다. 다음 그림의 다이얼로그 박스가 표시됩니다.

복제 패키지 임포트


분산형 브랜치 탐색기

브랜치 탐색기는 Plastic SCM GUI의 핵심 기능 중 하나로, 최근 릴리스에서는 분산형 시나리오를 처리할 수 있도록 크게 개선되었습니다. 따라서 이제는 이름을 분산형 브랜치 탐색기라고도 하며 약칭은 DBrEx입니다.


DBrEx 작동 원리

아래에 보이는 대로, 하나는 중앙 서버에서 실행되고 다른 하나는 노트북에서 실행되는 Plastic SCM 서버 두 개가 있다고 간주합니다.

노트북에서 실행되는 서버가 먼저 중앙에서 브랜치를 복제했습니다. 이후 task002가 생성되었고 개발자가 이를 사용했습니다. 특정 시점에서 이 시나리오는 다음과 같습니다.

두 서버를 사용하는 분산 시나리오

DBrEx는 여러 소스에서 데이터를 수집한 후, 다음 그림과 같이 단일 다이어그램에 체인지 세트와 브랜치를 렌더링하여 분산 다이어그램을 렌더링할 수 있습니다.

DBrEx 초안

DBrEx는 여러 소스를 결합하여 다양한 소스에서 수집한 정보로 인터랙티브 다이어그램을 작성합니다.


DBrEx에서 여러 리포지토리 소스 렌더링하기

하나 이상의 복제된 리포지토리를 같은 DBrEx 다이어그램으로 결합하는 여러 옵션이 있습니다. 첫 번째 리포지토리는 선택한 복제 소스에서 오는 모든 체인지 세트와 브랜치를 포함하는 결합된 렌더를 만드는 데 사용됩니다. 다음 그림은 다이어그램 구성을 어떻게 시작하는지 보여 줍니다.

복제 소스 탭에는 DBrEx에서 렌더링 중인 리포지토리에서 변경사항을 가져오는 데 사용된 리포지토리(또는 활성 리포지토리로 변경사항을 내보낸 리포지토리)가 표시됩니다.

DBrEx에서 원격 리포지토리를 결합하는 옵션

하나 이상의 복제 소스를 클릭하면(원격 데이터 표시 체크박스 클릭) 아래 그림과 같이 분산 다이어그램이 렌더링됩니다. 분산 다이어그램은 확장되어 원격 리포지토리 정보를 포함합니다.

이처럼 분산형 브랜치 탐색기를 사용하면 새로운 방법으로 프로젝트와 브랜치가 서로 다른 복제본에서 어떻게 변화하는지 파악할 수 있습니다.

DBrEx에서 복제 작업을 실행할 수도 있기 때문에 이제 DBrEx에서 렌더링된 원격 브랜치를 선택하고 이 브랜치 가져오기를 클릭하여 쉽게 원격 브랜치를 가져올 수 있습니다. 원격 브랜치 및 체인지 세트는 "비교"에도 사용할 수 있으므로 분산된 변경사항과 관련된 작업의 효율을 크게 향상할 수 있습니다.

브랜치 탐색기에서 렌더링된 원격 체인지 세트


원격 브랜치 및 체인지 세트 비교

DBrEx에서 원격 브랜치 또는 체인지 세트를 오른쪽 클릭하여 원격으로 수정된 사항을 살펴보고 이해할 수 있습니다. 이러한 방법으로 개발자 또는 통합자는 작업을 완료하기 전에 어떤 변경사항을 원격 소스에서 가져오게 되는지 더 정확히 이해할 수 있습니다. 다음 그림은 원격 체인지 세트에 활성화된 옵션을 보여 줍니다.

원격 체인지 세트의 메뉴 옵션(비교)


단일 브랜치에 DBrEx 활성화

SCM 관리자 또는 개발자가 특정 브랜치에만 집중해야 하는 탓에, 분산형 다이어그램 전체를 렌더링할 필요가 없는 경우도 있습니다.

원격 정보가 담긴 확장된 단일 브랜치

위 그림은 가져올 사항을 파악하기 위해 원격 데이터로 브랜치를 보충할 원격 소스를 선택할 수 있는 브랜치 탐색기 / 다음으로부터 현재 브랜치의 원격 체인지 세트 표시 메뉴 옵션을 보여 줍니다.


동기화

Plastic SCM의 핵심은 팀이 분산형 개발을 수용하도록 돕는 것입니다. 이를 위해 DBrEx를 강화했지만 수백 개의 분산형 체인지 세트를 처리하기 위해 분산형 뷰라는 새로운 관점이 만들어졌습니다.

이 동기화 뷰를 사용하면 어떠한 리포지토리 쌍도 쉽게 동기화하여 내보내거나 가져올 대기 중인 변경사항을 살펴보고 비교할 수 있습니다.

동기화 작업에 대한 모든 정보는 GUI 가이드의 동기화 뷰 섹션을 참조하십시오.


업데이트

2019년 3월 22일
  • clone 명령이 분산형 시나리오에 어떻게 적합한지 보여 주기 위해 명령줄에서 복제를 업데이트했습니다.
  • 2019년 3월 20일
  • 새로운 pushpull 명령을 사용하도록 명령줄 사용 예제를 업데이트했습니다.
  • 2019년 2월 15일
  • 이 가이드에서 배운 내용을 설명하는 참고 사항을 추가했습니다. 이 참고 사항에는 중앙 집중형 및 분산형 모드의 기초를 설명하는 Plastic Book 장의 링크가 있습니다.
  • 2017년 5월 12일
  • 서버 텍스트 상자를 최근에 사용한 서버 목록이 포함된 콤보 상자로 교체하여 리포지토리 관련 복제 다이얼로그를 변경했기 때문에 일부 스크린샷을 업데이트했습니다.