나만의 학습 기록

최종 목적은 기술 블로그💩

백엔드 공부

버전 관리 시스템과 저장소 호스팅 서비스

밈밍민믹 2026. 4. 9. 17:24

안녕하세요. 오늘은 하루종일 비가 내리네요. 비가 내리니까 기온이 확 떨어지고 춥네요. 다들 감기 조심하시고 공부 시작해보도록 할까요?

어제 POSIX의 기초까지 끝내고 오늘은 버전 관리 시스템의 정의와 사용 이유, 저장소 호스팅 서비스인 GitHub의 사용법을 배워보도록해보갰습니다.


버전 관리 시스템 Version Control System

버전 관리란?

  • 파일, 문서, 소스 코드 등의 변경 이력을 시간에 따라 기록하고 추적하여, 특정 시점으로 복구하거나 협업을 용이하게 하는 시스템
  • 과거 어떤 시점의 파일 내용을 확인 가능
  • 파일의 상태를 과거의 특정 시점으로 되돌리기 가능
  • 누가 언제 어떤 내용을 수정했는지 확인 가능

 

버전 관리의 필요성

문서나 프로그램을 작성할 경우 계속적인 수정 작업을 거치면서 완성 해나가며, 특히 다수의 사람이 참여하고 수많은 프로그램과 산출물을 관리해야하는 소프트웨어 프로젝트에서는 변경 이력 관리가 더욱 필요하다. 하지만 수작업으로 관리하는 것은 불가능에 가깝기에 자동으로 관리하는 버전 관리 시스템이 등장하게 되었다.

 

버전 관리 시스템 유형

로컬 버전 관리 시스템

  • 데이터베이스를 사용해서 파일의 변경 정보를 관리한다.
  • 로컬 환경에서 관리하기에 프로젝트 관리자가 모든 클라이언트의 로컬 데이터베이스를 관리해야한다.
  • 로컬 데이터베이스가 있는 하드디스크에 문제가 생기면 클라이언트의 모든 히스토리를 잃게 된다.

대표적으로 RCS가 있다.

 

중앙집중식 버전 관리 시스템

  • 파일을 관리하는 서버가 별도로 존재하고 클라이언트가 중앙 서버에서 파일을 받아서 사용한다.
  • 누가 무엇을 하는지 꼼꼼하게 관리할 수 있고, 중앙 서버 하나만 관리하면 되기에 로컬 버전 관리 시스템보다 효율적이다.
  • 중앙서버가 다운될 경우 협업, 백업할 방법이 없으며, 중앙 데이터베이스가 있는 하드디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃게 된다.

대표적으로 CVS, Subversion, Perforce가 있다.

 

분산 버전 관리 시스템

  • 파일의 마지막 스냅샵을 Checkout하지 않고, 저장소를 히스토리와 더불어 전부 복제한다.
  • 서버에 문제가 생겨도 클라이언트의 저장소로 다시 작업할 수 있으며, 클라이언트의 저장소로 서버를 쉽게 복원할 수 있다.
  • 원격 저장소가 존재하여 클라이언트는 동시에 다양한 그룹과 다양한 방법으로 협업이 가능하다.

대표적으로 Git, Mecurial, Bazaar, Darcs가 있다.

 

버전 관리의 의미, 필요한 이유 그리고 유형에 대해서 알아보았습니다. 오늘날은 분산 버전 관리 시스템을 주로 이용하는데요. 그 중 대표적인 예시인 Git에 대해서 자세히 알아볼 필요가 있습니다.


Git

컴퓨터 파일의 변경 사항을 추적하고, 여러 사용자 간의 작업을 조율하는 분산 버전 관리 시스템입니다.

 

Git 용어

용어 의미
Repository 프로젝트의 코드와 변경 이력을 저장하는 공간
Working Directory 실제로 파일을 수정하는 공간
Staging Area git add로 커밋하기 전에 변경 사항을 저장하는 공간
Commit 특정 시점의 변경 사항을 저장하는 것
Branch 독립적으로 작업할 수 있는 코드의 분기(main / develop / feature 등)
Merge 다른 브랜치의 변경 사항을 현재 브랜치로 합치는 작업
Rebasee 브랜치의 시작점을 다른 브랜치의 최신 커밋으로 변경하여 깔끔한 히스토리 유지
Remote Repository GitHub, GitLab, Bitbucket 같은 서버에 저장된 레파지토리
Local Repository 내 컴퓨터에 있는 Git 저장소

 

Git 상태

용어 의미
Untracked Git이 관리하지 않는 파일로 git add를 해야 추적됨
Modified Git이 추적 중인 파일이 변결된 상태로 git add전을 나타낸다.
Staged git add로 커밋 대기 상태(commit 가능한 상태)
Committed git commit을 해서 변경 사항이 로컬 저장소에 반영된 상태
Pushed git push로 원격 저장소에 업로드된 상태

 

 

원격 저장소

용어 의미
origin 기본 원격 저장소의 이름
upstream 포크한 저장소의 원본 저장소
fetch 원격 저장소에서 변경 사항을 가져오지만 병합하지 않음
pull 원격 저장소에서 변경 사항을 가져오고 자동 병합
push 로컬 변경 사항을 원격 저장소에 업로드

 

 

이렇게 기본적인 용어에 대해서 학습해보았는데, 그렇다면 이걸 도대체 어떻게 어디에서 사용되는걸까? 라는 의문이 드시죠? 아까 얘기했던 GitHub, GitLab, Bitbucket 같은 서버에서 사용됩니다. 그 중 GitHub를 중심으로 알아볼까요?


GitHub

https://github.com/

 

GitHub · Change is constant. GitHub keeps you ahead.

Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity.

github.com

분산 버전 관리 도구인 Git을 사용하는 프로젝트를 지원하는 웹호스팅 서비스입니다. 즉, GitHub를 통해 언제 어디서나 협업 프로젝트를 쉽게 진행할 수 있도록 도와줍니다.

 

GitHub에서 계정이나 레파지토리를 생성하는 것에 대해서 언급하지 않겠습니다. 기본적으로 사용되는 명령어를 알아보도록 하겠습니다.

 

명령어

명령어 설명
git init 현재 디렉토리를 git 저장소로 초기화(시작)
git clone <원격 레파지토리 주소> 원격 저장소를 로컬로 복제
git status 현재 브랜치 상태를 확인한다.
git add <파일명> 특정 파일을 스테이징 영역에 추가한다.
git add . 변경된 모든 파일을 스테이징 영역에 추가한다.
git commit -m "커밋메시지" 스테이징 변경 사항을 해당 커밋 메시지로 커밋
git log 커밋 기록 확인
git show <커밋ID> 특정 커밋의 상세 정보 확인
git diff 변경된 사항 비교

 

브랜치

프로젝트를 관리하기 위해서는 main 하나에 관리하는 것보다 feature, develop 등 다양한 브랜치로 관리하는 것이 수정, 병합 등의 과정에서 훨씬 좋습니다.

명령어 설명
git branch 현재 브랜치 목록 확인
git branch <브랜치명> 새로운 브랜치 생성
git checkout <브랜치명>  해당 브랜치로 이동
git switch <브랜치명> 해당 브랜치로 이동(checkout은 이동 이외에 대한 기능을 포함하지만 switch는 브랜치 이동만을 실행한다.)
git checkout -b <브랜치명> 브랜치 생성 후 바로 이동
git switch -c <브랜치명> 브랜치 생성 후 바로 이동
git merge <브랜치명> 현재 브랜치에 지정한 브랜치를 병합
git rebase <브랜치명> 현재 브랜치를 지정한 브랜치 위로 이동(히스토리 정리)
git branch -d <브랜치명> 브랜치 삭제(병합된 경우)
git branch -D <브랜치명> 강제 브랜치 삭제(병합되지 않아도 삭제)
git branch -d/-D <브랜치명1><브랜치명2><브랜치명3> 여러 브랜치 삭제

 

원격 저장소

명령어 설명
git remote -v 등록된 원격 저장소 확인
git remote add origin <저장소 URL> 원격 저장소 추가
git push origin <브랜치명> 원격 저장소에 푸시
git push -u origin <브랜치명> 최초 푸시 및 추적 설정
git pull origin <브랜치명> 원격 저장소에서 변경 사항 가져오기
git fetch origin 원격 저장소의 최신 상태 정보 가져오기

 

 

대략적으로 깃/깃허브 명령어와 용어에 대해서 알아봤습니다. 추가적으로 깃 명령어를 학습하고 싶으시다면 해당 사이트를 추천드립니다.

https://learngitbranching.js.org/?locale=ko

 

Learn Git Branching

An interactive Git visualization tool to educate and challenge!

learngitbranching.js.org

 


이렇게 버전 관리 시스템, Git, GitHub에 대해서 알아보았습니다. GutHub를 사용하기 위해서는 Git이 깔려있어야하니, 해당 부분에 대해서는 다른 분들의 글을 찾아주시면 될 것 같습니다. 처음 해보시는 분들은 굉장히 생소하고 낯설겠지만 사용하다보면 편리하다를 느끼실겁니다. 이상으로 포스트를 끝마치며 다음에는 데이터베이스에 관한 글이 올라갈 예정입니다. 수고하셨습니다.