학부 시절, 대규모 조별 과제에서 팀장을 맡은 A씨.
열심히 과제를 작성하던 중, 수정이 필요한 상황이 자꾸 발생한다.
_최종.pptx / _최종의 최종.pptx / _최종의 최종의 최종...
😂[문제1] 그렇게 폴더에 쌓여가는 '진짜 최종파일'이 어느덧 100개가 넘어갔다!
심지어 어느 날 조원이 A씨에게 이렇게 말한다.
"형. C가 그러는데 며칠 전에 했던 그거 잘못된 자료라 고쳐야 한대요!"
😂[문제2] "며칠 전 그게 뭔데?..." "아, 그거 있잖아요. 그거 뭐였더라?"
부랴부랴 어떻게든 '며칠 전 그것'을 찾아 수정한 A씨.
어느덧 ppt를 완성하고 마지막 준비를 하는데, 갑자기 발표 1시간 전 카톡이 온다.
😂[문제3] 'A님. 제가 지난 번에 보낸 자료에 오류가 있더라구요? 지금 다시 해서 보냈어요~.'
"아니 그걸 지금 제가 어떻게 수정해요? 이제 발표하는데. 본인이 찾아서 수정하고 보내주세요."
"예? ppt가 몇 장인데 그거 저는 못하죠. 팀장님이 책임자니까 알아서 해주세요. 수고, Bye."
눈물이 앞을 가린다.
아... A씨의 팀이 Git만 사용할 줄 알았어도 이런일은 없었을 텐데!
😁[문제1] 직관성 : 팀 프로젝트의 결과물을 하나로 관리
😁[문제2] 시간 : 팀 프로젝트의 발전 기록을 시간대 별로 한 눈에 보고 접근 가능
😁[문제3] 공간 : 서로 다른 공간에서 하나의 파일에 접근
Git & Github 사용X | Git & Github 사용O |
---|---|
1. 로컬에 지금까지 작업했던 파일들이 저장되며, 직관성 문제가 발생한다. | 1. 팀원들이 각자 로컬에서 작업하여 원격저장소로 보내, 하나의 파일로서 작업할 수 있다. |
2.팀 프로젝트의 발전 기록을 한 눈에 보기 어렵다. | 2. 팀 프로젝트가 어느 시간대에 어떤 수준으로 발전되었는지 모든 기록을 참조할 수 있다. |
3. 팀 구성원이 각각 역할에 따라 프로젝트를 진행하여 전송하면, 담당자가 직접 취합, 편집. (만약 팀원이 수 백명인 프로젝트라면? ...) | 3. 팀 구성원들이 서로 다른 공간에서 원격저장소에 존재하는 하나의 파일에 접근, 수정할 수 있다. |
😁정리 : 프로젝트의 쉬운 버전 관리가 가능하다.
- 여러 개발자가 동시에 한 프로젝트에 대한 병렬적인 작업이 가능하다.
- 기록을 참조해, 쉽게 이전 버전으로 되돌릴 수 있으며 다시 원래의 버전으로 돌아올 수도 있다.
- 서버를 중앙에 두지 않는 분산관리 시스템으로 인터넷 없이 사용 가능하며 백업이 좋다.
로컬 버전 관리 시스템에서는 'RCS (Revision Control System)을 활용한다.
RCS는 기본적으로 'Patch Set(파일에서 변경되는 부분)'을 관리한다. 이 Patch Set을 통해 모든 파일을 특정한 시점으로 되돌릴 수 있다.
중앙 집중식 버전 관리 시스템은 프로젝트 진행 중, 다른 개발자와 협업을 진행해야 할 때 사용한다. 파일 관리를 위한 서버가 별도로 존재하고, 클라이언트가 중앙 서버에서 파일을 받아서 사용한다.
CVCS를 사용하면 프로젝트에 참여한 사람들 중 누가 어떤 작업을 하는 지 쉽게 확인 가능하다는 장점이 있다. 또한 모든 클라이언트의 로컬 데이터베이스를 관리하는 것보다 VCS 하나를 관리하는 것이 훨씬 쉽기 때문에 협업 시 많이 사용된다.
하지만, 중앙 서버가 다운되는 등의 문제가 발생할 경우 그 상황 동안에는 작업이 불가능하다. 또한 하드디스크에 문제가 발생하면 모든 히스토리를 잃을 수도 있다는 단점 또한 존재한다.
분산 버전 관리 시스템은 '분산'이라는 단어에 집중한다.
즉, 개발자들이 독립적으로 작업한 다음에 변경 사항을 병합할 수 있기 때문이다.
분산 버전 관리 시스템에서의 클라이언트는 단순히 파일의 마지막 snapshot을 사용하지 않는다. 저장소를 히스토리와 더불어 전부 복제하는 방식이다. 만약 서버에 문제가 생긴다면, 복제했던 것을 통해 다시 작업을 시작할 수 있다.
또한 클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다.
😜(@ 팀 구성원들의 로컬 컴퓨터에 백업파일이 저장되어 있을 것이므로)
따라서 다양한 협업 시 주로 사용되며, '깃'이 이 분산 버전 관리 시스템에 속한다.
Git과 Github의 연관성?
👋 깃과 깃 허브는 뗄레야 뗄 수 없는 관계이다.
그렇지만 두 가지 개념에 대해 혼동해서는 안된다!
🚀 깃
- 로컬에서 관리되는 버전 관리 시스템
- 직접 소스 코드를 수정함으로서 버전을 관리
- 소스 코드를 효율적으로 관리할 수 있게 해주는 형상 관리 도구
🚀 깃 허브
- 깃(Git)을 사용하는 프로젝트를 지원, 깃을 포함하는 클라우드 서비스
- 협업하고 있는 코드를 저장할 서버가 필요
- 버전 관리 시스템을 지원하는 웹호스팅 서비스의 기능을 통해, push, pull request같은 이벤트에 반응하여 자동으로 작업(배포 등)을 실행
- 개발자들의 버전 제어 및 협업을 위한 하나의 플랫폼
- 클라우드를 통해 관리되는 버전 관리 시스템
- 오픈 소스는 일정 부분 무료로 사용이 가능하나, 대부분 유료 시스템
- 깃처럼 자체적으로 구축하는 시스템이 아닌, 클라우드를 빌려쓰는 개념
✔️ 간단히 Git은 로컬에서 버전 관리 시스템을 운영하는 방식이고, Github는 '깃 허브'자체에서 제공해주는 클라우드 서버를 이용한다.
따라서 타 개발자들과의 협업 시, Github를 써서 오픈 소스를 공유하거나 타 개발자들과 의견을 교환할 수 있다. 만약 혼자서 작업하거나, 작은 범위에서 진행하는 협업이라면 굳이 Github를 사용하지 않고 Git으로만 진행해도 무방하다.