오픈소스SW

오픈소스SW_Chapter01_깃과 버전 관리

강용민 2022. 10. 10. 01:44

프로그래밍 개발 과정은 수 만은 코드를 변경하고 테스트하는 단계이다.

프로그램이 지속적으로 변경되는 과정 속에서 코드는 잠시 불안정한 수정 상태와 안정된 상태를 반복한다.

개발자는 안정된 상태의 코드와 불안정한 상태의 코드를 인지하고, 항상 안정된 상태를 유지하도록 노력해야 한다.

그 관리를 도와주는 것이 바로 깃(Git)과 같은 프로그램이다.

 

버전(Version)

개발 도중에는 다양한 기능이 추가되고, 많은 코드가 변경된다.

앞서 설명했다시피 개발자는 작업 과정에서 코드들을 안정되게 유지해야 한다는 것을 잘 알고 있다.

개발 또는 테스트하는 과정에서 불안정한 코드가 있다면 계속 이어서 작업하기 불안하며, 경우에 따라 더 이상 작업하기 어려울 수도 있다.

이때는 이전 상태로 돌아가 다시 시작할 수 있는 코드의 복귀(포인트)지점이 필요하다. 이 시점을 버전이라한다.

 

버전관리필요성

코드를 복귀하는 지점 즉, 버전은 반드시 안정된 코드 상태를 기준으로 설정해야 한다.

사실 우리는 컴퓨터를 사용하면서 이미 다른 이름으로 저장하는 법등 다양한 방법으로 버전을 기록하고 있다.

다른 이름으로 저장하는 방식은 한 문서를 여러 파일로 계속 저장하는 방식이라, 시간 차이를 두고 저장하다 보면 이름 규칙을 잊곤 한다.

또한 작업 상태를 저장하는 것도 변화의 기록이다. 하지만 이 경우엔 덮어쓰기로 저장되어 이전 상태로 돌아갈 수 없다.

 

버전관리시스템(VCS, Version Control System)

버전 관리 시스템은 기존의 번거로운 작업이었던 사본 생성, 보존, 복원을 한번에 할 수 있는 도구이다.

VCS는 코드와 콘텐츠의 변화를 관리하고 추적하는 소프트웨어로 repository에 버전 파일들을 관리하고 저장한다.

VCS는 집중형과 분산형으로 나뉜다.

  • 집중형
    • 모든 소스 코드가 한곳에 집중되어 있는 형태
    • 하나의 메인 중앙 서버에서 개발 구성원의 모든 소스 코드를 통합적으로 관리
    • Client-Server 모델이라고도 한다.
    • 자신이 작업하는 부분만 임시로 로컬에 저장한 후에 작업하는 형태를 띈다.

집중형은 저장소 하나를 중심으로 관리하기에 시스템을 운영하기 수월하지만,

중앙 저장 공간인 서버에 문제가 생기면, 소스 코드가 있는 메인 저장소에 모든 개발자가 접근할 수 없는 상황이 발생할 수 있다. 

또한 동시에 여러 개발자가 접근하면 충돌이 발생하기에 코드 수정을 안정적으로 할 수 있게 잠금 모델을 적용했다. 그렇기에 누군가 먼저 파일을 수정하고 있다면 수정하는 동안 해당 파일에 접근할 수 없게된다.

  • 분산형
    • 분산형 버전 관리 시스템(DVCS, Distributed Version Control System)은 집중형 시스템과 달리 여러 개의 저장소가 있다.
    • 여러 저장소에 각 버전별 소스를 개별 보관
    • 분산 저장소는 P2P 방식으로 공유하며, 각 개발자에게 공유 가능한 저장소 사본을 제공
    • 서버는 각 저장소 자료를 동기화하고 중개하는 역할만 수행
    • 메인 서버가 문제가 생기더라도 지속적으로 개발할 수 있음

 

깃(Git)은 대표적인 DVCS로 원격 저장소와 별개로 개발자 각각의 로컬 컴퓨터에 완벽한(원격 저장소의 내용과 동일한) 복제본 소스코드를 저장할 수 있으며, 그렇기에 매번 중앙 저장소를 조회하지 않아도 개발을 진행할 수 있다

 

특징

  • 네트워크나 인터넷이 연결되어 있지 않은 상태에서도 로컬 컴퓨터의 소스 코드만으로 버전을 관리 할 수 있다.
    물론 작업 후 나중에 인터넷에 연결되면 동기화를 해야한다.
  • 원격 저장소로 많은 개발자의 저장소와 연결하거나 동기화 작업을 할 수 있다.

 

백업 기능

분산형 깃은 자신의 로컬 컴퓨터에서 독립적으로 소스의 버전 관리를 할 수 있다.

만약 컴퓨터에 문제가 생긴다면 지금까지 개발한 모든 소스를 잃을 수 있다.

이에 대비하여 별도의 외부 저장 장치에 데이터를 백업하는 것을 권장하는데, 외부  저장 장치에 백업하는 코드는 단순히 파일을 복사하는 수준이므로 기존 소스 코드와는 동기화하지 않은 별개의 파일이다.

깃을 사용하면 코드를 원격 저장소에 저장할 수 있으며 로컬 컴퓨터의 저장소를 동기화하여 원격 저장소에 백업한다.

 

협업 개발

깃의 코드 공유 기능으로 다수의 개발자와 코드를 공유하고 협업할 때 매우 유용하다.

 

깃의 동작

  • 초기화 : 특정 폴더를 깃 저장소로 설정
  • 커밋 : 변경된 코드의 이력을 기록
  • 브랜치 : 분리 격리된 코드 이력을 기록
  • 병합 : 기존 이력과 분리된 이력을 통합
  • 푸시 : 로컬 저장소의 이력을 서버로 전송 및 공유

 

문제

VCS란?

Version Conrol System의 약자로, 코드와 콘텐츠의 변화를 관리하고 추적하는 소프트웨어

 

VCS는 집중형과 분산형으로 나뉜다. 이 둘의 차이점과 공통점을 무엇인가?

집중형과 분산형 모두 저장소에 저장을 한다.

하지만 집중형은 하나의 중앙 서버를 중심으로 관리하기에 중앙 저장 서버에 문제가 생기면 큰 문제를 야기시킬 수 있다.

분산형은 여러 저장소에 각 버전별 소스를 개별 보관하고 P2P 방식으로 공유한다.

서버는 각 저장소 자료를 동기화하고 중개하는 역할만 수행한다. 그렇기에 메인 서버에 문제가 생기더라도 지속적으로 개발할 수 있다.

 

깃의 기능

대표적인 DVCS로 다음과 같은 특징 및 기능이 있다.

  • 백업 기능
  • 협업 개발 가능
  • 코드 공유 가능
  • 책임과 기록
  • 원격 공유
  • 병합
  • 공개

깃의 동작

초기화 -> 커밋 -> (브랜치) -> 병합 -> 푸시

'오픈소스SW' 카테고리의 다른 글

오픈소스SW_Chapter03_깃 시작  (0) 2022.10.10
오픈소스SW_Chapter02_깃설정  (0) 2022.10.10
오픈소스SW_Chapter06_브랜치  (0) 2022.10.04
git과 github의 차이  (0) 2021.08.04
Git_2.브랜치  (0) 2021.08.04