공부해보잠
소프트웨어 버전 관리 도구 본문
공유 폴더 방식(Shared Folder System)
공유 폴더 방식은 버전 관리 자료를 로컬 컴퓨터의 공유 폴더에 저장하여 관리하는 방식으로, 팀 내에서 간단한 파일 버전 관리가 필요할 때 사용된다.
특징
- 개발자들은 개발이 완료된 파일을 약속된 공유 폴더에 매일 복사한다.
- 담당자는 공유 폴더에서 파일을 자신의 PC로 복사한 후 컴파일하여 이상 유무를 확인한다.
- 이상 유무 확인 과정에서 파일의 오류가 발견되면, 해당 파일을 등록한 개발자에게 수정을 의뢰한다.
- 파일에 문제가 없다면 다음 날 모든 개발자가 동작 여부를 다시 확인한다.
- 파일을 잘못 복사하거나 다른 위치로 복사하는 실수를 방지하기 위해 데이터베이스에 변경 사항을 기록하여 관리한다.
장점
- 설정이 간단하고 추가적인 서버 구축 없이 운영 가능.
- 작은 규모의 프로젝트에서 빠르게 파일 공유 및 협업 가능.
단점
- 파일 변경 및 버전 관리를 수동으로 진행해야 하므로 오류 발생 가능성이 높음.
- 동시에 여러 사람이 같은 파일을 수정하면 충돌 문제 발생 가능.
- 변경 사항을 추적하기 어렵고, 백업 및 롤백 기능이 제한적.
대표적인 공유 폴더 방식의 버전 관리 도구
SCCS (Source Code Control System)
- 초기 UNIX 환경에서 사용된 가장 오래된 버전 관리 시스템 중 하나.
RCS (Revision Control System)
- 각 파일의 변경 이력을 관리하는 방식으로, CVS의 기반이 된 시스템.
PVCS (Polytron Version Control System)
- 기업에서 많이 사용되던 상용 버전 관리 시스템.
QVCS (Quma Version Control System)
- 간단한 UI 기반으로 제공되는 버전 관리 도구.
공유 폴더 방식은 소규모 프로젝트에서는 유용할 수 있지만, 버전 관리의 체계성과 충돌 해결을 고려하면 Git, SVN 같은 중앙 집중식 또는 분산형 버전 관리 시스템(VCS)을 사용하는 것이 더 적합하다.
클라이언트/서버 방식(Client/Server System)
클라이언트/서버 방식은 버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리되는 방식으로, 여러 개발자가 같은 프로젝트를 협업할 때 사용된다.
특징
- 서버의 자료를 각 개발자가 자신의 PC(클라이언트)로 복사하여 작업한 후, 변경된 내용을 서버에 반영한다.
- 모든 버전 관리는 중앙 서버에서 수행되며, 클라이언트는 서버의 데이터를 동기화하여 사용한다.
- 하나의 파일을 서로 다른 개발자가 수정할 경우 경고 메시지를 출력하여 충돌을 방지한다.
- 서버에 장애가 발생하면, 복구되기 전까지 협업 및 버전 관리 작업이 중단된다.
- 데이터의 중앙 집중 관리로 인해 프로젝트의 일관성을 유지할 수 있다.
장점
- 버전 이력이 중앙에서 관리되므로 데이터 유실 위험이 적음.
- 다수의 개발자가 동시에 협업 가능하며, 충돌 방지 기능 제공.
- 권한 설정을 통해 특정 사용자만 수정 가능하도록 제어 가능.
단점
- 서버가 다운되면 개발자 간 협업이 불가능.
- 네트워크가 필요하며, 작업 시 서버와의 동기화가 필수적.
- 대규모 프로젝트에서는 속도가 느려질 수 있음.
대표적인 클라이언트/서버 방식의 버전 관리 도구
CVS (Concurrent Versions System)
- 초기 버전 관리 시스템 중 하나로, 다수의 개발자가 동시에 작업 가능하도록 지원.
SVN (Subversion)
- CVS의 개선 버전으로, 중앙 서버에서 버전 이력을 체계적으로 관리.
CVSNT
- CVS를 기반으로 한 Windows 지원 버전.
Clear Case
- IBM에서 제공하는 상용 버전 관리 시스템으로, 대규모 프로젝트에 적합.
CMVC (Configuration Management Version Control)
- IBM에서 개발한 형상 및 버전 관리 시스템.
Perforce
- 빠른 속도와 강력한 기능을 제공하는 기업용 버전 관리 도구.
클라이언트/서버 방식은 버전 관리와 협업에 효과적이지만, 서버 의존성이 크다는 단점이 있어 Git 같은 분산형 버전 관리 시스템(DVCS)으로 대체되는 추세이다.
분산 저장소 방식(Distributed Version Control System, DVCS)
분산 저장소 방식은 버전 관리 자료가 하나의 원격 저장소와 각 개발자의 로컬 저장소에 함께 저장되어 관리되는 방식으로, Git과 같은 최신 버전 관리 시스템이 사용하는 구조이다.
특징
- 개발자는 원격 저장소의 데이터를 자신의 로컬 저장소로 복제하여 작업한다.
- 변경된 내용은 로컬 저장소에서 먼저 반영(버전 관리)한 후, 원격 저장소에 동기화(Push) 한다.
- 로컬 저장소에서 버전 관리가 가능하기 때문에, 원격 저장소에 문제가 발생하더라도 작업이 중단되지 않는다.
- 모든 개발자가 자신만의 완전한 저장소를 소유하며, 협업 시 변경 사항을 공유(Pull & Push)한다.
- 중앙 서버 없이도 독립적으로 개발할 수 있으며, 속도가 빠르고 안정성이 높다.
장점
- 오프라인에서도 버전 관리가 가능하여 인터넷 연결 없이도 작업 가능.
- 서버가 손상되거나 장애가 발생해도 개발자의 로컬 저장소를 이용해 복구 가능.
- 네트워크 속도에 영향을 받지 않고 빠르게 버전 관리를 수행.
- 브랜치(Branch) 기능이 강력하여, 병렬적인 개발 작업이 용이.
- 개발자 간 코드 리뷰 및 협업이 유연하게 이루어짐.
단점
- 초기 설정 및 학습 곡선이 가파름(Git 등 분산 저장소 방식은 처음 사용자가 이해하기 어려울 수 있음).
- 저장소의 크기가 커질 수 있음, 모든 개발자가 전체 저장소를 복제해야 하기 때문.
- 중앙 집중식처럼 강제적인 관리가 어렵고, 사용자의 협업 규칙이 필요.
대표적인 분산 저장소 방식의 버전 관리 도구
Git
- 가장 널리 사용되는 DVCS, 빠르고 강력한 브랜치 기능 제공.
GNU arch
- GNU 프로젝트에서 개발한 버전 관리 시스템.
DCVS (Distributed Concurrent Versions System)
- CVS를 기반으로 한 분산 버전 관리 시스템.
Bazaar
- Canonical에서 개발한 DVCS, Ubuntu 프로젝트에 사용됨.
Mercurial
- 대규모 프로젝트에서도 빠르게 동작하는 DVCS.
TeamWare
- Sun Microsystems에서 개발한 분산 버전 관리 시스템.
BitKeeper
- Linux 커널 개발 초기 버전 관리 시스템으로 사용됨.
Plastic SCM
- GUI 환경을 제공하는 강력한 분산 버전 관리 시스템.
분산 저장소 방식은 서버 의존성이 낮고 협업이 자유로우며, 빠른 버전 관리를 지원하는 것이 장점이다. Git이 가장 대표적인 도구로, 오픈소스 프로젝트 및 기업 환경에서도 널리 활용되고 있다.
Subversion(서브버전,SVN)
- 발표 및 개발: 2000년 아파치 소프트웨어 재단에서 발표, CVS 개선판
- 구조: 클라이언트/서버 구조
- 서버(저장소, Repository): 최신 버전의 파일과 변경 내역을 관리
- 클라이언트: 서버에서 파일을 복사하여 작업 후 변경 내용을 서버에 반영(Commit)
- 작업 방식:
- 모든 개발 작업은 trunk 디렉터리에서 수행
- 추가 작업은 branches 디렉터리에 별도 생성 후 완료 후 trunk와 병합(merge)
- 커밋(Commit) 시 리비전(Revision)이 1씩 증가
- 운영체제 지원: 클라이언트는 대부분의 OS에서 사용 가능하지만, 서버는 주로 유닉스 기반
장점:
- 소스가 오픈되어 있어 무료 사용 가능
- CVS의 단점이었던 파일/디렉터리의 이름 변경, 이동 등이 가능
Subversion(SVN) 주요 명령어
명령어 | 의미 |
add | 새로운 파일이나 디렉터리를 버전 관리 대상으로 등록 |
commit | 버전 관리 대상으로 등록된 클라이언트의 소스 파일을 서버에 반영 |
update | 서버의 최신 commit 이력을 클라이언트에 적용 |
checkout | 버전 관리 정보와 소스 파일을 서버에서 클라이언트로 받음 |
lock/unlock | 서버의 소스 파일이나 디렉터리를 잠그거나 해제 |
import | 서버 저장소에 처음 소스 파일을 저장(한 번 사용 후 다시 사용 불가) |
export | 버전 관리 정보를 제외한 소스 파일만 서버에서 가져옴 |
info | 특정 파일의 위치, 마지막 수정 일자 등 정보 표시 |
diff | 지정된 파일이나 경로에 대한 이전 리비전과의 차이 표시 |
merge | 다른 디렉터리에서 작업한 버전 관리 내역을 기본 개발 작업과 병합 |
Subversion(SVN)은 파일과 변경 내역을 체계적으로 관리하며, 협업과 버전 관리를 효과적으로 수행할 수 있도록 지원하는 도구이다.
Git(깃)
Git은 분산 버전 관리 시스템(DVCS)으로, 각 개발자의 로컬 저장소에서 버전 관리가 이루어지며, 필요할 때 원격 저장소로 변경 사항을 반영하는 방식입니다.
Git의 주요 특징
- 분산 저장소: 지역 저장소(Local Repository)와 원격 저장소(Remote Repository)가 존재.
- 브랜치를 이용한 독립적 개발: 기본 버전에 영향을 주지 않고 기능 개발이 가능.
- 빠른 버전 관리: 로컬에서 대부분의 작업이 이루어지므로 속도가 빠름.
- 네트워크 장애에도 작업 가능: 로컬에서 버전 관리가 가능하므로 원격 저장소 문제 발생 시에도 작업을 진행할 수 있음.
Git 주요 명령어
명령어설명
명령어 | 설명 |
init | 새로운 Git 저장소를 생성 |
clone | 원격 저장소의 내용을 로컬 저장소로 복사 |
add | 스테이징 영역(Staging Area)에 변경 사항 추가 |
commit | 변경 사항을 로컬 저장소에 저장 |
branch | 새로운 브랜치를 생성 |
checkout | 특정 브랜치로 이동 |
merge | 두 개의 브랜치를 병합 |
push | 로컬 저장소의 변경 사항을 원격 저장소에 반영 |
pull | 원격 저장소의 변경 사항을 로컬 저장소에 반영 |
fetch | 원격 저장소의 변경 이력을 가져오지만 자동 병합하지 않음 |
diff | 파일 변경 사항 비교 |
버전 관리 프로세스
소프트웨어 개발 과정에서 버전 관리는 일정한 절차를 따릅니다.
소프트웨어 버전 등록 과정
- 가져오기(Import): 버전 관리가 되지 않은 프로젝트를 저장소에 최초로 등록.
- 인출(Check-Out): 개발자는 서버 저장소에서 최신 버전의 파일을 받아서 로컬에서 작업.
- 예치(Commit): 로컬에서 작업한 변경 사항을 저장소에 반영.
- 동기화(Update): 저장소에서 최신 변경 사항을 가져와 로컬과 동기화.
- 차이(Diff): 파일 변경 내용을 비교하여 어떤 차이가 있는지 확인.
형상 관리(Configuration Management)
형상 관리(SCM, Software Configuration Management)는 소프트웨어 개발 과정에서 변경 사항을 체계적으로 관리하는 활동을 의미합니다.
형상 관리의 주요 기능
기능 | 설명 |
형상 식별 | 형상 관리 대상에 이름과 관리 번호를 부여하여 관리 |
버전 제어 | 업그레이드 및 유지보수 과정에서 생성된 여러 버전을 관리 |
형상 통제(변경 관리) | 변경 요청을 검토하여 기준선(Base Line)에 반영 |
형상 감사 | 기준선의 무결성을 평가하여 승인 |
형상 기록(상태 보고) | 변경 이력과 작업 내역을 기록 및 보고 |
버전 관리 방식 비교
구분공유 폴더 방식클라이언트/서버 방식분산 저장소 방식
구분 | 공유 폴더 | 방식 | 클라이언트방식/ 분산 저장소 방식 |
저장소 위치 | 공유 폴더 | 중앙 서버 | 로컬 + 원격 저장소 |
네트워크 필요 여부 | 항상 필요 | 항상 필요 | 필요하지 않음 (로컬에서 가능) |
속도 | 느림 | 보통 | 빠름 |
대표 도구 | SCCS, RCS | CVS, SVN | Git, Mercurial |
- SVN과 같은 중앙 집중식 버전 관리 시스템(CVCS)은 중앙 저장소를 기반으로 협업이 이루어지며, 데이터의 일관성을 유지하기 좋음.
- Git과 같은 분산 버전 관리 시스템(DVCS)은 각 개발자의 로컬 저장소에서 버전 관리가 가능하며, 네트워크 문제에도 독립적으로 작업 가능.
- 각 방식의 장단점을 고려하여 프로젝트의 규모와 협업 방식에 맞는 버전 관리 도구를 선택하는 것이 중요.
출저 및 참고
정보처리 산업기사 기본서(시나공)
'자격증 > 정보처리' 카테고리의 다른 글
SW / 보안 관련 신기술 (0) | 2025.02.08 |
---|---|
빌드 자동화 도구 (0) | 2025.02.08 |
소프트웨어 버전 등록 (0) | 2025.02.05 |
UI테스트 기법의 종류 (0) | 2025.02.05 |
UI설계 도구 (0) | 2025.02.05 |