Learner's Log님의 블로그
Git이란? 본문
1. 버전 관리 시스템(VCS, Version Control System)

소프트웨어 개발에서 코드와 파일의 변경 내역을 추적하고 관리하는 데 사용됩니다. Linus Torvalds(리누스 토발즈)에 의해 만들어졌으며, 주로 협업 및 소프트웨어 개발의 효율성을 높이는 데 사용된다.
2. 주요 특징
- 변경점 관리: 누가, 언제, 무엇을 변경했는지 추적 가능
- 버전 관리: 파일의 변경 사항을 "커밋(commit)"이라는 단위로 저장
- 협업: 여러 개발자가 동시에 작업하므로 충돌을 최소화할 수 있습니다.
- 백업&복구: 로컬 및 원격 저장소에 데이터가 저장되어 손실 방지, 잘못된 변경 사항을 쉽게 되돌릴 수 있음.
3. 주요 용어
Repository(저장소)
- 소스 코드와 버전 내역이 저장되는 물리적 공간입니다.
- 로컬 저장소(Local Repository)와 원격 저장소(Remote Repository) 두 가지 종류로 나뉩니다.
- 로컬 저장소는 개인 PC에 저장되고, 원격 저장소는 팀이 공유하는 중앙 서버에 위치합니다.
Index (=Staging Area)
- 커밋 전 변경 사항이 임시로 저장되는 공간입니다. 저장소에 최종 기록하기 전에 변경점을 준비하는 역할을 합니다.
Commit
- 변경된 작업을 점검한 후, 이를 저장소에 기록하는 작업입니다. 커밋은 프로젝트의 변경 내역을 한눈에 파악할 수 있게 합니다.
Branch
- 소스 코드의 타임라인에서 분기점을 만들어 독립적으로 작업할 수 있게 합니다. 브랜치를 활용하면 기존 코드에 영향을 주지 않고 새로운 기능을 개발할 수 있습니다.
Merge
- 브랜치와 브랜치의 내용을 병합하는 작업입니다.
4. 이렇게 복잡하고 어려운데 꼭 써야할까?
과거에 팀 프로젝트를 진행할 때 Git을 사용하지 않고 파일을 팀 드라이브에 저장하며 협업했던 적이 있습니다. 당시에는 Git을 배우는 것이 번거롭고 복잡해 보였기 때문에, 단순히 파일 이름에 날짜를 붙여 관리하면 충분하다고 생각했습니다. 하지만 곧바로 예상치 못한 문제들이 발생했습니다.
1. 파일 충돌 문제: 누가 최종 파일을 올렸지?
예를 들어, 제가 기능 A를 개발하고 있는 동안 팀원이 기능 B를 같은 파일에 추가했습니다. 각자 작업을 끝내고 파일을 드라이브에 업로드했는데, 제 파일이 덮어씌워지면서 팀원의 작업이 사라졌습니다.
문제를 해결하기 위해 서로 작업했던 내용을 수동으로 병합하려고 했지만, 어떤 부분을 수정했는지 정확히 기억이 나지 않아 많은 시간이 소요되었습니다.
작업 내역을 추적할 수 있는 Git의 병합(Merge) 기능이 있었다면, 이런 문제를 쉽게 해결할 수 있었을 텐데 하는 아쉬움이 들었습니다.
2. 협업 비효율성: 각자 다른 버전을 작업하다.
브랜치를 나눌 수 없던 환경에서, 팀원과 저는 같은 파일에서 작업하다가 서로가 다른 버전의 파일을 수정했습니다. 저는 수정한 코드를 드라이브에 업로드했는데, 나중에 보니 팀원이 작업한 UI가 사라진 채로 제가 수정한 내용만 남아 있었습니다. 다음날, 팀원이 그 사실을 알고 다시 본인의 작업을 덮어쓰면서 제가 작업한 내용은 또다시 없어졌습니다. 이러한 상황이 반복되다 보니 불필요한 작업 중복이 많이 생겼습니다.
Git의 브랜치(Branch) 기능이 있었다면 각자 독립적으로 작업을 하고 나중에 병합하면서 충돌을 쉽게 해결할 수 있었을 겁니다.
5. 마무리
이 경험을 통해 Git이 단순한 선택 사항이 아니라, 프로젝트의 성공과 안정성을 보장하는 필수 도구라는 것을 깨달았습니다. Git은 단순히 파일을 저장하는 것을 넘어, 협업을 원활히 하고, 이전 상태로 복구하며, 작업 내역을 명확히 관리할 수 있게 해줍니다.
'협업툴 Git' 카테고리의 다른 글
| Git을 원격 저장소 설정 및 관리&저장 및 원격 저장소로 푸시(Push) (0) | 2025.02.07 |
|---|