형상관리 영역 중 Software의 버전을 관리

Who What When
-> 누가 언제 어떻게 바꾸었는가? 를 중점적으로 관리

(git의 영역이라 생각하면 될 듯)

버전관리를 하는 이유
1. 추적성 확보 및 가시화를 위함. 
   - Source code의 변경 이력을 구성
   - 누가 언제 무엇을 변경했는지 이력 추적 
2. 안정성 확보 및 자동화 (devOps)
   - 모든 변경 내역을 보관/백업하며 잘못된 변경 내역을 빠르게 복구
   - 변경 이력의 자동 관리부터 자동화 빌드/배포 등 자동화 구성을 위한 기본
3. 협업
   - 동시 작업을 보다 안전하게 지원
   - 공유 작업에 대한 변경 내용을 체계적으로 관리

버전관리의 형태
![[Pasted image 20231201134109.png]]
File 관리: 실제 파일단위로 관리, 동시접근 시 안전성을 보장해주지 않음.
              내가 개발한 소스를 .zip파일 등으로 묶거나 해서 파일단위로 관리를 함.

Lock-Unlock: 누군가 파일을 수정하려고 하면 Lock이 걸리고 수정이 끝날때까지 다른사람은 접근할 수 없음.

Shared: 한 소스코드를 여러사람이 동시에 작업 가능, 코드 중복 시 conflict를 내는 식으로 관리됨

여기까지는 하나의 중앙 repository를 가지고 사용자가 Terminal 처럼 사용하였음.

DVCS: 분산형 버전 관리 시스템, Remote repository가 여러곳에 존재할 수 있음.
개인별 버전을 만들고 이것을 중앙 저장소에 전달하는 방식
Distributted Version Control System
일부는 여기에, 일부는 저기에, 또 어떤 일부는 다른곳에, 버전을 나눠가지는 스타일인모양

