깃(Git)이란?
컴퓨터 내부의 파일들의 변경사항을 추적하고 협업을 통해서 해당 파일들의 작업을 조율하기 위한 분산된 파일들을 관리하는 분산 버전 관리 시스템이다. |
위와 같이 정리하고 싶다.
최근에는 Git에 대한 무료 강의도 많고 책도 많이 나와있다. 그리고 구글 검색창에 Git를 검색해서 한국어 번역된 파일 링크만 들어가도 많은 정보를 배울 수 있다. 그럼에도 생각보다 Git에 대해서 접하기까지 시간이 걸리는 인원이 존재한다. 본인 또한 2020년 처음 개발 공부를 시작할 때 Git의 존재는 알고 있었지만 학습한 내용을 노트에 정리하고 암기하는 것에 바빴다.
현재 본인은 취준생 상태에서 좋은 개발자가 되기 위해서 열심히 학습하고 성장하고 있다. 그런데 기술 블로그도 쓰이는 곳이 많지만 개발자를 볼 때 생각보다 많은 사람들이 GitHub에 저장된 프로젝트나 의미 있는 커밋의 수, 활동 기간, 협업 경험 등을 본다.
사람인, 잡코리아 등 대표적인 구직 플랫폼에 들어가면 많은 IT기업들이 필수 자격이나 우대 사항으로 Git 활용 능력 또는 Git을 활용한 협업 경험을 요구한다.
협업 프로젝트를 진행하고 보니 왜 필수 자격인지 이해가 됐고 그 부분에 대해서 Git이 의미하는 버전 관리에 대해서 글을 정리해 보려 한다.
Git의 유례는 2005년 처음 리눅스 기반의 커널 개발을 위해서 초기 개발에 기여한 다른 커널 개발자들과 함께 리누스 토르발스가 협력하여 2005년 개발한 것이 Git의 시작 점이다.
Git은 위에 언급한 것과 같이 분산 버전 관리 시스템으로 불린다. 버전 관리란 무엇인지에 대해서 의문을 가졌으면 한다. 컴퓨터 게임이나 SNS 서비스 또는 다양한 콘텐츠 등을 접하다 보면 1.0ver~~ 와 같이 버전이 명시된 것을 본 경우가 있을 것이다. 이때 1.0~~ ver의 버전들은 버전 관리의 버전을 의미하고 이런 버전이 있는 파일들을 관리하는 것이라 보면 좋다.
버전 관리는 개발자뿐 아니라 디자이너도 프로젝트에 참여하는 모든 인원이 협업 중에는 각각 x.xx버전의 프로그램을 갖고 수정 작업을 진행하면 수정이 동시에 이뤄지는 경우도 있지만 겹치는 부분도 존재하게 된다. 그러다 보면 A라는 사람이 치킨이라는 파트를 수정했는데 B라는 사람도 치킨 파트를 수정한 내용을 하나의 프로그램으로 합쳤을 때 에러가 발생하거나 코드의 충돌이 일어나는 경우가 생길 수 있다. 프로그램을 따로 관리하는 경우 다양한 문제들이 존재하지만 본인은 통합 시 발생하는 충돌 문제와 작성했던 코드를 타인이 삭제하는 경우 등 안전하게 내용들을 관리하고 어디에서 크리티컬한 이슈들이 발생하면 그런 내용은 어디서부터 문제가 생긴 것인지 쉽게 확인하기 위해서 버전 관리를 시작했다고 본다.
버전 관리는 크게 다음의 3가지로 나뉜다.
로컬 버전 관리 Local VCS(Version Control System) 방식
- RCS(Revision Control System)라고 부르며, 아직까지 많은 회사에서 사용하고 있는 방식이다.
- 아주 쉽게 데이터베이스를 관리하여 사용할 수 있다.
- Patch Set(파일에서 변경되는 부분)을 관리한다.
- 원하는 변경된 지점을 선택해서 되돌릴 수 있다.
단점
- 실수로 폴더나 작업 중인 소스코드 파일을 수정하거나 삭제할 수 있다.
중앙 집중식 버전 관리 CVCS(Central VCS Server) 방식
- 로컬 환경에서 사용하는 것에 비해서 CVSC는 모두 누가 어떤 작업을 하고 있는지 알 수 있다.
- 모든 클라이언트의 Local 환경의 Database를 관리하는 것보다 중앙에서 하나의 버전 관리를 통하여 관리하는 것이 훨씬 쉽다.
- CVS, Subversion, Perforce
단점
- 중앙에 연결하여 작업을 진행하는 것이므로 만약 중앙 서버에 문제가 발생한 경우 다른 Computer에서 작업을 진행할 수 없게 돼버린다.
- 중앙 데이터베이스의 정보를 잃는 순간 다른 컴퓨터에 있던 File 정보도 모두 날아가서 프로젝트의 모든 히스토리를 잃게 된다.
✔ 단 각자 갖고 있는 스냅샷은 괜찮다.
이때 스냅샷이란 개념을 모를 수 있으니 얘기를 덧붙여 본다.
컴퓨터 파일 시스템에서 스냅샷(snapshot)은 과거의 한때 존재하고 유지시킨 컴퓨터 파일과 디렉터리의 모임이다. |
위 설명은 위키백과의 설명이다.
Windows 환경에서 문서 작업을 할 때 특정 작업을 찾기 위해서 Ctrl+Z를 누르면 이전 글로 돌아가서 작업을 찾는 것처럼 스냅샷은 컴퓨터의 특정 시점에서 작업하던 파일과 폴더를 찾아갈 수 있도록 하는 기록 모임이라 보면 된다. (그렇다고 스냅샷은 컴퓨터 전원 부팅 시 날아가는 휘발성은 아니다.)
백업과 유사한 개념이라 생각할 수 있다.
단 백업은 원하는 부분에 대해서 전체 파일을 저장하기 때문에 많은 용량과 용량에 비례해서 시간이 걸리게 된다. 또한 백업의 경우에는 비즈니스 연속성 및 재해 복구(BCDR) 계획의 표준 컴포넌트라고도 불린다. 백업 파일은 복원 시 기준에서 존재하는 전체 파일들을 보존할 수 있는 점이 스냅샷과 다르다.
스냅샷은 특정 시점에 생성된 시스템 상태를 복사하는 것으로 데이터와 메타 데이터만 저장하게 된다. 빠르게 진행할 때 효율적으로 사용할 수 있게 된다. 하지만 스냅샷은 백업처럼 완전한 형태의 사본으로 만들어 데이터를 보관하는 것이 아니기 때문에 복구가 불가능해지는 경우도 존재한다.
분산 버전 관리 시스템 DVCS 방식
- 파일의 마지막 스냅샷을 Checkout 하지 않는다. 즉, 데이터와 메타 데이터를 복제해서 사용하는 것이 아니다. 기본 저장소를 히스토리와 더불어 전부 복제하는 것이다.
- 서버도 가능하며 클라이언트 중에도 아무거나 골라서 서버를 복원할 수 있다. 이때 Clone은 모든 데이터를 가진 진정한 백업이다.
- Git, Mecurial, Bazaar, Darcs는 DVCS 방식을 사용한다.
참조 주소
https://ko.wikipedia.org/wiki/%EA%B9%83_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)
https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%83%85%EC%83%B7_(%EA%B8%B0%EC%96%B5_%EC%9E%A5%EC%B9%98)
이번 포스팅은 개인적으로 학습한 내용을 정리한 글입니다.
부족한 부분이나 잘못된 정보 부분이 있다면 댓글 부탁드리겠습니다!
포스팅을 읽어주셔서 감사드립니다!
'Git & GitHub' 카테고리의 다른 글
[Git & GitHub] PR(Pull Request)해보기 초보자용 (0) | 2022.12.11 |
---|---|
[Git & GitHub] .gitignore 사용법과 gitignore.io 활용하기 (0) | 2022.11.25 |
[GitHub] 협업에 유용한 Discussion 사용하기 (0) | 2022.08.15 |
[Git] Git설치, Vscode 설치와 Github연동까지 (0) | 2022.07.13 |