> [!abstract] Introduction
> 이번 글에서는 버전 관리*Version Control*과 버전 관리 시스템*Version Control System*에 대해 알아봅니다.
# Version Control
버전 관리는 소프트웨어 프로세스 중 만들어진 서로 다른 버전의 형상 객체*Configuration Object*를 관리하기 위한 절차와 도구를 합친 개념이다. Git이 대표적인 버전 관리 시스템 중 하나다.
```mermaid
%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'mainBranchName': 'master'}} }%%
gitGraph
commit id: "Init"
branch "feature/my-feature"
checkout "feature/my-feature"
commit id: "Dev 1"
commit id: "Dev 2"
commit id: "Tests"
%% Sync with Master (Simulation)
checkout master
commit id: "Upstream Update"
checkout "feature/my-feature"
merge master id: "Sync Upstream"
commit id: "Fix Conflict"
%% Review & Merge
checkout master
merge "feature/my-feature" id: "Squash & Merge" tag: "PR #123"
%% Production Deploy
commit id: "Trigger Deploy" tag: "v1.0.1"
%% New Feature
branch "feature/next-idea"
checkout "feature/next-idea"
commit id: "Start Work"
```
그래서 버전 관리 시스템은 프로젝트 데이터베이스, 버전 관리 기능, make 시스템, 그리고 이슈 트래킹 기능을 자체적으로 구현하거나 그 기능들과 직결되어 있다.
## Project Database
저장소*Repository*라고도 부르며, 프로젝트와 관련된 모든 형상 객체를 저장한다.
## Version Management
버전 관리 시스템이니 당연히 버전을 관리할 수 있어야 한다. 이를 위해서는 형상 객체의 모든 버전을 저장하거나 과거 버전에서의 차이를 통해 어떤 버전이든 만들 수 있어야 한다.
## Make Facility
이 시스템은 소프트웨어 엔지니어가 관련된 형상 객체를 전부 모아 소프트웨어의 특정 버전을 만들 수 있도록 해준다.
## Issue Tracking
버그 추적*Bug Tracking*이라고도 불리는 이 기능은 팀이 각 형상 객체와 연결된 모든 이슈를 추적하고 기록할 수 있게 해준다.