1. 버전 관리 시스템의 개요
(1) 버전 관리 시스템의 개념
버전 관리 시스템 (VCS : Version Control System) 은 파일의 변화를 시간에 따라 버전별로 기록했다가 나중에 다시 꺼내 사용할 수 있도록 만든 시스템이다.
파일을 버전 관리 시스템에 보관하면 추가, 수정, 삭제 내역을 확인하고 언제 어떤 사용자가 작업했는지 추적할 수 있다. 또한 파일을 이전 상태로 되돌리고 시간대별로 파일의 변경 사항을 비교할 수도 있다.
(2) 버전 관리 시스템의 종류
버전 관리 시스템에는 중앙 집중식과 분산 방식이 있다.
중앙 집중식 버전 관리 시스템 (CVCS)
중앙 집중식 버전 관리 시스템 (CVCS : Centralized VCS)는 중앙에 서버를 두고 저장소로 사용하면서 네트워크로 연결된 모든 컴퓨터의 파일 변경 내역을 저장하고 관리하는 방식이다. 각 작업자는 자신의 컴퓨터에서 중앙 서버에 접속해 파일을 내려받아 작업한 뒤 파일을 서버에 올린다.
즉, 서버가 별도로 있고 클라이언트가 중앙 서버에서 파일을 받아서 사용 (Checkout) 하는 방식이다.
중앙 서버에 문제가 발생한다면 치명적이라는 단점이 있다.
분산 버전 관리 시스템 (DVCS)
중앙 집중식과 분산 방식의 가장 큰 차이는 파일 저장소 역할을 누가 하느냐이다.
분산 방식에서는 모든 사용자의 컴퓨터가 저장소로서 버전 관리를 담당한다.
분산 버전 관리 시스템에서 개발자는 서버로부터 해당 파일의 변경 사항이 포함된 모든 것을 복제하는 방식으로 내려받는다. 개인의 컴퓨터가 완전한 저장소가 되기 때문에 아래와 같은 장점이 있다.
- 파일을 한 번 저장소에서 받아온 다음 서버와 별개로 작업할 수 있다.
- 로컬에서 작업하기 때문에 속도가 빠르다.
- 서버에 문제가 생겨도 개발자가 작업하는 데 지장이 없고, 특정 개발자의 파일이 삭제되면 다른 개발자의 컴퓨터에서 받아와 복원할 수 있다.
- 오프라인 상태에서 일하지만 전체 복제본을 받아와 작업하기 때문에 모든 변경 이력이 남는다.
작업하는 과정에서 파일이 변경되면 추후에 파일을 서버에 올릴 때 변경 이력이 반영된다.
분산 버전 관리 시스템에서 개인의 컴퓨터와 서버 컴퓨터는 병합(merge)와 가져오기(pull) 작업을 통해 양쪽 컴퓨터를 동기화시킨다. 병합(merge)는 개발자의 로컬 컴퓨터에서 작업한 파일의 변경 이력(작업한 내역)을 서버에 반영하는 작업이고, 가져오기(pull)은 서버의 변경 이력을 로컬 컴퓨터로 받아오는 작업이다.
2. 분산 버전 관리 시스템 : 깃(Git)
(1) 깃의 동작 방식
깃 초기화(git init) 명령을 내리면 [.git]이라는 숨김 폴더가 생성된다. 이는 [.git] 이라는 저장소를 이용하여 해당 프로젝트 폴더 내 모든 파일의 변경 이력을 관리하겠다는 뜻이다.
해당 프로젝트 폴더 내에 있는 어느 파일이라도 변경되면 변경이 발생한 시점의 프로젝트 폴더 전체를 저장한다.
이는 스크린샷을 찍어 저장하는 것과 같은데, 이러한 스크린샷을 스냅샷(snapshot)이라고 부른다.
즉, 깃은 각 파일의 변경 이력을 기록하지 않고 대상의 전체 모습을 기록하는 스냅샷을 [.git] 폴더에 저장해 버전 관리를 수행한다.
(2) 깃의 작업 영역
깃은 3개의 작업 영역을 이용해 스냅샷을 저장한다.
- 작업 공간 (working directory)
- 현재 작업하고 있는 공간을 말한다.
- 깃은 사용자가 명시적으로 git add 명령을 실행할 때까지 이 영역에서 발생하는 파일 변경 및 삭제 등의 상태 변화를 추적하지 않는다.
- 스테이징 영역 (staging area)
- 작업 공간에서 발생한 상태 변화 중 실제 내부 저장소에 변경 이력으로 남길 작업을 선정하는 공간이다.
- 작업 공간에서 git add 명령을 실행해 변경 이력을 남길 파일을 스테이징 영역으로 올릴 수 있다.
- 즉, 작업 공간에서 발생한 상태 변화는 스테이징 영역으로 이동했을 때만 깃으로 변경 사항을 기록한다.
- 내부 저장소 (Local Repository)
- 스테이징 영역에서 git commit 명령을 통해 이동하는 영역으로 [.git] 폴더를 의미한다.
- git commit은 스테이징 영역에 있는 파일의 변경 이력을 스냅샷으로 만들어 저장하는 명령어이다.
스테이징 영역은 스냅샷에 담고 싶은 파일을 임시로 보관하는 가상의 영역이다. 같은 작업 공간에서 여러 가지 변경 이력이 발생했을 때 내부 저장소에 기록하고 싶은 변경 이력만 선택할 수 있도록 유예 공간을 제공하는 것이다.
사용자가 스냅샷에 담고 싶은 파일, 즉 변경 사항을 추적해 기록하고 싶은 파일을 스테이징 영역에 올리면 git commit 명령을 통해 최종적으로 스냅샷으로 기록한다.
3. 웹 기반 버전 관리 저장소 : 깃허브 (GitHub)
깃허브(GitHub)는 대표적인 외부 저장소로, 깃으로 관리하는 프로젝트를 업로드할 수 있도록 웹 기반 저장소를 생성하고 관리하는 서비스이다.
웹 기반 버전 관리 저장소에는 깃허브뿐만 아니라 깃랩(GitLab), 비트버킷(Bitbucket)등이 있다.
(1) 깃허브 동작 방식
- 프로젝트 매니저가 폴더 생성 후 소스코드를 저장한다. 그리고 해당 폴더에 [.git] 저장소를 만들고 최초의 스냅샷을 저장하여 깃허브에 업로드 한다.
- 팀원들은 깃허브를 이용하여 프로젝트 폴더에 저장된 소스 코드 파일과 [.git] 저장소에서 관리하는 모든 스냅샷을 내려받아 (git pull or git clone) 작업한다.
'GIT' 카테고리의 다른 글
[GIT] There isn't anything to compare 오류 해결 방법 (0) | 2024.02.17 |
---|