개발이 취미인 사람

[Git] - Git이란? 버전 관리 시스템 개념 본문

컴퓨터공학/Git

[Git] - Git이란? 버전 관리 시스템 개념

RyanSin 2025. 12. 15. 14:09
반응형

개요

안녕하세요. 이번 시간에는 Git에 대해 알아보겠습니다. Git은 개발자라면 반드시 알아야 하는 버전 관리 시스템입니다. 이번 글에서는 Git이 무엇인지, 왜 사용해야 하는지, 그리고 기본적인 동작 원리에 대해 살펴보겠습니다.

- 버전 관리 시스템(VCS)이란?

버전 관리 시스템(Version Control System)은 파일의 변경 이력을 관리하는 시스템입니다.

혹시 이런 경험 있으신가요?

프로젝트_최종.zip
프로젝트_최종_수정.zip
프로젝트_최종_수정_진짜최종.zip
프로젝트_최종_수정_진짜최종_이게마지막.zip

버전 관리 시스템을 사용하면 이런 문제를 해결할 수 있습니다. 파일이 언제, 누가, 어떤 내용을 변경했는지 모든 이력을 추적하고 관리할 수 있습니다.

버전 관리 시스템의 종류

버전 관리 시스템은 크게 세 가지로 나눌 수 있습니다.

종류 설명 예시

로컬 버전 관리 개인 컴퓨터에서만 버전 관리 RCS
중앙집중식 버전 관리 중앙 서버에서 버전 관리 SVN, CVS
분산 버전 관리 모든 사용자가 전체 이력을 보유 Git, Mercurial

- Git이란?

Git은 **분산 버전 관리 시스템(DVCS, Distributed Version Control System)**입니다. 2005년 리누스 토르발스(Linus Torvalds)가 리눅스 커널 개발을 위해 만들었습니다.

Git의 특징

1. 분산 버전 관리

중앙 서버에 문제가 생겨도 각 개발자의 로컬 저장소에 전체 이력이 있어 복구가 가능합니다.

# 원격 저장소를 복제하면 모든 이력이 로컬에 저장됩니다
git clone https://github.com/username/repository.git

2. 빠른 속도

대부분의 작업이 로컬에서 이루어지기 때문에 네트워크 지연 없이 빠르게 처리됩니다.

# 로컬에서 실행되는 명령어들 (네트워크 불필요)
git add .
git commit -m "커밋 메시지"
git log
git branch

3. 브랜치 기능

Git의 브랜치는 매우 가볍고 빠릅니다. 새로운 기능 개발이나 버그 수정을 독립적인 브랜치에서 진행할 수 있습니다.

# 새로운 브랜치 생성 및 이동
git checkout -b feature/login

# 브랜치 목록 확인
git branch

4. 스테이징 영역(Staging Area)

Git은 커밋하기 전에 스테이징 영역을 거칩니다. 이를 통해 커밋할 파일을 선택적으로 관리할 수 있습니다.

# 특정 파일만 스테이징
git add src/main/java/User.java

# 모든 변경 파일 스테이징
git add .

# 스테이징 상태 확인
git status

- Git의 세 가지 상태

Git은 파일을 세 가지 상태로 관리합니다. 이 개념을 이해하는 것이 Git을 사용하는 데 매우 중요합니다.

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  Working    │     │   Staging   │     │    Local    │
│  Directory  │ ──> │    Area     │ ──> │ Repository  │
│  (작업 디렉토리) │     │  (스테이징 영역) │     │  (로컬 저장소)  │
└─────────────┘     └─────────────┘     └─────────────┘
       │                  │                    │
       │    git add       │    git commit      │
       └──────────────────┴────────────────────┘

1. Modified (수정됨)

작업 디렉토리에서 파일을 수정한 상태입니다. 아직 스테이징 영역에 추가되지 않았습니다.

# 파일 수정 후 상태 확인
git status

# 출력 예시
Changes not staged for commit:
  modified:   src/main/java/User.java

2. Staged (스테이징됨)

수정된 파일을 다음 커밋에 포함하도록 스테이징 영역에 추가한 상태입니다.

# 스테이징 영역에 추가
git add src/main/java/User.java

# 상태 확인
git status

# 출력 예시
Changes to be committed:
  modified:   src/main/java/User.java

3. Committed (커밋됨)

스테이징 영역의 파일들이 로컬 저장소에 안전하게 저장된 상태입니다.

# 커밋 실행
git commit -m "feat: 사용자 로그인 기능 추가"

# 커밋 로그 확인
git log --oneline

# 출력 예시
a1b2c3d feat: 사용자 로그인 기능 추가
e4f5g6h init: 프로젝트 초기 설정

- Git vs GitHub

Git과 GitHub는 다른 개념입니다. 많은 분들이 혼동하시는 부분이라 정리해 드리겠습니다.

구분 Git GitHub

정의 버전 관리 시스템 (소프트웨어) Git 호스팅 서비스 (웹 서비스)
역할 로컬에서 버전 관리 원격 저장소 제공 및 협업 기능
설치 로컬 컴퓨터에 설치 필요 웹 브라우저로 접속
비용 무료 (오픈소스) 무료/유료 플랜
# Git: 로컬에서 버전 관리
git init
git add .
git commit -m "커밋 메시지"

# GitHub: 원격 저장소와 연동
git remote add origin https://github.com/username/repo.git
git push origin main

Git 호스팅 서비스 종류

GitHub 외에도 여러 Git 호스팅 서비스가 있습니다.

  • GitHub: 가장 많이 사용되는 서비스, 오픈소스 프로젝트에 적합
  • GitLab: CI/CD 기능이 강력, 자체 호스팅 가능
  • Bitbucket: Jira, Confluence 등 Atlassian 제품과 연동 용이

- Git을 사용해야 하는 이유

1. 협업 효율성 향상

여러 개발자가 동시에 같은 프로젝트에서 작업할 수 있습니다.

# 각자 브랜치에서 작업
git checkout -b feature/user-login    # 개발자 A
git checkout -b feature/user-signup   # 개발자 B

# 작업 완료 후 메인 브랜치에 병합
git checkout main
git merge feature/user-login

2. 변경 이력 추적

누가, 언제, 어떤 코드를 변경했는지 추적할 수 있습니다.

# 파일별 변경 이력 확인
git log --follow src/main/java/User.java

# 특정 라인을 누가 수정했는지 확인
git blame src/main/java/User.java

3. 실험적인 개발 가능

브랜치를 활용하여 메인 코드에 영향 없이 새로운 기능을 실험할 수 있습니다.

# 실험용 브랜치 생성
git checkout -b experiment/new-algorithm

# 실험 실패 시 브랜치 삭제
git checkout main
git branch -D experiment/new-algorithm

4. 롤백 가능

문제가 발생했을 때 이전 버전으로 쉽게 돌아갈 수 있습니다.

# 특정 커밋으로 되돌리기
git revert a1b2c3d

# 또는 특정 커밋 상태로 완전히 되돌리기 (주의 필요)
git reset --hard a1b2c3d

마무리

이번 시간에는 Git의 기본 개념과 버전 관리 시스템에 대해 알아봤습니다. Git은 현대 소프트웨어 개발에서 필수적인 도구이며, 혼자 개발하더라도 사용하는 것을 강력히 추천드립니다.

다음 시간에는 Git 설치 및 초기 설정 방법에 대해 알아보겠습니다.


참고 자료