> [!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*이라고도 불리는 이 기능은 팀이 각 형상 객체와 연결된 모든 이슈를 추적하고 기록할 수 있게 해준다.