최근 지인들과 함께 GitHub 잔디 심기 100일 챌린지를 진행하게 되었습니다. 이 챌린지에서는 Git과 GitHub를 활용하여 각자의 프로젝트와 학습 내용을 관리하고, 10일 주기로 PR을 통해 회고를 작성하기로 했습니다. 또한, Issue를 통해 서로의 궁금한 점을 질문하며 챌린지를 운영하고 있습니다. 챌린지를 진행하면서 Git의 개념
과 사용 이유
가 문득 궁금해졌고, 이를 정리하여 기록해두고 싶어 이 블로그 글을 작성하게 되었습니다.
버전 관리 시스템(VCS, Version Control System)은 파일 변화를 시간에 따라 기록하고, 특정 시점의 버전을 다시 꺼내올 수 있는 시스템입니다.
버전 관리 시스템의 종류에는 로컬 버전 관리부터 CVCS, DCVS가 있습니다.
로컬 버전 관리?
CVCS, Central Version Control System, 중앙집중식 버전 관리 시스템?
파일을 관리하는 서버
가 별도로 있고 클라이언트가 중앙 서버에서 파일을 받아 사용하는 방식
입니다.DVCS, Distributed Version Control System 분산 버전 관리 시스템?
저장소를 히스토리와 더불어 전부 복제하여 관리
하는 시스템입니다. 서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있고 클라이언트의 복제물 중 아무거나 골라도 서버를 복원할 수 있는 장점을 가지고 있습니다.Git
은 2005년, Liux 운영 체제 커널을 만든 사람으로 유명한 Linus Torvalds
가 개발한 활발하게 유지 관리되는 성숙한 오픈 소스 프로젝트로 CVCS
에서 발생하는 문제들을 해결하기 위해 만들어졌습니다. CVCS는 중앙 서버에 문제가 발생하면 전체 프로젝트가 마비되며, 복구 과정에서 시간과 노력이 많이 소요된다는 단점
이 있습니다. 이런 문제를 해결하기 위해 개발된 것이 바로 분산 버전 관리 시스템(DVCS)
인 Git
입니다.
Git
은 모든 개발자가 로컬 저장소에 프로젝트의 전체 히스토리를 복제할 수 있는 분산 버전 관리 시스템
입니다.
Git은 프로젝트 관리를 개선하기 위해 DVCS 방식을 채택하여 탄생했습니다. 그렇다면 왜 Git이 프로젝트 관리에 유용한지, 그 이유를 좀 더 자세히 살펴보겠습니다.
Git의 브랜칭 기능은 가볍고 빠르며, 독립적으로 기능 개발을 진행할 수 있게 해줍니다.
Git은 각 개발자가 전체 커밋 기록을 담고 있는 로컬 저장소를 가지고 있기
때문에 네트워크 연결이 없어도 작업이 가능
합니다. 로컬 저장소에서 파일의 이전 버전을 검사
하거나, 커밋 간의 차이를 확인하는 등
의 작업이 빠르게 이루어집니다. 또한, 다른 개발자의 저장소를 복제하여 새로운 프로젝트를 시작
할 수도 있습니다.
Git의 풀리퀘스트(PR) 기능
은 팀원 간 협업을 강화
하고, 코드 리뷰 과정을 통해 코드 품질을 관리
하는 데 중요한 역할을 합니다. PR을 통해 팀원들이 변경 사항을 검토하고 토론
할 수 있으며, 코드베이스와 통합하기 전에 문제가 없는지 확인
할 수 있습니다. 이를 통해 프로젝트 전체의 품질을 높이고, 협업을 원활하게 진행
할 수 있습니다.
Git은 단순히 개발자들만의 도구가 아니라, 다양한 부서에서도 활용될 수 있는 강력한 협업 도구
입니다. 마케팅, 고객 지원, HR 등 다양한 부서가 Git을 통해 업무를 효율적으로 관리하고, 프로젝트 진행 상황을 투명하게 공유
할 수 있습니다. 이를 통해 조직 전체의 비즈니스 활동을 촉진하고, 성과를 극대화
할 수 있습니다.
Git의 개념과 사용하는 이유에 대해 공부하면서 새롭게 알게된 점이 있습니다. 버전 관리 시스템에는 크게 두 가지 종류, 중앙집중식 버전 관리 시스템(CVCS)
과 분산 버전 관리 시스템(DVCS)
이 있다는 사실입니다. Git은 이 중 DVCS를 사용하여 개발되었습니다.
이 글을 쓰기 전에는 CVCS
와 DVCS
의 차이점을 명확히 알지 못했지만, 공부를 통해 이해하게 되었습니다. CVCS
는 모든 파일을 중앙 서버에서 관리하고, 사용자는 이 서버에서 파일을 내려받아 작업을 합니다. 이 방식은 중앙 서버에 문제가 발생할 경우 업무를 중단해야 하는 단점이 있습니다.
반면, DVCS
는 프로젝트의 전체 저장소를 히스토리와 함께 로컬에 전부 복제하여 작업하며, 변경된 파일들을 다시 중앙 서버에 업로드하는 방식입니다. 이를 통해 서버에 문제가 생겨도 로컬 저장소를 이용해 작업을 이어 나갈 수 있어 보다 안정적인 프로젝트 관리가 가능합니다.