SVN

2024. 3. 7. 21:15

이 포스트는 형상관리에 대한 포스트입니다.
추후에 형상관리 및 Git 추가 될 예정입니다. 

 

 


SVN (Subversion)

Subversion은 버전 관리 시스템(VCS) 중 하나이다.

 

1. SVN은 중앙 집중식 버전 관리 시스템(CVCS)의 한 예이다.

 

2. 모든 파일과 변경 이력을 서버에 저장하며 사용자는 이 중앙 저장소에서 파일을 체크아웃하여 작업한 후
    변경 사항을 다시 서버에 Commit한다.

 

3. 이 과정을 통해 파일의 버전 관리가 이루어지며, 언제든지 이전 버전으로 Rollback할 수 있는 장점이 있다.

 

 

SVM의 주요 특징


1. 버전 관리


SVN은 파일 및 디렉토리의 버전을 관리하며, 각 커밋은 고유한 버전 번호를 가진다.
이를 통해 개발자는 특정 시점의 프로젝트 상태를 복원하거나 변경 사항을 추적할 수 있다.

2. 병렬 개발 지원

여러 개발자가 동시에 같은 프로젝트에 작업할 수 있으며, SVN은 이러한 병렬 개발을 지원합니다. 충돌 발생 시, SVN은 사용자가 수동으로 충돌을 해결할 수 있도록 도와줍니다.

3. 브랜치와 태그

SVN은 브랜치와 태그를 사용하여 개발의 다양한 라인을 관리합니다.

브랜치를 통해 기능 개발이나 버그 수정 작업을 별도로 진행할 수 있으며, 태그를 사용하여 특정 버전을 마킹할 수 있습니다.

4. 보안

권한 기반의 액세스 제어를 제공하여, 특정 사용자 또는 그룹만이 프로젝트의 특정 부분에 대한 액세스 권한을 갖도록 할 수 있습니다.

5. 네트워크 효율성

SVN은 변경된 부분만을 전송하는 델타 압축을 사용하여 네트워크 효율성을 높입니다.

6. 이력 및 메타데이터 관리

파일의 변경 이력뿐만 아니라 사용자가 정의한 메타데이터도 함께 관리할 수 있습니다.


💡 Git과 같은 분산 버전 관리 시스템(DVCS)이 널리 사용되기 시작하면서 SVN의 인기는 다소 감소했지만, 여전히 많은 기업과 프로젝트에서는 그 안정성과 중앙 집중식 관리 방식 때문에 SVN을 선호한다.

 

 


그럼 Git이랑은 뭐가 다른데?

1. 아키텍처 : 중앙 집중식 vs 분산


[SVN]

 

1. 중앙 집중식 버전 관리 시스템이다.

2. 모든 파일과 변경 이력이 하나의 중앙 저장소에 저장된다.

3. 개발자는 이 저장소로부터 최신 버전을 '체크아웃'하여 작업하고, 변경 사항을 중앙 저장소에 '커밋'한다.

 

[Git]

 

1. 분산 버전 관리 시스템이다.

2. 각 개발자는 전체 저장소의 복제본(모든 파일과 변경 이력 포함)을 로컬에 가지고 있어, 오프라인 상태에서도 작업을 할 수 있다.

3. 변경 사항을 로컬 저장소에 커밋한 후 다른 저장소와 동기화할 수 있다.

 

2. 데이터 처리

 

[SVN]

 

1. 파일 기반의 변경 사항을 추적합니다.

2. 각 파일의 수정 사항을 버전으로 관리하며, 특정 시점에서의 파일 상태를 기반으로 합니다.

 

[Git]

 

1. 프로젝트의 상태를 스냅샷으로 관리합니다.

2. 각 커밋은 해당 시점에서 프로젝트의 스냅샷을 나타낸다.

3. 만약 파일이 변경되지 않으면 Git은 새로운 스냅샷을 만들지 않고 이전 스냅샷을 참조한다.

 

3. 네트워크 효율성 및 속도

 

[SVN]

 

1. 변경 사항을 적용하거나 최신 버전을 받기 위해 중앙 저장소와의 통신이 필요하다.

2. 따라서 네트워크 지연이 작업 속도에 영향을 줄 수 있습니다.

 

[Git]

 

1.  대부분의 작업을 로컬에서 수행하므로, 네트워크에 대한 의존도가 낮고 작업 속도가 빠르다.

2. 변경 사항을 로컬 저장소에 커밋하고, 필요할 때만 중앙 저장소(또는 다른 개발자의 저장소)와 동기화한다.

 

 4. 사용 용이성과 관리


[SVN]

 

1. 직관적인 디렉토리 구조와 명령어로 인해 초보자가 배우기 쉽다.

2. 중앙 집중식 모델은 관리자가 권한 관리와 프로젝트의 이력을 더 쉽게 추적할 수 있게 합니다.

 


[Git]

 

1.  더 복잡한 개념(브랜치, 머지, 리베이스 등)을 가지고 있어 학습 곡선이 더 가파르다.

2. 이는 더 유연한 개발 프로세스와 강력한 분산 작업 능력을 가능하게 한다.

 

선택 기준


1) 프로젝트의 규모와 복잡성

 

1. 대규모 프로젝트나 분산된 팀이 작업하는 경우, Git의 분산 특성이 유리할 수 있다.

2. SVN은 중소 규모의 프로젝트나 중앙 집중식 관리가 필요한 중앙 집중식 관리가 필요한 경우 적합할 수 있습니다

 

2) 작업 환경

 

1. 오프라인에서도 자주 작업해야 하는 경우 Git이 더 적합할 수 있습니다.

 

3) 기존 시스템과의 호환성

 

1. 기존 인프라가 SVN에 최적화되어 있거나 팀이 SVN에 더 익숙한 경우, SVN을 계속 사용하는 것이 더 나을 수 있습니다.