第1講

버전관리란 무엇인가

3 閲覧 2

버전관리가 왜 필요한지, Git이 어떻게 파일 변경 이력을 추적하는지 이해한다. 스냅샷 기반 저장 방식과 로컬 중심 설계 철학이 SVN 같은 이전 도구와 어떻게 다른지 파악한다.

버전관리 없는 세상을 상상해보라

코드를 짜다가 잘못된 방향으로 3시간을 소모했습니다. 이전 상태로 돌아가고 싶지만, 파일을 덮어썼습니다. 혹은 두 사람이 같은 파일을 동시에 수정해서 한 사람의 작업이 사라졌습니다. 이런 상황을 겪어본 사람은 버전관리가 왜 존재하는지 단번에 이해합니다.

버전관리 시스템(VCS: Version Control System)은 파일의 변경 이력을 체계적으로 기록하고 관리합니다. 언제든 과거 상태로 돌아갈 수 있고, 여러 사람이 충돌 없이 협업할 수 있습니다.

버전관리의 역사

세대방식대표 도구한계
1세대로컬 VCSRCS혼자만 사용, 협업 불가
2세대중앙 집중식 VCSSVN, CVS서버 다운 시 작업 중단
3세대분산 VCSGit, Mercurial초기 학습 곡선

SVN은 중앙 서버에 모든 이력이 저장됩니다. 서버가 다운되면 이력 조회도, 커밋도 불가능합니다. Git은 분산 구조로, 모든 개발자가 전체 이력을 로컬에 가지고 있습니다. 오프라인에서도 완전히 동작합니다.

Git의 탄생 — 리누스 토르발즈의 결정

2005년, 리눅스 커널 개발팀은 사용하던 상용 VCS(BitKeeper)의 무료 라이선스를 잃게 되었습니다. 리누스 토르발즈(Linux 창시자)는 10일 만에 Git의 초기 버전을 직접 만들었습니다. 설계 목표는 명확했습니다.

  • 속도: 대규모 프로젝트(리눅스 커널)를 빠르게 처리
  • 단순한 설계: 내부 구조는 단순하게
  • 강력한 브랜치: 비선형 개발 지원
  • 완전한 분산: 중앙 서버에 의존하지 않음
  • 대규모 프로젝트: 리눅스 커널 수준을 처리할 수 있어야 함

Git이 파일을 저장하는 방식 — 스냅샷

Git과 SVN의 가장 근본적인 차이는 저장 방식입니다.

SVN (델타 방식):
커밋1: 파일A v1
커밋2: 파일A v1 + 변경내용(Δ)
커밋3: 파일A v1 + Δ1 + Δ2
→ 특정 버전을 보려면 처음부터 모든 Δ를 적용해야 함

Git (스냅샷 방식):
커밋1: 파일A v1의 전체 사진
커밋2: 파일A v2의 전체 사진 (변경 없으면 이전 포인터만)
커밋3: 파일A v3의 전체 사진
→ 어느 커밋이든 O(1)로 즉시 접근 가능

실제로 Git은 파일 내용의 SHA-1 해시값을 키로 하는 콘텐츠 주소 저장소(Content-Addressable Storage)입니다. 내용이 같으면 해시가 같으므로 중복 저장을 하지 않습니다.

Git의 세 가지 영역

Git을 이해하는 핵심은 세 가지 영역이 어떻게 데이터를 주고받는지 아는 것입니다.

Working Directory   →   Staging Area   →   Repository (.git)
  (작업 디렉토리)       (인덱스/스테이지)       (커밋 이력)

git add → Staging Area로 이동
git commit → Repository에 저장
git checkout/reset → 역방향 이동
영역위치설명
Working Directory프로젝트 폴더실제 편집 중인 파일들
Staging Area.git/index다음 커밋에 포함될 파일 목록
Repository.git/objects커밋된 스냅샷 전체 이력

Staging Area가 존재하는 이유: 수정한 파일 중 일부만 선별해서 커밋할 수 있습니다. 예를 들어 버그 수정과 기능 추가를 동시에 했더라도, 두 개를 별도 커밋으로 나눌 수 있습니다.

파일의 네 가지 상태

Untracked   → Git이 추적하지 않는 새 파일
Unmodified  → 마지막 커밋 이후 변경 없음
Modified    → 마지막 커밋 이후 변경됨 (아직 staged 아님)
Staged      → 다음 커밋에 포함될 예정

Untracked → (git add) → Staged → (git commit) → Unmodified
Unmodified → (파일 수정) → Modified → (git add) → Staged

버전관리로 할 수 있는 것들

  • 시간 여행: 언제든 과거 버전으로 복원
  • 실험: 브랜치로 현재 코드를 건드리지 않고 새 기능 시도
  • 협업: 여러 사람이 같은 코드베이스에서 충돌 최소화
  • 추적: 누가, 언제, 왜 이 코드를 변경했는지 파악
  • 배포: 특정 버전을 태그로 표시하고 언제든 배포 가능
  • 코드 리뷰: Pull Request로 변경사항을 팀이 검토
Git은 코드의 안전망이자 팀 협업의 기반입니다. 혼자 작업해도 Git을 쓰는 이유는 "미래의 나"와 협업하기 위해서입니다.

관련 검색어  ·  버전관리란, Git이란 무엇인가, Git vs SVN 차이, 분산 버전관리, Git 스냅샷 방식, 버전관리 필요성

채용정보
공지사항
인사이트
MY