| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Kotlin
- file upload
- Producer
- node.js
- 개발이취미인사람
- vue
- 코틀린
- react
- jpa
- 개발이 취미인 사람
- state
- spring boot
- 개발자
- restful api
- Sequelize
- component
- SWIFT
- swagger
- It
- javascript
- AWS
- kafka
- props
- java
- front-end
- 조건문
- back-end
- Nest.js
- 반복문
- 상속
- Today
- Total
개발이 취미인 사람
[Git] - Git이란? 버전 관리 시스템 개념 본문
개요
안녕하세요. 이번 시간에는 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 설치 및 초기 설정 방법에 대해 알아보겠습니다.
참고 자료
'컴퓨터공학 > Git' 카테고리의 다른 글
| [Git] - 브랜치 병합(Merge) 방법 (0) | 2025.12.20 |
|---|---|
| [Git] - 브랜치(Branch) 개념과 생성/삭제 (0) | 2025.12.19 |
| [Git] - .gitignore 설정 방법 (0) | 2025.12.18 |
| [Git] - Git 기본 명령어 (init, add, commit, status, log) (1) | 2025.12.16 |
| [Git] - Git 설치 및 초기 설정 방법 (0) | 2025.12.16 |