ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1. Git과 Github 시작하기, 버전 관리(Version Control)
    Git-Github 2023. 4. 5. 10:17
    728x90
     * 버전 관리(Version Control)란?

     

    파일 변화를 시간에 따라 기록 하고 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템.

    ( 이는  SW(SoftWare) 소스 코드만이 아닌, 거의 대부분의 컴퓨터 파일에 대한 버전을 관리할 수 있다. )

     

     

    * VCS(Version control System)
    버전 관리 시스템, Version Control System의 약자로, 파일의 변화를 추적하고 관리하는 시스템을 뜻한다.
    즉, 변경 이력 혹은 수정 내용을 관리해 시간에 따라 수정 내용을 비교하거나, 이전 상태로 되돌리거나, 프로젝트를 통째로
    이전의 상태로 되돌리거나, 누가 문제를 일으켰는지에 대한 추적도 가능하다. 

    즉, VCS를 사용하면 잘못된 파일에 대한 복구 및 되돌리기를 큰 노력 없이 이용할 수 있다.

     

     

    *버전 관리 중, 로컬 버전 관리(Local Version Control)

     

    LVC(Local Version Control)을 예시를 통해 장단점을 알아보자. 

    text.txt 파일을 생성하여 제출하였다. 이후, 해당 파일을 수정해 제출하고자 한다. 

    같은 확장자에 같은 이름으로 저장하게 될 경우, 기존 파일을 덮어 씌워 재사용이 어려워진다.

    이를 고려해 text2.txt 파일을 생성 하였다. 

    LVC 형태로 버전 관리를 위해 이름이 구분되어짐.
    파일 관리를 위해 버전별로 이름이 다르게 설정된 파일들

     

    이때, 파일 이름을 참고해 언제 생성되었고, 무엇이 가장 최근에 생성 되었는지를 유추할 수 있다.

     

    하지만, 이러한 파일도 수십개 수천개로 늘어나고, 또 당시 짓는 이름의 규칙에 차이가 발생한다면 파일의 버전을 관리하기 어려울 뿐더러,

    같은 내용을 포함한 (해당 내용에서 수정 및 추가를 통해 버전을 늘린 경우) 파일들이 쓸데없이 공간을 차지한다.

     

     

    Local Version Control System

     

    즉, 많은 사람들이 버전을 관리하기 위해 파일을 복사하는 방법을 사용하지만 (간단하고 어렵지 않다.),

    이는 작업하던 디렉토리(Directory, 파일)을 지워버리거나 실수로 잘못 고치거나 복사하는 등 잘못되기 쉬운 방법이다.

     

    이런 이유로 오래전 Local VCS가 만들어지고, 아주 간단한 데이터베이스를 사용해 파일의 변경 정보를 관리 했다.

     

                                       # 단점

                                       1. 바이러스 및 기기 사용에 문제 발생시, 파일 사용 및 백업에 어려움이 있음.

                                       2. 협업이 불가함.

     

     

    * VCS 도구 중, RCS(Revision Control System)
    파일의 여러 개정판을 관리하여 저장, 검색, 로깅, 식별 및 병합을 자동화하는 버전 관리 시스템.
    오늘날까지도 많은 회사가 사용하고 있으며, 기본적으로 Patch Set(파일에서 변경되는 부분)을 관리한다.
    이 Patch Set은 특별한 형식의 파일로 저장한다. 일련의 Patch Set을 적용해서 모든 파일을 특정 시점으로되돌릴 수 있다.

    * 공식 페이지 : https://www.gnu.org/software/rcs/ (GNU Operating System - RCS)

     

     

     

    * 버전 관리 중, 중앙집중식 버전 관리(CVCS, Centralized Version Control System)

     

    이전 Local 환경에서의 버전 관리는 협업이 불가한 단점이 존재했다. 이는, 프로젝트 진행시 다른 개발자와 함께 작업하는 경우 큰 불편을 야기한다. 이를 해결하기 위해 CVCS(중앙집중식 VCS)가 개발되었다.

    CVS, Subversion, Perforce 같은 시스템은 파일을 관리하는 서버가 별도로 있고 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout)한다. 수년 동안 이러한 시스템들이 많은 사랑을 받았다.

     

    중앙집중식 버전 관리 (CVCS : Centralized Version Control System)

     

    협업을 고려해 제공되는 CVCS는, 그에 걸맞게 관리자가 어떤 사용자가 무엇을 하는지에 대해 꼼꼼하게 관리할 수 있다.

    모든 클라이언트의 로컬 데이터베이스를 관리하는 것보다(LVCS) VCS 하나를 관리하는 것이 더 용이하다.

     

                                       # 단점

                                       1. 바이러스 및 기기 사용에 문제 발생시, 파일 사용 및 백업에 어려움이 있음.

     

    결국 대표적인 중앙 서버에 문제가 발생한다면, 그동안은 아무도 다른 사람과 협업할 수 없고, 사람들이 하는 작업을 백업할 방법도 없다. 또한, DB(DataBase)가 있는 하드디스크에 문제가 발생하면 프로젝트의 모든 히스토리(history)를 잃는다.

    ( + 물론 사람마다 하나씩 가진 스냅샷(SnapShot)은 괜찮다. ) 

     

     

    * 스냅샷(Snapshot) : 특정 시간에 데이터 저장 장치의 상태를 별도의 파일로 저장하는 기술. (유실된 데이터의 복원에 사용)

     

     

     

    버전 관리 중, 분산 버전 관리(Distributed Version Control)

     

    CVCS에서의 단점을 해결하기 위해 고안된 것이 바로 DVCS(분산 버전 관리 시스템)이다. 이는 Git이 사용하고 있는 방식으로, 프로젝트의 전체 파일을 참여자들의 각 컴퓨터와 서버에 분산(Distribute)시켜 저장한다. 

     

    분산 버전 관리 시스템(DVCS) 방식을 사용하는 시스템 > Git, Mecurial, Bazaar, Darcs ... 

     

    이러한 시스템에서의 클라이언트는 단순히 파일의 마지막 스냅샷을 Checkout 하지 않는다.

    (저장소를 히스토리와 더불어 전부 복제 한다.) 즉, 서버에 문제가 발생하면 해당 복제물로 작업을 다시 시작할 수 있다.

    또한, 클라이언트 중 아무거나 골라서도 서버를 복원할 수 있다. Clone은 모든 데이터를 가진 진정한 백업이다. 

     

     

    분산버전관리 시스템(DVCS, Distributed Version Control System)

     

    또한 대부분의 DVCS 환경에서는 리모트(remote, 원격) 저장소가 존재한다. 리모트 저장소가 많을 수도 있다. 

    그렇기에 사람들은 동시에 다양한 그룹과 다양한 방법으로 협업할 수 있다. 계층 모델같은 중앙집중식 시스템으로는

    할 수 없는 워크플로를 다양하게 사용할 수 있다.

     

     

     

     

    참고 : https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC%EB%9E%80%3F [ Git 공식 홈페이지 중, 1.1 버전 관리란? ] 

    728x90

    댓글

Designed by Tistory.