[네이버클라우드] AIaaS 개발자 과정/웹 프로그래밍

[네이버클라우드캠프] 2023.5.24 웹 프로그래밍(1) - 버전관리

_꼬마돌 2023. 5. 24. 09:23
반응형

버전관리

S/W 형상관리 (=버전관리) 시스템 (SCM : Software Configuration Management System)

1. 로컬 버전관리 시스템

로컬 버전관리 시스템 (Local Version Control System)
개발자가 소프트웨어 개발 프로젝트를 관리하기 위해 사용하는 단일 개발자 환경에서의 버전관리 도구.
주로 개발자 개인의 컴퓨터에 설치되어 사용되며, 개발자가 파일의 변경 내역을 추적하고, 이전 상태로 복원하거나 변경 사항을 비교하는 등의 작업을 수행할 수 있게 해준다. 로컬 버전관리 시스템은 단순한 데이터베이스로서 작동하며, 개발자가 프로젝트 디렉토리 내에서 파일의 상태를 기록한다. 

주요 기능
1. 버전 추적
- 개발자가 파일의 변경 내역을 추적할 수 있도록 한다. 개발자는 파일을 수정한 후 변경 내역을 저장(commit)할 수 있으며, 저장된 각각의 버전은 고유한 식별자를 가지고 있다. 
2. 변경 내역 비교
- 개발자는 저장된 버전 간의 변경 사항을 비교할 수 있다. 이를 통해 개발자는 어떤 부분이 수정되었는지 확인하고, 이전 상태로 되돌릴 필요가 있는지를 판단할 수 있다. 
3. 이전 상태로의 복원
- 개발자가 이전에 저장한 버전으로 소스 코드나 파일을 복원할 수 있는 기능을 제공한다. 이를 통해 개발자는 잘못된 변경을 수정하기 위해 이전 상태로 돌아갈 수 있다. 
4. 브랜치 관리
- 일부 로컬 버전관리 시스템은 브랜치(branch) 기능을 제공하여 개발자가 별도의 작업 흐름을 만들고 여러 개의 변경을 병합할 수 있게 해준다. 동시에 여러 기능 또는 버그 수정을 개발할 때 유용하다. 
RCS - Revision Control System
주로 텍스트 파일의 변경 내역을 추적하고 버전을 관리하는 데 사용되는 도구.
파일 단위로 작동하여, 개별 파일에 대한 변경 내역을 추적하기 위해 파일의 각 버전을 저장한다. 파일의 초기 버전을 저장하고, 이후 파일이 수정될 때마다 변경된 부분만을 저장하여 저장 공간을 절약한다. RCS는 단일 사용자 환경에서 주로 사용되며, 로컬 버전관리 시스템으로 분류된다. 텍스트 파일의 버전을 추적하고 변경 관리하는 데는 효과적이지만, 분산 버전관리나 팀 협업과 같은 기능은 제공하지 않는다. 

 

2. 중앙 집중식 버전관리

중앙 집중식 버전관리 (Centralized Version Control)
여러 사용자가 중앙 서버에 접근하여 파일의 버전을 관리하는 버전관리 시스템.
파일의 변경 내역과 버전을 중앙 서버에 저장하고, 개발자들은 중앙 서버에서 파일을 가져와 작업을 진행하고 변경 내역을 업데이트한다.

주요 특징
1. 중앙 서버
- 중앙 집중식 시스템에서는 모든 파일과 변경 내역이 중앙 서버에 저장된다. 개발자들은 중앙 서버로부터 파일을 받아와 작업하고 변경 내역을 업로드한다. 중앙 서버는 모든 파일의 상태와 버전 관리를 담당한다. 
2. 네트워크 의존성
- 중앙 집중식 시스템은 개발자들이 중앙 서버에 접근하여 파일을 가져오고 업로드해야 하기 때문에 네트워크에 의존한다. 개발자가 네트워크에 연결되어 있지 않거나 중앙 서버에 접근할 수 없는 경우 작업이 제한될 수 있다. 
3. 협업과 충돌
- 여러 개발자가 동시에 중앙 서버에서 작업을 진행할 때, 같은 파일을 동시에 수정하면 충돌이 발생할 수 있다. 충돌을 해결하기 위해 중앙 서버는 충돌을 감지하고 개발자에게 충돌 상황을 알려준다. 개발자들은 충돌을 해결하고 변경 내역을 업로드하여 버전을 업데이트 해야한다. 
4. 업데이트와 업로드
- 개발자는 작업을 시작하기 전에 중앙 서버로부터 최신 버전의 파일을 가져와야 한다. 이후 작업이 완료되면 변경된 내용을 중앙 서버에 업로드하여 버전을 업데이트한다. 이러한 업데이트 과정을 통해 다른 개발자들은 최신 버전의 파일을 가져올 수 있다. 
CVS (Concurrent Versions System) , SVN (Subversion) 
두 가지 모두 중앙 집중식 버전 관리 시스템으로 사용되는 도구이다.
그러나 두 도구 사이에는 몇 가지 중요한 차이점이 있다.
1. 파일 단위 vs 디렉토리 단위
- CVS는 주로 파일 단위로 작동한다. 즉, 개별 파일의 변경 내역을 추적하고 버전을 관리한다. 
- SVN은 디렉토리 단위로 작업할 수 있다. 따라서 SVN은 파일 그룹을 한 번에 관리하고 복사, 이동 등의 작업을 보다 쉽게 수행할 수 있다. 
2. 원자성(Atomicity)
- SVN은 변경 내역을 커밋할 때 원자성을 유지한다. 
- CVS는 원자성을 보장하지 않는다. 따라서 CVS에서는 커밋이 실패하면 일부 변경 내역이 적용되기도 한다. 
(원자성 : 데이터 베이스 연산들을 마치 원자와 같이 더 이상 나눌 수도, 줄일 수도 없는 하나의 유닛으로 취급하는 것을 의미한다. 모든 변경 내역을 완전하게 적용하거나 아무것도 적용하지 않음을 보장하는 특성이다 (All or Nothing).)
3. 브랜치 및 병합
- SVN은 브랜치와 병합을 상대적으로 쉽게 수행할 수 있는 기능을 제공한다. 다양한 작업 흐름을 동시에 관리하고 작업을 통합할 수 있다.
- CVS에서는 브랜치 및 병합 작업이 비교적 더 복잡하고 제한적이다.
4. 속도 및 성능
- SVN이 CVS에 비해 높은 성능을 지녔다. SVN은 파일 및 메타데이터의 압축을 지원하고, 변경 내역이 대형 프로젝트에서도 효율적으로 처리될 수 있도록 최적화되었다.

 

3. 분산 버전 관리

분산 버전 관리 (Distributed Version Control)
소스 코드 및 기타 파일의 버전을 관리하는 방법 중 하나. 분산 버전 관리 시스템은 중앙 서버에 의존하지 않고 개발자들 간에 저장소를 공유하여 변경 내역을 추적하고 버전을 관리한다.

주요 특징
1. 분산 저장소
- 분산 버전 관리 시스템은 중앙 서버에만 의존하는 것이 아니라 각 개발자가 로컬 환경에 전체 저장소의 복사본을 가지고 있다. 이로 인해 각 개발자는 로컬에서 독립적으로 작업할 수 있으며, 중앙 서버에 연결되지 않아도 변경 내역을 추적하고 버전을 관리할 수 있다.
2. 커밋(Commit)과 푸쉬(Push)
- 개발자는 로컬 환경에서 파일을 수정한 후 변경 내역을 커밋하여 로컬 저장소에 변경사항을 기록한다. 이후 변경 내역은 중앙 서버로 푸쉬되어 공유 저장소에 반영된다. 이 과정에서 개발자는 다른 개발자들과의 변경 내역 공유 및 협업이 가능하다. 
3. 오프라인 작업
- 분산 버전 관리 시스템은 중앙 서버에 연결되지 않아도 개발자가 로컬에서 작업을 수행할 수 있다. 이는 인터넷 연결이 불안정하거나 오프라인 상태일 때에도 작업할 수 있음을 의미한다. 
Git
분산 버전 관리 시스템 중 하나로, 소스 코드와 파일의 변경 이력을 관리하는 도구이다. 현재 가장 널리 사용되는 버전 관리 시스템 중 하나이다. Git은 유연하고 빠른 속도로 작업을 수행하며, 대규모 프로젝트에서도 효과적으로 사용된다. 또한 많은 개발자들과 커뮤니티에서 활발하게 지원되고 있어 다양한 플러그인과 도구를 활용할 수 있다. 

반응형