> [!abstract] Introduction
> 버전 관리*Version Control*는 소프트웨어 개발 과정에서 만들어지는 형상 객체의 서로 다른 버전을 관리하기 위한 절차와 도구를 합친 개념입니다. Git으로 대표되는 버전 관리 시스템은 변경 이력 추적, 빌드, 이슈 관리까지 아우르며 현대 소프트웨어 개발의 기반을 이룹니다. 이 글에서는 버전 관리의 개념과 버전 관리 시스템의 핵심 구성요소를 살펴봅니다.
# 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*이라고도 불리는 이 기능은 팀이 각 형상 객체와 연결된 모든 이슈를 추적하고 기록할 수 있게 해준다.