GitHub

버전 관리 시스템과 Git의 기본이론 및 원리(Git vs SVN)

balabala 2023. 5. 4. 13:03
728x90
SMALL
목차
  • 버전 관리 시스템이란?
  • 버전 관리 소프트웨어의 종류
  • 버전 관리 시스템의 종류
  • Git과 SVN의 주요 차이점
  • Git의 기본이론

 

버전 관리 시스템이란?

  버전관리(Revision control)는 개발과정에서 사용하는 파일, 디렉토리 등에 대한 수정 이력을 기록 및 관리하며, 변경 이력에 대해 쉽게 열람할 수 있을 뿐만 아니라, 특정 시점의 버전으로 편하게 복원해주는 시스템이다. 아래는 버전 관리 시스템의 장점을 간단하게 정리해 보았다.

  • 공간에 제한받지 않고 여러 사람과 협동 개발이 가능하다.
  • 하나 또는 그 이상의 파일의 수정 및 관리 이력을 추적하고 기록한다.
  • 각 버전의 백업을 통해 프로젝트 파일과 문서의 구성을 보호한다.
  • 업무량에 대해 집계 해주기 때문에 공헌도 및 인력관리에 수월하다.
  • 병행개발을 통해 개발 효율을 향상할 수 있다.
  • 전체 소프트웨어의 개발 과정을 추적기록한다.
  • 개발자들의 부담을 줄이고, 시간절약과 동시에 인적 오류를 줄일 수 있다.

  쉽게 정리하면 1명 이상이 개발하는 프로젝트를 관리하는데 도움을 주는 시스템이라고 생각하면 된다. 만약 프로젝트 진행 과정에서 버전관리에 대한 제대로 된 프로세스가 없다면, 소프트웨어 개발 과정 중 코드 일관성, 중복 내용, 병행개발 등 다양한 부분에서 문제가 발생할 우려가 있다.

  간단한 예시를 들자면 다음 사진과 같다. 누구나 한 번쯤은 회사 업무 및 학교 과제를 진행할 때 다음과 같이 파일의 버전을 수기로 관리해본 경험이 있을 것이다. 만약 2인 이상의 협업 프로젝트를 다음과 같이 관리한다면, 파일을 병합하는 과정에서 시간도 걸리고, 수기로 병합하는 과정에서 놓치는 부분도 생길 것이므로 버전 관리 시스템이 절실하게 필요한 것이다.

 

버전 관리 소프트웨어의 종류

  버전관리 소프트웨어의 종류는 많지만, 다음과 같은 소프트웨어가 주를 이룬다.

  • Git
  • SVN(Subversion)
  • CVS(Concurrent Versions System)
  • VSS(Microsoft Visual SourceSafe)
  • TFS(Team Foundation Server)
  • Visual Studio Online

  위 소프트웨어 중 가장 많이 사용되는 것은 Git과 SVN이며, Git은 무료이고 보편화된 소프트웨어이므로 우리는 Git을 배워야 한다. Git에 대해 알아보기 전 간단하게 버전관리 시스템의 종류에 대해서 알아보자.

버전 관리 시스템의 종류

1. 로컬 버전 관리(Local VCS)

  디렉토리에 파일을 복사해 버전을 관리하는 방식은 간단하기 때문에 자주 사용되지만, 실수로 삭제하거나 파일을 잘못 고치는 문제 때문에 데이터베이스를 사용해 파일의 변경 정보를 관리하는 시스템을 만들었는데, 그것이 로컬 버전 관리 시스템이다. 여러 사람과의 협업보다는 개인 프로젝트에 적합하며, 컴퓨터가 고장나 내부 정보가 통째로 날아간다면 복구할 방법이 없다는 단점이 있다.

  대표 도구로는 RCS(Revision Control System)가 있다.


2. 중앙집중식 버전 관리(CVCS)

  중앙 Server에서 모든 버전의 데이터를 관리 및 저장하며, 수정하기 위해서는 Server에 요청해 파일을 받은 후 수정하고, 다시 Server에 올리는 방식이다. 로컬 버전 관리보다 협업이 쉬워지고 관리자가 누가 어떤 일을 하고 있는지 알기 쉬운 장점이 있다. 하지만 단점으로 2개를 꼽을 수 있다.

  • 협업의 규모가 커지면 수정 충돌 문제가 발생할 우려가 있다.

  간단한 예시로 같은 파일을 2명의 작업자가 중앙 Server로부터 받은 이후 각자 다른 내용을 수정 후 다시 Server에 올렸을 때 두 개의 수정내용 중 한 개만 반영되는 수정 충동 문제가 발생할 수 있다.

  • 만약 서버 연결에 문제가 생기면, 사용자는 오직 자신의 로컬에 있는 파일만 사용할 수 있기 때문에, 다른 사용자와의 협업과 최신버전과의 동기화 문제가 발생한다. 또한 모든 데이터를 가지고 있던 서버에 손상이나 고장이 나면, 모든 데이터를 잃을 수 있다.

  대표 도구로는 SVN, CVS, VSS등이 있다.


3. 분산 버전 관리 시스템(DVCS)

  서버뿐만 아니라 모든 사용자가 모든 버전에 대한 히스토리를 가지고 있기 때문에, 로컬에서도 수정 이력과 내용을 볼 수 있다. 그리고 인터넷 연결 문제 때문에 작업에 지장을 받지 않으며, 만약 중앙 Server나 로컬 컴퓨터가 고장 나도, 정상적인 로컬이 하나만 살아 있어도 모든 데이터를 복원하는데 문제가 되지 않기 때문에 가장 안정적이고, 편리하나, 이는 로컬의 저장 공간을 점유한다는 단점이 존재한다.

  대표 도구로는 Git이 있다.

SMALL
Git과 SVN의 주요 차이점
  • SVN은 중앙 집중식 버전 관리 시스템이지만, Git은 분산 버전 관리 시스템이다.
  • SVN은 모든 버전에 대한 원본 파일을 저장하므로 용량이 크지만, Git은 파일에 대한 링크(메타데이터)만 저장하기 때문에 용량이 작다.
  • SVN은 사용자 인터페이스 조작이 편리해 개발자 이외 직군의 사람도 사용하기 쉽지만, Git은 오픈 소스 프로젝트 개발자를 위한 것이라 사용 편의성보다는 효율성에 집중을 둔 것으로 개발자가 사용하기 적합하다.
  • SVN은 기업 내 프로젝트 관리자를 중심으로 하는 병렬 프로젝트 개발에 적합하고, Git은 오픈 소스 프로젝트에 다양한 사람이 참여하는 단일 프로젝트 개발에 적합하다.
  • SVN은 서브 디렉토리에 대한 읽기 및 쓰기 권한을 그룹 또는 개인별로 엄격하게 구분 및 관리하지만, Git은 계정만 있으면 누구나 코드를 가져올 수 있다.

 

Git의 기본이론

Git 프로젝트에는 다음 그림과 같이 Working Directory, Staging Area(Index), .git directory(Repository), Remote 4가지 단계와 3가지 파일 상태가 존재한다.

1. 단계

  • Working Directory : Workingspace라고도 하며, 프로젝트 하는데 있어 작업을 하는 디렉토리를 의미한다. 프로젝트 코드가 저장되어 있는 장소라고 생각하면 된다.
  • Staging Area(Index) : 변경 사항을 임시로 저장하는 영역으로, 곧 commit할 파일에 대한 정보를 저장하고 있는 파일이다.
  • .git directory(Repository) : 프로젝트 모든 버전에 대한 메타데이터와 객체 데이터베이스를 저장하는 곳으로, Git의 핵심이다.
  • Remote : 간단히 말하면 원격창고이다. 코드를 호스팅하는 서버로 프로젝트 그룹 중 원격 데이터 교환을 위해 존재하는 하나의 로컬이라고 보면 된다.

2. 상태

  • Committed : 데이터가 로컬 데이터베이스에 안전하게 저장된 파일.
  • Modified : 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 상태의 파일.
  • Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태의 파일.

Git의 일반적인 작업 흐름은 다음과 같다.

  1. Working Directory에 파일이 추가되거나 수정. -> Modified
  2. Modified 상태의 파일을 Staging Area에 넣고 commit할 스냅샷을 만든다. -> Staged
  3. Staging Area에 있는 파일을 commit해서 .git directory(Repository) 에 영구적인 스냅샷으로 저장한다. -> Committed

728x90
LIST