SVN(Subversion)은 중앙 집중식 버전 관리 시스템(CVCS, Centralized Version Control System) 중 하나로 코드 변경 사항을 추적하고 여러 개발자가 협업할 수 있도록 돕는 도구입니다.
Git과 같은 분산 버전 관리 시스템(DVCS)과 달리 중앙 저장소(Repository)를 사용하여 버전을 관리합니다.
SVN은 "CVCS" 방식으로 중앙 서버가 모든 버전을 관리하며 개발자들은 중앙 저장소에서 코드를 가져와 수정 후 다시 업로드합니다.
| 개념 | 설명 |
|---|---|
| Repository (저장소) | 코드 및 변경 이력을 저장하는 중앙 서버 |
| Working Copy (작업 복사본) | 개발자가 로컬에서 작업하는 코드 |
| Commit | 로컬 변경 사항을 저장소에 반영 |
| Update | 저장소에서 최신 변경 사항을 가져오기 |
| Revert | 변경 사항을 이전 상태로 되돌리기 |
| Branch | 기존 코드에서 분리하여 새로운 기능을 개발하는 공간 |
| Merge | 분리된 브랜치의 변경 사항을 다시 통합 |
| Conflict | 여러 개발자가 같은 파일을 수정할 때 발생하는 충돌 |
| 명령어 | 설명 |
|---|---|
svn checkout <URL> | 저장소에서 로컬로 프로젝트 다운로드 |
svn update | 저장소에서 최신 변경 사항 가져오기 |
svn add <파일> | 새 파일을 저장소에 추가 (Commit 필요) |
svn commit -m "설명" | 변경 사항을 저장소에 반영 |
svn status | 변경된 파일 목록 확인 |
svn log | 변경 이력 조회 |
svn revert <파일> | 변경 사항을 취소하고 이전 상태로 되돌리기 |
svn merge <브랜치> | 특정 브랜치의 변경 사항을 현재 브랜치에 병합 |
| 비교 항목 | SVN (Subversion) | Git |
|---|---|---|
| 구조 | 중앙 집중식 (CVCS) | 분산형 (DVCS) |
| 저장소 | 서버에서 모든 변경 관리 | 로컬에도 전체 이력 저장 |
| 속도 | 네트워크 의존적 | 로컬에서 빠르게 수행 가능 |
| 브랜치 관리 | 무겁고 느림 | 가볍고 빠름 |
| 충돌 해결 | 서버 기반 충돌 해결 | 로컬에서 병합 후 Push |
| 네트워크 필요 여부 | 항상 필요 | 로컬에서도 작업 가능 |
svn copy http://svn.example.com/repos/project/trunk \
http://svn.example.com/repos/project/branches/new-feature \
-m "새 브랜치 생성"
svn merge http://svn.example.com/repos/project/branches/new-feature
svn copy http://svn.example.com/repos/project/trunk \
http://svn.example.com/repos/project/tags/v1.0 \
-m "버전 1.0 태그 생성"
svn checkout http://svn.example.com/repos/myproject
cd myproject
echo "새 기능 추가" >> feature.txt
svn add feature.txt
svn commit -m "새 기능 추가"
svn update
svn log
SVN은 한때 버전 관리 시스템의 표준이었지만 Git이 등장하면서 사용이 줄어들고 있습니다.
하지만 대규모 기업 환경에서는 여전히 SVN을 사용하는 곳도 많으며 바이너리 파일 관리에 강점이 있습니다.
SVN을 사용하면서 중앙 집중식 시스템의 장점과 단점을 모두 경험할 수 있었고 Git과 비교하며 버전 관리 시스템의 발전을 체감할 수 있었습니다.