그래서 전체적인 문서작업과, 그래픽, 웹프로그램들의 소스를 쉽게 컨트롤하게 하기 위해 Subversion 의 설치를 위해 총 6시간이란 막대한 시간을 투자하였다.
SCM에는 CVS와 SVN으로 크게 나뉘고 있다. CVS는 느리지만 오랜기간 안정화가되어 이곳저곳에 많이 쓰인다.
그다음으로 최근에 들어 많이 사용하는것이 이 SVN이다. 여러 익스텐션거 인터그레이션을 통해 바이너리 비교등의 높은 호환성을 보여준다.
간단하게 서론부터 말하면. 매우 피곤해진다. 아직 SVN (Subverion) 은 더 많은 개선이 필요하지만, 개선의 여지는 없어보인다.
일단 내가 필요로 하는 환경을 충족시켜주는지에 대해 검사를 했다.
몇가지 큰 이슈만을 집중적으로 검토하려고 한다.
프로젝트의 참여자 액세스컨트롤을 웹인터페이스등을 통해서도 지원안해
현버전은 프로젝트의 참여자 액세스 컨트롤등을 웹인터페이스에서 추가/삭제가 되지 않는다.
그렇다고 패스워드 연동이 되는가? 애석하게도 아직은 답이 없다.
기본상태의 솔루션을 사용할 경우 ldap 연동조차 지원하지 않는다. (별도의 플러그인이 있는지는 모르겠다)
본개발사인 collabnet 의 엔터프라이즈 에디션을 설치해보려 했다. (웹인터페이스로 프로젝트 acl등의 다양한 기능을 제공한다) 하지만 64비트 시스템에서는 사용할수가 없다고 나왔다.
또한 이는 open subversion 이 아닌 starsource 등의 별도의 프로그램을 설치하는것으로 나타났다.
따라 동떨어진 이야기다. 다운로드 받는데에만 약 40분의 시간이 소요되었고 용량은 350메가정도였다.
대량의 고용량 (5MB이상)급 이미지의 업로드 속도는 최악!
SVN은 CVS보다 빠르다. 조금더 편리하다. 그러나 이미지 처리는 개판이었다!
어도비사의 Version CUE 버전큐를 일반적 업무환경에서는 추천한다.
SVN 보다 이미지처리기준 약 150배가량 처리속도가 뛰어나며, 그래피컬하며 초보자도 매우 간단하게 쓸수 있는 인터페이스를 제공하고 있다. 심플한 Version Control 기능으로 SVN과 유사하게 사용할 수 있다. 모든 파일확장자를 지원하며 (어도비 브릿지상에서), PSD등의 파일은 섬네일까지 보인다. 물론 svn 브라우저들도 보이지만.. 윈도우용을 기준으로 보면 UI가 훨씬 불편하다.
또한 먹통되는 현상이 없으며 웹상에서 사용자를 쉽게 추가/삭제가 가능하며
프로젝트(폴더) 베이스로 권한을 체계적으로 관리할 수 있다.
본래 파일의 소유자,소유그룹,퍼미션이 보존되지 않아...
보통의 개발환경을 벗어나 웹사이트가 어느정도 상당한 기능제작이 이루어진 단계에서는 많은 CGI가 연동되기 마련이다.
작게는 Paygate의 결제솔루션, 특정 사이트의 인증을 위한 SSL 레이어 통신프로그램등이 있으며, 여기에 동작하는 키파일 등은 일단 소유자와 퍼미션 설정에 상당히 주의를 하여야 한다.
실제로 현재 내가 필요로 하는 다양한 환경들을 보존하기 위해서는 소유자,그룹, 퍼미션이 현행 그대로 저장되어야 한다. 예를들어보자
중계중인 pg 시스템의 솔루션은 cgi이므로 실행권한 을 필요로 한다. 그러나 svn 을 통해 checkout 하면 644 (rw-r-r-) 상태로 변경된다. 따라서 퍼미션이 꼬여 서비스가 중단되는등의 문제가 생긴다.
자체적으로 개발한 암호화 소프트웨어는 매우 민감한 컨트롤을 받고있는 소프트웨어다.
pg솔루션도 마찬가지지만, 이 파일은 웹서버가 읽기, 쓰기를 해서는 안되며 오직 실행권한만을 획득하여야 한다.
따라서 소유자는 루트, 아파치그룹 이고 퍼미션은 710 으로 설정하여야 한다.
여기에 연결된 계층파이프 프로그램 (권한과 서버의 CPU값, 고유 인식자를 확인하는 소프트웨어) 가 연동되므로 suid 퍼미션을 받아올 수 있어야 한다.
이런 관련파일들이 셀수없이 튀어나오는 상황에서 SVN을 사용할수는 없다.
SVN이 유행처럼 퍼지고 있는 시점에서 버전 컨트롤이라는 목적에서는 극단적으로 적은 호환성밖에 제공하고 있지 않다.
그렇다면 사용할 수 있는 방법이 있는가? postroll 스크립트 (수동으로 구동하여야함) 를 실행하여야 하나 이또한 전체적인 퍼미션을 정상적으로 인식하지 못한다. 일부 블락디바이스로 설정된 디바이스맵등은 무시하는 경향이 있으며 setuid 쪽에 문제가 있다는것.
관련 스크립트는 ASVN 과 SSVN 이 있으며, 테스트결과 SSVN이 개중 좋은 호환성을 보여주었다.
meta-data-versioning 이라는 희안한 패치가 있긴하지만, 이것은 패치형식이 아닌 완성된 소스를 컴파일하는식으로 사용하여야 한다. 그러나 몇가지 언급된 버그들과 개발사이트의 svn관리허술로 1.43 버전으로 업포스팅하는 과정에서 바뀐버전을 찾을수 없는 (아마도 개발자가 귀찮아서 전체커밋을 한게 아닌가싶다) 문제로 모듈하나를 끝마치고 중단을 하게되었다. (한도끝도없어보인다)
그렇다고 현재 개발해서 사용하고 있는 암호화 소프트웨어의 경우 SVN으로 버전관리가 될까?
내가 사용하는 C소스의 경우를 예로 들어보았다.
컴파일후엔 suid 를 필요로하는 바이너리와 일반 바이너리 (보안설정필요)등 바이너리 4개가 생성되며 이러한 바이너리 역시 버전컨트롤로 관리되어 쉽게 롤백시킬수 있는 이점이 있어야한다.
또한 적재되는 모듈들 또안 주 프로그램에서 퍼미션을 확인하게 한다. (해킹당했을 경우에도 root소유권으로 설정되어 내용을 읽거나 가져갈수 없어야한다)
하지만 SVN으로는 이 소스의 형상관리만 가능할 뿐 바이너리는 관리가 되지 않는다. 매번 체크아웃 할때마다 퍼미션 바까줘야하는 중노가다를 하게만들거나, 거기에 따른 스크립트를 붙이게 만든다.
총평
Subversion 은 단순한 프로그램들의 버전컨트롤로써는 쓰기에 충분하다. 그러나 복잡한 웹개발환경에서는 무용지물이라는 사실과, 개발사는 meta-data-versioning 등의 브랜치가 충분히 있으며, 언젠가 개발자의 메일링 답변을 보니 곧 포함할것이다 라는 의견을 밝힌점과 그로부터 2년이 지난 지금..
아직도 포함하지 않고 버전업만 한다는것은 포함할 의사가 없다는것을 나타내는것으로 보인다.
단순한 리눅스의 C소스나 고정화된 배포형식의 버전컨트롤 (현재 freshmeat이나 sf등이 사용하는 형식) 으로 보이기 위함만을 추구하는곳에야 편리하게 깔아 쓸수 있지만,
말그대로 버전컨트롤, 바이너리 관리등을 위한 목적으로 제작된 프로그램은 아닌것이 확실했다.
SVN은 단순한 배포용 소프트웨어다. webdav 인터페이스를 통해 wc 등으로 누군가 무엇을 했고 누가 참여를 했느냐등을 집계내는 플러그인으로 소스작업과 배포 이외에는 전혀 고려되어있지 않다.
CVS를 통해 편법을 동원해가며 user mapping을 거는것이 오래된 방식이지만 가장 많은 호환성을 나타내는것으로 판단된다.
Posted by LeCieL



