diff --git "a/\354\261\225\355\204\260_16/\353\263\200\354\210\230\353\257\270.md" "b/\354\261\225\355\204\260_16/\353\263\200\354\210\230\353\257\270.md" new file mode 100644 index 0000000..c9e6780 --- /dev/null +++ "b/\354\261\225\355\204\260_16/\353\263\200\354\210\230\353\257\270.md" @@ -0,0 +1,41 @@ +#### 버전 관리 시스템 (VCS) + +- 파일의 시간에 따른 변경 기록을 추적하는 시스템 + +#### 버전관리는 왜 필요할까 + +- 소프트웨어 엔지니어링은 프로그래밍에 시간의 흐름을 통합한 개념이다. +- '즉각 이루어지는 소스 코드 생산'과 '제품을 장기간 지속 관리'하는 행위를 다른 차원으로 구분하고 있고, 후자를 위해 소스코드와 시간의 상호작용을 관리하는 버전관리가 중요하다. +- 프로그래밍에서는 꼭 필요하진 않지만, 소프트웨어 엔지니어링에서는 필수다. + +#### VCS 아키텍쳐를 알아보자 + +중앙집중형 + +- 단 하나의 중앙 리포지터리 이용, 개별 개발자가 커밋하는 모든 코드는 중앙으로 (구글 방식) +- 초창기에는 모든 VCS가 이 모델로 만들어졌고, 한 사람이 락을 독점했다. +- 진보한 VCS는 한사람이 락을 독점하는 것이 아닌, 어느 버전과 동기화 되었는지 추적하게 되었다. + +분산형 + +- git 등에서 사용하는 패러다임 +- 레포의 복사본(clone, fork)를 가지고 있다면 커밋할 수 있는 레포를 소유한것 +- '중앙'이라는건 개념적으로만 존재 +- 특정 하나를 진실 공급원이라고 지정하지 않아도 되어, 오프라인 작업, 협업에 더 유리하다. + +> 버전관리 === Git이라고 생각했었는데, 생각보다 다양한 분류가 있었네요 + +## 버전 관리 @ 구글 + +- 구글의 소스 코드 대부분은 하나의 모노리포에서 관리되며 약 5만여 엔지니어에게 공유된다. +- **자체 개발한 중앙집중형 VCS인 Piper를 이용** + - 초기 구상 단계부터 구글 규모를 감당하는데 집중 + +> git 등을 사용하지 않는 이유가 많은 코드를 커밋하는 개발자들을 감당할 수 없어서이고, 그래서 자체 구축했다는게 신기하네요.. +> 당연히 git 사용할줄 알앗습니다. + +## 버전관리의 미래 + +- 모노리포의 가장 큰 우려는 '모든 것을 하나의 리포에 담을 수 있는 기술이 있느냐'이다. + +> 그럼 구글은 모든것을 하나의 리포에 담을 수 있는 기술이 있다. 라는건데 대단하네요