SE (Software Engineering) 에서는 소스 코드 내역을 관리하는 것을 버전관리라고 정의합니다.
Software Configuration Management (형상관리) 의 개념은 산업 공학이나 생간 기반 제조 공학등이
소프트웨어 쪽으로 넘어오면서 학문적인 관심에 의해 생겨나게 된 개념이라고 합니다.
Why
왜 버전 관리를 해야하는 가?
소스코드를 백업해 두어 분실의 위험에서 보호하며, 코드 수정 전후 내용을 파악하여
추후 발생할 지도 모를 에러 수정에 대비하는 절차가 필요했습니다.
- 뭔가 잘 못 됐을 때 복구
- 과거의 특정 시점으로 돌아가기
- 팀 프로젝트의 팀원간 수정 내역 동기화를 자동화
- 소스 코드 변경사항을 (안전하게) (누가했는지) (코드의 의미) 추적
- Branch 로 프로젝트에 영향을 최소화하며 새 기능 추가를 작업하기 위해
- 리뷰가 끝난 후, Merge 로 새 기능을 Trunk (본류) 로 합치기 위해
이를 자동화하며 에러 수정을 도와줄 시스템으로 '국제 협력 개방 소프트웨어(Open Source SW)'들이 사용되고 있습니다.
How : Git 의 Flow (흐름)
일반적으로 소프트웨어가 어떻게 버전 관리가 이루어지는 지 아래와 같이 정리하였습니다.
1. David 이 새로운 파일을 생성하고 Git 에 추가
Working Directory 에서 Staging Area 로 파일을 올립니다.
git add newFile.cs
2. David 이 해당 파일을 로컬 저장소(Repository) 에 Commit
파일을 로컬 저장소에 저장한 후, 커밋 할 때 설명도 함께 써 놓습니다.
git commit -m "Add newFile.cs with initial content"
3. David 이 커밋한 내용을 원격 저장소에 Push
깃헙이나 깃랩 같은 원격 저장소에 올립니다.
git push origin main
4. Jennifer 가 원격 저장소의 변경 내용을 Pull (동기화)
David 이 푸쉬한 커밋을 Jennifer 의 로컬 저장소에 가져옵니다. (Pull = Fetch + Merge)
git pull origin main
5. Jennifer가 변경된 내용 확인 (Log 및 Diff)
변경 History 를 보고, 커밋한 내용의 Diff (차이) 를 확인합니다.
git log git diff HEAD~1
요약하면, 아래와 같습니다.
- David 이 새 파일을 만들고 git add 로 스테이징
- git commit 으로 설명과 함께 커밋
- git push 로 원격 저장소(Repository)에 업로드
- Jennifer 가 git pull 로 최신 내용을 동기화
- Jennifer 가 git log / git diff 로 변경 내역 확인
대표적인 버전관리 도구
현재 가장 널리 사용되고 사랑받는(?) 분산형 버전 관리 도구입니다.

Git 을 알기 전에 보통 GitHub 로 먼저 접하게 되는 분들이 많을 거 같습니다. (제가 그랬어용ㅎ.ㅎ)
어려운 터미널 사용 대신에 GitHub Desktop, GitKraken, SourceTree 등의
GUI 클라이언트 사용이나, IDE 에 내장된 기능으로도 사용 가능합니다.

SVN; Subversion, 중앙 집중형 (하나의 Center Repo 에 커밋하는 중앙 저장소) 버전 관리 도구로, Git 보다 먼저 등장했습니다.
Git 보다 사용 빈도가 낮아지는 중이고, Mercurial 이나 CVS 보다는 많이 사용된다고 합니다.
CVS 관리 도구의 파일 이름 변경 불가, 디렉토리 이동/ 변경이 불가능한 한계를 보완하기 위해 등장한 친구이지만,
중앙 저장소에 문제가 발생할 경우, 서비스 자체가 중단될 수 있으며,
Git 보다 사용하기 더 직관적이라고는 하지만, 좀 더 복잡한 Git 이 더 많이 쓰이는 데는 그만한 이유가 있지 않을까 싶습니다.
Git 은 SVN 과 비교하면, 중장 저장소 (Center Repo) 를 통째로 복사한 Branch Repo 를 각각 개발자들이 가져가
로컬에서 소스 코드를 변경하고, 변경 사항을 중앙 저장소에 반영하도록 Pull Request 를 요청하며 운영됩니다.
말고도 Python 기반의 Mercurial 이나 CVS 등도 있습니다.
호스팅 서비스
버전 관리 도구는 로컬에서만 쓸 수도 있지만, 협업이나 백업을 위해서 사용되는 것이 중요하므로, 서버가 필요합니다.
이 과정을 도와주는 호스팅 서비스들이 몇개 있습니다.

GitHub 는 가장 인기 있는 호스팅 서비스로, 학생 인증하면 비공개 Repository가 무료이며, 인원 제한이 없습니다.
특히 인기있는 만큼, 풍부한 오픈소스 생태계가 특징입니다.
https://github.com/tiimgreen/github-cheat-sheet/blob/master/README.ko.md
github-cheat-sheet/README.ko.md at master · tiimgreen/github-cheat-sheet
A list of cool features of Git and GitHub. Contribute to tiimgreen/github-cheat-sheet development by creating an account on GitHub.
github.com

아틀라시안 Bitbucket 입니다.
Atlassian 계열의 Jira, Trello, Confluence 등의 연동이 강력한 특징으로, 5인 이하의 공동작업은 무료입니다.
GitLab 또한 깃헙과 유사하지만, CI/CD 파이프라인에서 이점이 있으며, 그로 인해 DevOps 전용 기능과
Self-Host (회사 자체 서버에 설치해서 사용 가능해용) 가 가능합니다. (회사에서 외부 클라우드를 보안상 꺼려하면 사용하나봐요)
외에도 AWS CodeCommit, Azure Repos, Gitea, SourceHut 등이 있습니다.
형상 관리는 정말 중요하답니다~
그럼 좋은 하루 되세용~ (⁎ᴗ͈ ⩊ ᴗ͈⁎)
'- CS > 협업' 카테고리의 다른 글
| [협업] CI/CD Pipeline 파이프라인 (2) | 2025.06.05 |
|---|---|
| [협업] CI / CD (1) | 2025.06.03 |
| [Issue Tracker] Jira 지라 협업툴 (0) | 2025.05.31 |