서브버전
서브버전(SVN, Subversion)은 자유 소프트웨어 버전 관리 시스템이다. 제한이 있던 CVS를 대체하기 위해 2000년부터 콜랩넷에서 개발되었다. 현재는 아파치 최상위 프로젝트로서 전 세계 개발자 커뮤니티와 함께 개발되고 있다. 명령어 줄 인터페이스에서 사용하는 명령어를 따서 SVN(에스브이엔)이라고 줄여서 부르기도 한다.
개요[편집]
서브버전은 여러 명이 작업하는 프로젝트의 버전 관리나 각자 만든 소스의 통합과 같은 문제를 해결하기 위해 저장소를 만들어 그곳에 소스를 저장해 소스 중복이나 여러 문제를 해결하기 위한 형상 관리/소스 관리 툴이다. 프로젝트 소스는 서브버전 서버의 트렁크라는 곳에 있는데, 자신의 로컬 저장소에 트렁크의 소스를 다운받아 수정 및 추가 후 다시 업로드하는 방식이다. 자신만의 소스를 다른 개발자들과 떨어져서 작업하려면 브랜치를 만들어 작업 후 자기자신만 접근, 개발하여 완성되면 머지 기능을 사용하여 트렁크와 소스를 합치면 된다.[1]
목적[편집]
형상 관리 툴을 사용하게 되면 소스를 버전 별로 관리할 수 있어서 개발할 때 실수로 소스를 삭제하거나, 수정하기 이전으로 돌아가야 하는 경우에 유용하게 사용할 수 있다. 팀 프로젝트에서도 누가, 무엇을, 어떻게 수정했는지도 알 수 있기 때문에 코드를 병합하거나 수정된 소스를 추적하는 데에도 사용된다. 리비전 별로 파일 백업이 가능하다. 파일 복원이 가능해지고, 실수가 발생해도 수정이 빨리 이루어질 수 있다. 개발 버전과 배포 버전을 섞이지 않고 쉽게 관리가 가능하며, 파일 이름 변경, 이동, 디렉터리 버전 관리도 지원이 가능하다. 여러 사용자가 동시에 커밋을 하더라도 충돌이 발생하지 않는다. 한번 커밋이 발생 할 때 마다 리비전이 올라간다. 어느 리비전이 어떤 파일을 커밋 했는지에 대한 확인이 용이하다. 커밋시에 자동 로그 기능이 있어, 작업 이력 관리가 수월하다. 서버와 클라이언트 양방향 데이터 전송으로 네트워크 소통량이 최소화된다. 접근이 가능한 개발자는 누구든 쉽게 수정이 가능하다.[1]
필요성[편집]
서브버전의 필요성은 여러 가지가 있다. 기존의 파일 시스템 공유 등으로 문제 발생 시 복구가 가능하며, 프로젝트 진행 중 과거의 특정 시점으로 돌아가야 하는 경우에 필요하다. 여러 사람이 같은 프로젝트에 참여할 경우에도 필요하다. 각자가 수정한 부분을 팀원 전체가 동기화하는 과정을 자동화할 때, 소스 코드의 변경 사항을 추적할 때, 소스 코드에서 누가 수정했는지 추적할 때 필요하며, 대규모 수정 작업을 더욱 안전하게 진행하거나, 마이너 버전(branch)으로 프로젝트에 영향을 최소화하면서 새로운 부분을 개발하기 위해 필요하다.[2]
특징[편집]
- 장점
원자적 커밋을 지원하므로 다른 사용자의 커밋과 엉키지 않는다. 실패 시 롤백이 가능하며, 직관적이다. 파일과 디렉터리의 삭제, 이동, 이름 변경, 복사를 지원한다. 소스 파일 이외에 이진 파일(텍스트 파일이 아닌, 컴퓨터 파일)도 효율적으로 저장할 수 있으며, 디렉터리도 버전 관리를 할 수 있다. 저장소의 크기에 상관없이 일정한 시간 안에 가지치기나 태그를 할 수 있고, 처리 속도가 상대적으로 빠르다.[2]
- 단점
소스 코드는 병합이 가능하지만 이진 파일은 어느 한쪽을 버릴 수밖에 없다. 개별 개발자만의 개발 이력을 가질 수 없으며, .SVN 디렉터리로 인해 저장소가 다소 지저분한 느낌을 준다. 잦은 커밋으로 인해 리비전 번호가 많이 증가할 수 있고, 충돌이 일어날 확률이 높다.[2]
기능[편집]
자동 쓰기를 지원하므로, 쓰기 도중 중단으로 인한 저장소 내의 불일치나 손상을 피할 수 있다. 이름을 바꾸거나, 복사하거나, 파일을 지워도 계정 기록을 유지한다. 시스템이 등록부, 개명, 파일 메타데이터에 대해서도 판본 호수를 지정 관리한다. 사용자는 디렉터리 전체를 빠르게 옮기거나 복사하면서도 전체의 개정 이력을 보유할 수 있다. 심볼릭 링크도 판본 호수를 지정하고, 이진 파일의 경우 한번 저장한 후 변경될 경우 차이점만 저장하기 때문에 저장소를 효율적으로 사용할 수 있다. 아파치 HTTP 서버를 네트워크 서버로, 웹대브/델타-V를 통신규약으로 사용한다. 서브버전 서버라는 독립된 서버 프로세스도 있어서 TCP/IP를 통해 전용 통신규약을 사용한다. 소스 저장소의 크기에 관계없이 일정한 시간 안에 가지치기(branching)나 태그 넣기(tagging)를 할 수 있다. 태생적으로 클라이언트-서버, 계층 라이브러리 설계를 채택한다. 클라이언트/서버 통신규약이 버전 간 차이를 양방향으로 보냄. 소스 저장소로의 접근이 최적화되어 있음으로, 소스 저장고에서 필요 없는 네트워크 트래픽을 줄일 수 있다.[3]
용어[편집]
용어 설명 체크아웃(CheckOut) 저장소에서 최신 버전의 소스 코드를 최초로 받아오는 것 업데이트(Update) 로컬 저장소에 있는 파일들을 저장소의 최신 버전으로 받아오기 커밋(Commit) 로컬 저장소의 변경된 내용을 서버로 전송 머지(Merge) 내가 작업한 부분과 다른 사람이 작업한 부분을 병합 레포 지토리(Repository) 프로젝트 파일 및 변경 정보가 저장되는 장소 리비전(Revision) 수정 후 커밋(Commit) 하면 숫자가 증가 임폴트(Import ) 빈 레퍼지토리(Repository)에 맨 처음 파일을 채우는 것 익스폴트(Export) 버전 관리 파일들을 뺀 순수 파일만 빼내는 것 리벌트(Revert) 로컬 저장소의 내용을 이전 상태로 돌림 애드(Add ) 버전 관리 대상으로 파일 등록 쉘브(Shelve) 로컬 작업 내용을 잠시 백업 트렁크(Trunk) 개발 소스를 커밋(Commit) 했을 때 개발 소스가 모이는 곳 브랜치(Branch) 트렁크(Trunk)에서 분리/복사한 소스로 버전별 배포판을 만들거나 트렁크(Trunk)와 별도로 운영환경을 위한 안정화된 소스 관리 목적으로 사용 태그(Tag) 버전 별로 소스 코드를 따로 관리하는 공간
각주[편집]
- ↑ 1.0 1.1 gillog, 〈SVN(Subversion) - 개념 및 명령어〉, 《벨로그》, 2020-11-05
- ↑ 2.0 2.1 2.2 나트루, 〈(SVN) SVN이란 ? 장점 , 단점 , 용어 정리〉, 《티스토리》, 2020-09-08
- ↑ 〈서브버전〉, 《위키백과》
참고 자료[편집]
- gillog, 〈SVN(Subversion) - 개념 및 명령어〉, 《벨로그》, 2020-11-05
- 나트루, 〈(SVN) SVN이란 ? 장점 , 단점 , 용어 정리〉, 《티스토리》, 2020-09-08
- 〈서브버전〉, 《위키백과》
같이보기[편집]