백엔드 개발자
형상 관리 Git 본문
1. 형상 관리란?
형상 관리(Configuration Management)는 소프트웨어 개발 및 운영 과정에서 코드, 문서, 설정 파일 등 모든 시스템 구성요소의 변경을 체계적으로 관리하는 활동이다.
=> 쉽게 말하면 "내가 만든 코드나 시스템이 언제, 왜, 누가, 어떻게 바뀌었는지 기록하고 관리하는 것" 이다.
주요 목적
- 일관성 유지: 코드, 문서, 설정 값 등이 원하는 상태로 유지
- 변경 관리: 변경 이력을 기록하고 추적
- 품질 보증: 의도하지 않은 변경이나 오류 방지
- 협업 지원: 충돌 없이 효율적으로 협업 가능
- 재현성 확보: 과거 특정 시점으로 시스템 복원 가능
2. 형상 관리 프로세스
- 형상 식별: 관리할 항목 정의 (코드, 문서, 설정 등)
- 형상 통제: 변경 요청 승인 및 반영
- 형상 상태 기록: 현재 상태와 변경 이력 기록
- 형상 감사: 요구사항에 맞게 적용됐는지 검토 및 검사
3. 분산형 vs 중앙집중형 VCS
중앙집중형 VCS
- 중앙 서버가 존재하며, 모든 작업은 서버와 직접 통신
- 서버 다운 시 작업 불가
- 서버에만 전체 이력 존재 (ex: SVN, CVS)
분산형 VCS
- 모든 사용자가 전체 이력을 로컬에 복제
- 서버가 없어도 로컬에서 작업 가능 (ex: Git, Mercurial)
구분 | 중앙집중형 | 분산형 |
서버 의존성 | 높음 | 낮음 |
오프라인 작업 | 불가 | 가능 |
예시 도구 | SVN, CVS | Git, Mercurial |
장점 | 통제 용이, 내부망 전용 환경에 적합. | 백업 안정성(로컬), 병령 개발에 유리. |
4. Git과 Git 플랫폼(GitHub, GitLab, Bitbucket)
Git
- 버전 관리 시스템(VCS) 그 자체
- 로컬에서 코드 및 변경 이력 관리 가능
GitHub, GitLab, Bitbucket
- Git 저장소를 온라인에서 협업/공유할 수 있게 해주는 플랫폼
- CI/CD, 코드 리뷰, 이슈 트래킹 등 다양한 부가 기능 제공
플랫폼 | 특징 |
GitHub | 오픈소스 친화, GitHub Actions 제공 |
GitLab | 온프레미스 가능, GitLab CI/CD 내장 |
Bitbucket | Atlassian(Jira)과 연동 용이, Pipelines 지원 |
5. Git 필수 명령어 및 예제
clone
- 원격 저장소를 내 로컬에 복제
git clone https://github.com/user/repo.git
pull
- 원격 저장소의 변경사항을 로컬로 가져와 병합 (Fetch + Merge)
git pull origin main
push
- 로컬의 변경사항을 원격 저장소로 전송
git push origin feature/login
fetch
- 원격 저장소의 변경사항을 로컬로 가져오기만 하고 병합은 안함
git fetch origin
merge
- 두 브랜치를 병합하면서 merge commit 생성
git checkout main
git merge feature/login
fork & upstream 등록
git remote add upstream https://github.com/원본주소.git
git fetch upstream
git merge upstream/main
6. 브랜치 병합 전략 및 예제
merge
git checkout main
git merge feature/login
- 병합 커밋이 생성되어 히스토리 분기가 유지됨
rebase
git checkout feature/login
git rebase main
- 커밋들을 main 뒤로 재배치하여 선형 히스토리 생성
squash (merge 시)
git checkout main
git merge --squash feature/login
git commit -m "feat: 로그인 기능 추가"
- 커밋을 하나로 합쳐서 병합
cherry-pick
git checkout main
git cherry-pick abc1234
- 특정 커밋만 골라서 적용
7. 실무에서 유용한 Git 명령어 및 예제
rebase -i (인터랙티브 rebase)
git rebase -i HEAD~3
- 여러 커밋을 squash 등으로 합치고 커밋 메시지 정리
stash
git stash
# 임시 저장 후 다른 브랜치로 이동 가능
git stash pop
reflog
git reflog
# 과거 HEAD 상태 확인 및 복구 가능
git reset --hard HEAD@{2}
reset
git reset --soft HEAD~1
- soft/mixed/hard로 커밋/스테이징/작업 디렉토리 삭제 범위 선택
git log 그래프 보기
git log --oneline --graph --all
- 브랜치 구조를 한눈에 확인
cherry-pick
git cherry-pick 커밋해시
- 특정 커밋 하나만 골라서 내 브랜치에 적용
Comments