본문 바로가기
프로그램/Server

SVN란?

by 게맛쌀 2021. 6. 28.
728x90
반응형

SVN (Subversion)

서브버전(Subversion)의 줄임말로 형상관리/소스 관리 툴이다. 명령 줄 인터페이스에서 사용하는 명령어를 따서 SVN이라고 줄여서 부르기도 한다. 제한이 있던 CVS를 대체하기 위해 2000년부터 콜랩넷에서 개발되었다. 현재는 아파치 최상위 프로젝트로서 전 세계 개발자 커뮤니티와 함께 개발되고 있다. 서브버전은 클라이언트서버모델을 따른다. 서버는 작업하는 컴퓨터 내에 둘 수도 있고, 전산망에 연결된 별도의 컴퓨터에 두고 사용할 수 있다. 서브버전 서버와 클라이언트는 http, https, svn, svn+ssh의 규약으로 통신한다.

 

 

형상관리(Software Configuration Management)란?

개발 및 유지보수 과정에서 발생하는 소스코드, 문서, 인터페이스 등 각종 결과물에 대해 형상을 만들고, 이들 형상에 대한 변경을 체계적으로 관리, 제어하기 위한 활동

 

사용목적

1. 항상 배포 가능한 제품 소스를 유지

2. 작업내용과 변경된 소스의 연관성 유지

3. 다수의 개발자가 각자 작업한 내용을 통합하여 최신 형상을 유지 관리

4. 공통된 소스를 공유함으로써 중복개발 문제하고, 최신 형상의 모호성을 해결

5. 에전 버전의 파일 복원

6. 수정한 부분의 검증 (코드리뷰기능)

 

 

SVNGIT의 차이점

SVN 중앙 집중식 버전 관리 시스템 (Centeralized Version Control System : CVCS)

CVCS에서는 버전 관리되는 모든 파일을 저장하는 하나의 서버와, 이 중앙 서버에서 파일들을 가져오는(checkout) 다수의 클라이언트가 존재한다. SVN에서는 프로젝트를 Checkout받아 프로젝트를 로컬에 가져오고, 이를 수정하고 커밋하면 다시 서버에 저장되는 구조이다.

이러한 CVCS는 단점이 하나 있는데 중앙 서버가 잘못되면 모든 것이 잘못된다는 점. 만약에 서버가 다운될 경우, 서버가 다시 복구 될 때까지 다른사람과의 협업이나, 진행 중이던 버전관리도 어려워지게 된다.

 

GIT 분산 버전 관리 시스템 ( Distributed Version Control System : DVSC)

DVSC에서는 클라이언트가 파일들의 마지막 스냅샷을 가져오는 대신 저장소를 통째로 복제한다. 이는 서버에 문제가 생기면 모든 버전고나리 작업이 ALL STOP되는 CVCS와 달리, 클라이언트의 내용을 서버에 복사하면 서버를 복구 할 수 있다. 체크아웃 할 때마다 전체 백업한다.

게다가 대부분의 DVCS에서는 다수의 원격저장소를 갖는 것이 가능하기 때문에 동시에 여러 그룹과 여러 방법으로 함께 작업할 수 있다. 이로 인해 CVCS에서는 할 수 없는 다양한 작업 방식 들을 사용해 볼 수 있다.

 

•  automatical writing 을 지원하므로, 쓰기 도중 중단으로 인한 저장소 내의 불일치나 손상을 피할 수 있다.

•  이름을 바꾸거나, 복사하거나, 파일을 지워도 계정 기록을 유지한다.

•  시스템이 등록부, 개명, 파일 메타데이터에 대해서도 판본 호수를 지정 관리한다. 사용자는 디렉터리 전체를 빠르게 옮기거나 복사하면서도 전체의 개정 이력을 보유할 수 있다.

•  심볼릭 링크도 판본 호수를 지정.

•  이진 파일의 경우 한번 저장한 후 변경될 경우 차이점만 저장하기 때문에 저장소를 효율적으로 사용할 수 있다.

•  아파치 HTTP 서버를 네트워크 서버로, 웹대브/델타-V를 통신규약으로 사용한다. svnserve라는 독립된 서버 프로세스도 있어서 TCP/IP를 통해 전용 통신규약을 사용한다.

•  소스 저장소의 크기에 관계 없이 일정한 시간 안에 가지 치기(branching)나 태그 넣기(tagging)를 할 수 있다.

•  태생적으로 클라이언트-서버, 계층 라이브러리 설계를 채택.

•  클라이언트/서버 통신규약이 버전간 차이를 양뱡향으로 보냄.

•  소스 저장소로의 접근이 최적화되어 있으므로, 소스 저장고에서 필요 없는 네트워크 트래픽을 줄일 수 있다.

 

장점

•  원자적 커밋을 지원하므로 다른 사용자의 커밋과 엉키지 않음. 실패 시 롤백 가능

•  직관적이다.

•  파일과 디렉토리의 삭제, 이동, 이름 변경, 복사 지원

•  소스파일 이외에 이전 파일(텍스트파일이 아닌, 컴퓨터 파일)도 효율적으로 저장 가능

•  디렉터리도 버전 관리를 할 수 있다.

•  저장소의 크기에 상관없이 일정한 시간 안에 가지치기나 태그를 할 수 있다.

•  처리 속도가 상대적으로 빠르다.

 

단점 

•  소스코드는 merge(병합)이 가능하지만 이진파일은 어느 한쪽을 버릴 수밖에 없다.

•  개별 개발자만의 개발 이력을 가질 수 없다.

•  .svn 디렉터리로 인해 저장소가 다소 지저분한 느낌을 준다.

•  잦은 커밋으로 인해 리비전 번호가 크게 증가할 수 있다.

•  충돌이 일어날 확률이 높다.

 

 

SVN의 용어 정리

•  Revision: 수정 후 Commit을 하면 숫자가 증가 / 저장소에 저장된 파일 버전을 의미

•  Respositiory : 프로적트 파일 및 변경 정보가 저장되는 장소

•  Import : respository에 맨 처음 파일들을 채우는 것

•  Export : 버전 관리 파일들을 뺀 순수 파일만 빼내는 것

 Checkout : 저장소에서 최신 버전의 소스코드를 최초로 받아오는 것 / Respository에서 프로젝트 관련 파일들을 받아온다

•  Update : 로컬 저장소에 잇는 파일들을 저장소의 최신 버전으로 받아오기

•  Commit : 로컬 저장소의 변경된 내용을 서버로 전송 / Checkout한 파일의 수정사항을 갱신

•  Revert : 로컬 저장소의 내용을 이전 상태로 돌림

 Add : 버전관리 대상을 파일 등록

 Shelve : 로컬 작업 내용을 잠시 백업하는 것

 Trunk : 개발 소스를 commit 했을 때 개발 소스가 모이는 곳 / 프로젝트에서 가장 중심이 되는 디렉토리, 소스와 파일 포함

•  Branch : trunk에서 분리/복사한 소스로 버전별 배포판을 만들거나 trunk와 별도로 운영환경을 위한 안정화된 소스 관리 목적으로 사용

•  Tag : 특정 시점의 상태 보존 목적으로 사용 장기적으로 1.0, 1.1 등 버전 별로 소스 코드를 따로 저장 특정 시점에서 프로젝트의 스냅샷을 찍어두는 것

•  Merge : 내가 작업한 부분과 다른 사람이 작업한 부분을 병합

 

반응형

'프로그램 > Server' 카테고리의 다른 글

서버의 종류  (0) 2021.07.30
HeidiSQL란?  (0) 2021.07.06
Oracle SQL Developer  (0) 2021.07.05

댓글