1. 버전 관리 시스템(VCS : Version Control System)
- 파일 변화를 시간에 따라 기록했다가 특정 시점의 버전을 다시 꺼내올 수 있는 시스템.
- 파일의 상태를 되돌리거나, 수정 내용을 비교하고 이슈를 추적할 수 있게 해준다.
- 주로 소프트웨어 개발에서 코드 관리에 사용되지만 텍스트, 이미지 등 다양한 종류의 파일을 관리하기 위해 사용 가능
- VCS 이전에는 각 버전의 파일들을 모두 저장하는 방법밖에 없었음.
(1) 로컬 버전 관리 시스템
- 로컬 환경에 간단한 DB를 사용해서 파일의 변경 정보 관리.
(2) 중앙 집중식 버전 관리 시스템 (CVCS : Centralized Version Control System)
- 다른 개발자와 함께 작업하는 경우를 위해서 등장.
- 파일을 관리하는 서버가 별도로 있고 업데이트시 서버에 즉각적으로 동기화되는 시스템.
- 서버에 문제가 발생하거나 오프라인의 환경에서 모든 개발자가 일을 할 수 없는 문제 발생.
(3) 분산 버전 관리 시스템 (DVCS : Distributed Version Control System)
- 서버에만 히스토리 정보가 있는 것이 아니라 모든 개발자가 동일한 히스토리 정보를 가지고 있는 시스템.
- 서버에 문제가 생기거나 오프라인이 되어도 서로의 히스토리를 통해 계속 업무를 진행할 수 있다.
- 서버는 회사 내에서만 사용 가능한 Private 서버일 수도, 깃허브와 같은 Cloud 서버일 수도 있다.
- Git, Mecurial, Darcs 등이 속한다.
2. 깃 (Git)
- 컴퓨터 파일의 변경사항을 지속적으로 추적해주는 분산 버전 관리 시스템(DVCS)이다.
- 기존의 VCS들은 Delta-Based Version Control이었던 반면 깃은 스냅샷으로 버전 데이터를 관리한다.
(1) 자유롭고 빠른 버전 및 브랜치 이동이 가능
(2) 변경사항이 없는 파일의 경우 서로 링크되어 있기 때문에 스냅샷은 무겁지 않다
- 쉽고 빠른 branching/merging이 가능하다. (협업에 유리)
- 로컬에서도 이미 모든 데이터를 가지고 있기 때문에 깃은 대부분의 작업을 로컬에서 진행한다. (장점)
- 깃은 모든 데이터를 오브젝트로 저장한다. (오브젝트 파일은 .git/object에 각각의 파일로 저장되며 SHA-1알고리즘을 통해 중복되지 않는 해시로 이름이 붙여진다.)
(1) 블롭 : 파일에 대응
(2) 트리 : 디렉토리에 대응, 하위 항목으로 Blob이나 다른 트리 등을 여러 개 가질 수 있음
(3) 커밋 : 스냅샷을 누가, 언제, 왜 저장했는지 기록
(4) 태그 : 커밋을 알아보기 쉽도록 이름을 붙이는 것
- 깃에서 관리하는 파일의 상태
(1) committed : 수정된 파일이 안전하게 깃 디비에 저장된 상태
(2) staged : 수정된 파일이 다음 커밋에 포함될 내역으로 표시된 상태
(3) modified : 변경되었지만 아직 다음 커밋에는 포함되지 않은 상태 (커멧 전에 staged 상태로 변경됨, 만약 변경되지 않으면 작업한 내용 날라감)
※ Delta-Based Version Control
어떤 파일들이 있는지와 각 시점 파일들의 변경 사항만을 기억한다.
버전을 변경할 때 변경사항들을 계산하는 시간이 많이 소모된다는 단점이 있다.
여담
첫 포트폴리오를 만들었다! 클론 프로젝트들을 제외하고 적으려니까 프로젝트가 생각보다 별로 없었다. 빨리 맛집 어플 만들고 싶은데 할 게 정말 많다. (막학기 19학점은 사람이 할 게 못 된다.)
https://www.notion.so/Donghwan-Yu-25a70f261de14f59a9d99f0bb9f03e19