반응형
버전 관리 시스템(VCS(Version Control System))
- 코드나 문서 같은 파일의 변경 이력을 관리하는 도구
- VCS는 크게 로컬, 중앙집중식, 분산형으로 나눌 수 있음
분산형 VCS (Distributed VCS, Git)
- 개념: 모든 개발자가 전체 히스토리(copy)를 로컬에 보관하고, 필요 시 서버와 동기화
- 예: Git, Mercurial
- 장점
- 오프라인 작업 가능 → 로컬에서 커밋, 브랜치, 병합 가능
- 안정성 → 로컬과 원격 서버 모두에 기록 존재
- 빠른 속도 → 대부분 작업이 로컬에서 이루어짐
- 유연한 브랜치 관리 → 브랜치 생성, 병합, 삭제가 자유로움
- 단점: 서버와 연동 시 초기 설정과 동기화 필요
Git
- 파일의 변경 이력을 기록하고, 협업 시 여러 사람이 동시에 작업할 수 있도록 도와주는 분산 버전 관리 시스템
Git의 장점
- 분산형 구조
- 모든 개발자가 전체 히스토리를 로컬에 보유
- 중앙 서버가 없어도 자유롭게 개발 가능
- 빠른 속도
- 대부분 로컬에서 처리
- 서버 통신 최소화
- 브랜치와 병합이 쉬움
- 기능별, 버그 수정별 브랜치를 만들어 독립적으로 개발
- 나중에 안전하게 통합 가능
- 데이터 무결성
- Git은 SHA-1 해시로 각 커밋을 고유하게 관리
- 변경 사항 위조나 손상 방지
- 협업 최적화
- Fork, Pull Request 등 다양한 협업 워크플로 지원
Git 구조
- Git은 파일을 크게 세 영역에서 관리
- 수정 → add → commit 이 3단계가 기본 흐름임
영역 | 설명 | 명령어 |
Working Directory | 내 컴퓨터에서 실제로 수정하는 작업 폴더 | (수정, 저장, 삭제 등 파일 작업) |
Staging Area | 커밋하기 전 임시 대기 공간 | git add |
Repository (Local Repo) | 최종 버전이 저장되는 데이터베이스 | git commit |
커밋(Commit)
- 커밋은 프로젝트의 스냅샷(snapshot) 을 저장하는 행위
- "이 시점의 코드 상태를 기록해둔다"라고 생각하면 됨
- 커밋 메시지 : 이 스냅샷의 설명 (무엇을 왜 바꿨는지)
- 커밋 해시 : 고유 ID (Git이 내부적으로 부여하는 SHA 값)
- 커밋 히스토리 : 이전 커밋과 연결되어 프로젝트의 "타임라인"을 만듦
- 메시지를 의미 있게 작성해야 팀원이 히스토리 보고 쉽게 이해할 수 있음
- ❌ git commit -m "수정"
- ✅ git commit -m "회원가입 폼 검증 로직 추가"
브랜치(Branch)
- 브랜치는 독립된 작업 공간
- 하나의 타임라인에서 파생된 새로운 타임라인을 만든다
- main(또는 master) 브랜치 → 항상 배포 가능한 상태 유지
- 새로운 기능 추가, 버그 수정할 때는 feature 브랜치에서 작업
- 완료 후 merge → main에 통합
- 브랜치를 쓰면 동시에 여러 작업을 진행해도 main이 깨지지 않음
실무 예시
- feature/login → 로그인 기능 개발
- hotfix/typo → 급한 오타 수정
원격 저장소(Remote Repository)
- 원격 저장소는 작업자가 공유하는 중앙 저장소
- GitHub, GitLab, Bitbucket 같은 서비스를 사용
- push → 로컬 저장소의 커밋을 원격으로 업로드
- pull → 원격 저장소의 최신 커밋을 로컬로 가져오기
- fetch → 원격 저장소의 커밋만 확인 (병합은 직접 해야 함)
📌 실무 흐름
- 작업자 새로운 기능을 개발하고 git push
- 다른 작업자는 git pull 해서 최신 코드로 동기화
- 충돌(conflict) 생기면 조율해서 병합 후 다시 push
반응형