DEVELOPER INFO
[형상관리 툴] Git, SVN에 대해서
hanker
2025. 5. 4. 02:15
반응형
우리가 흔히 사용하는 형상관리 툴은 Git과 SVN이 있다.
대부분의 프로젝트에서 메인 개발자들이 잘 사용하는 형상관리 툴을 쓰게 되는데, 이 두 툴의 장단점을 알아보자.
1. Git
Git은 2005년 리누스 토발즈가 리눅스 커널 개발을 위해 만든 분산형 버전 관리 시스템이다.
현재 가장 널리 사용되는 형상관리 도구로, 특히 오픈 소스 프로젝트와 대규모 팀 협업에 인기가 있다.
특징
- 분산형 구조
- 각 개발자는 중앙 서버에 의존하지 않고 저장소 전체(커밋 내역, 브랜치, 태그 등)를 로컬에 복제한다.
- 모든 기록이 로컬에 있기 때문에 중앙 서버 장애 시에도 작업이 가능하다.
- 빠른 브랜치 생성과 병합 가능
- 브랜치를 생성할 때 별도의 복사본을 만들지 않고, 메타데이터 수준에서 즉시 분기한다.
- 브랜치 간 전환(checkout)과 브랜치 병합(merge)이 빠르게 이루어진다.
- 로컬에서 작업 가능 (오프라인 작업)
- 커밋(commit), 커밋 내역 조회(log), 브랜치 생성·전환(branch) 등 대부분의 Git 명령을 네트워크 연결 없이 수행할 수 있다.
- 원격 서버와 동기화(push/pull)는 필요한 시점에만 하면 된다.
- 강력한 병합 및 충돌 해결 기능
- 서로 다른 브랜치에서 변경된 내용을 자동으로 비교·병합하고, 충돌(conflict) 지점을 명확하게 표시해 준다.
- 충돌 발생 시 Git이 제시하는 충돌 표시(markers)를 보고 수동으로 해결하거나, 외부 병합 도구를 연동해 처리할 수 있다.
- GitHub, GitLab, Bitbucket 등의 호스팅 서비스와 연동
- GitHub, GitLab, Bitbucket 같은 원격 호스팅 서비스에 로컬 저장소를 연결하여(push), 협업용 중앙 저장소로 활용할 수 있다.
- 풀 리퀘스트(PR)·머지 리퀘스트(MR)를 통해 코드 검토, 이슈 트래킹, CI/CD 파이프라인 연동 등이 가능하다.
장점 | 단점 |
분산형 구조로 오프라인 작업 가능 | 학습 곡선이 가파름 (명령어와 개념이 복잡) |
빠른 브랜치 생성 및 병합 | 대용량 바이너리 파일 처리에 비효율적 |
로컬에서 대부분의 작업 처리 가능 | 세부적인 접근 권한 관리가 어려움 |
강력한 병합 및 충돌 해결 기능 | 오래된 대규모 저장소의 크기가 비대해질 수 있음 |
GitHub, GitLab 등 다양한 호스팅 서비스 연동 | 복잡한 명령어 체계 |
대규모 프로젝트와 분산 팀 협업에 적합 | Git Flow 등 워크플로우 설계 필요 |
오픈 소스 커뮤니티 지원이 활발함 | 전체 히스토리를 모두 복제하여 저장 공간 차지 |
2. SVN (subversion)
SVN(Subversion)은 2000년에 CVS의 대안으로 개발된 중앙 집중식 버전 관리 시스템이다.
기업 환경에서 많이 채택되었으며, 간단한 워크플로우와 접근 제어 기능이 특징이다.
특징
- 중앙 집중식 구조
- 프로젝트의 모든 버전 이력은 단일 중앙 서버에 저장된다.
- 개발자는 중앙 서버에서 최신 변경분을 내려받아 작업하고, 완료된 변경사항만 서버에 반영(commit)한다.
- 파일 단위의 버전 관리
- 각 파일마다 별도의 리비전 번호(Revision)가 부여되어 관리된다.
- 파일별로 언제 누가 어떤 변경을 했는지 추적할 수 있으며, 특정 파일만 과거 버전으로 되돌릴 수 있다.
- 간단한 명령어 체계
- 주요 명령어가 checkout, update, commit, add, delete 등 몇 가지로 제한되어 있어 학습 곡선이 낮다.
- 복잡한 분기(branch)나 병합(merge) 개념 없이 주로 동일한 중앙 저장소에서 작업하는 워크플로우에 최적화되어 있다.
- 폴더 단위 접근 권한 설정
- 중앙 저장소 내 특정 디렉터리(폴더)별로 읽기·쓰기 권한을 세분화할 수 있다.
- 예를 들어 trunk/는 전체 팀이 읽기·쓰기가 가능하지만, release/는 릴리스 담당자만 접근하도록 설정할 수 있다.
- 전체 프로젝트의 일부만 체크아웃 가능
- 저장소 전체가 아니라 필요한 디렉터리나 파일 경로만 선택해서 내려받을 수 있다.
- 대규모 프로젝트에서 특정 모듈만 작업하거나, 네트워크 부하를 줄이고자 할 때 유용하다.
장점 | 단점 |
직관적이고 단순한 개념으로 학습이 쉬움 | 네트워크 의존성 (대부분 작업에 서버 연결 필요) |
디렉토리/파일별 세밀한 접근 권한 설정 가능 | 느리고 무거운 브랜치 생성 및 병합 |
대용량 바이너리 파일 관리에 효율적 | 브랜치 간 병합 시 충돌 해결이 복잡함 |
저장소의 특정 부분만 체크아웃 가능 | 중앙 서버 장애 시 전체 작업 중단 위험 |
중앙 집중식 관리로 통제가 용이함 | 분산 협업 및 오프라인 작업이 제한적 |
단순한 워크플로우 (commit/update) | 복잡한 브랜치 전략 적용이 어려움 |
리비전 번호가 전역적이고 연속적 | 대규모 프로젝트에서 성능 저하 가능성 |
정리
특성 | Git | SVN |
아키텍처 | 분산형 | 중앙 집중식 |
네트워크 의존성 | 낮음 (오프라인 작업 가능) | 높음 (서버 연결 필요) |
브랜칭 모델 | 가볍고 빠른 브랜치 | 디렉토리 복사 방식 |
저장 방식 | 파일 스냅샷 저장 | 파일 차이점(델타) 저장 |
히스토리 관리 | 로컬 저장 (조작 가능) | 중앙 서버 저장 (변경 불가) |
학습 난이도 | 상대적으로 어려움 | 상대적으로 쉬움 |
적합한 프로젝트 | 대규모, 분산 협업 | 중소규모, 중앙 관리 |
반응형