PMD는 자바 소스코드를 자동으로 리뷰하여 잠재적인 결함을 찾아주는 도구입니다. 오픈소스 프로젝트로 개발되고 있으며 4.2.1까지 나와 있습니다. PMD만으로도 이용할 수 있지만 이클립스, JBuilder와 같은 IDE와 연동하여 이용하는게 보통이며 Ant, Maven과 같은 빌드툴과 연동하여 CI를 지원하는 환경을 구축할때도 유용하게 사용할 수 있습니다.
PMD를 이용하여 찾을 수 있는 결함에는 다음과 같은 유형들이 나올수 있습니다.
잠재적 버그
사용하지 않는 코드
너무 복잡한 코드
중복된 코드
사실 이런 결함을 눈으로 찾을 수도 있지만 개발중에 사전에 정의해 놓은 룰셋을 기반으로 자동으로 체크해 준다면 개발자는 문서로 된 컨벤션을 확인하느라 고생하지 않고 프로젝트 표준에 적합한 코드를 작성하는게 가능해 집니다.
이클립스 플러그인형태로 PMD를 사용해 보도록 하겠습니다. PMD 이클립스 플러그인을 설치하는 가장 손쉬운 방법은 Update 사이트를 이용하는것입니다.
몇가지 물어보는 과정을 거치고 나면 설치가 완료되고 이클립스를 재시작 하라는 메시지가 나옵니다. 재시작하고 Window -> Preferences로 가보면 PMD라는 메뉴가 추가된걸 확인할 수 있습니다.
PMD를 가지고 자바소스를 리뷰해 보도록 하겠습니다. 테스트로 사용할 솔스는 PetStore 2.0 입니다. 이클립스에서 자바 프로젝트를 하나 만들어서 PetStore 소스를 임포트합니다. Package Explorer에서 검토할 소스를 선택하고 PMD -> Check code with PMD를 선택합니다.
해당 소스가 위반하는 룰에대한 현황을 Violations Overview에서 볼 수 있습니다. 너무 많은 Violation이 있으면 Priority 수준을 1~5까지 선택적으로 볼수 있습니다. 오른쪽 상단의 여러색의 원형 블릿을 누르면 이를 조정하는게 가능합니다.
소스파일 하나가 아닌 프로젝트 전체에 대해 검사를 수행하고 그 결과를 보고 싶을수 도 있습니다. 만약 개발리더나 아키텍트라면 이런 일을 수행해야 할거 같습니다. 프로젝트를 선택하고 PMD ->Generate reports를 누릅니다. 그러면 reports 폴더가 생기면서 프로젝트 전체 소스에 대한 검사결과 레포트를 생성해 줍니다.
이렇게 진행하는건 IDE를 이용하여 개발을 진행하면서 PMD를 사용하는 경우라 말할수 있습니다. 이와 병행하여 빌드에 PMD를 끼워넣어서 같이 실행되도록 할 수도 있습니다. 다음번에 이에 대해 알아보도록 하겠습니다.
MagicDraw를 설치하고 나면 프로그램을 실행하고 나서 C:/timetracker/mda/src/main/uml/timetracker.xml파일을 열어서 모델링을 시작합니다. timetracker.xml 파일을 로딩하기 위해서는 안드로메다에 대한 UML 프로파일을 필요로 하는데 이를 설정해 주어야 합니다. andromda의 Magic Draw UML Profile은 Maven Repository에 이미 들어있습니다.
.m2\repository\org\andromda\profiles
timetracker.xml 파일 안에 보면 아래와 같이 UML Profile에 대한 경로가 지정되어 있는걸 찾을 수 있습니다.
안드로메다에는 빨리 안드로메다를 경험해 볼 수 있도록 간단한 근태관리 시스템을 샘플 애플리케이션으로 제공하고 있습니다. 다음 그림은 기존에 사용하던 타임카드를 나타냅니다.
다운로드 및 설치 안드로메다 사이트에 가서 샘플애플리케이션을 다운로드 받아서 C:\timetracker-completed폴더에 압축을 해제합니다. 폴더를 변경하면 샘플내의 pom.xml 파일을 변경해줘야 합니다. C:\timetracker-completed폴더로 이동하여 명령줄 창에서 다음과 같이 입력하고 실행합니다.
mvn install
그러면 TimeTracker가 필요로 하는 모든 jar 파일을 자동으로 다운로드 하여 로컬 저장소에 넣어놓습니다.
C:\timetracker-completed\pom.xml 파일에 오류가 있는거 같습니다. 파일내용중에 <modules/>에 대한 부분이 있는데 pom.xml 파일을 열어서 아래와 같이 app 모듈을 주석처리 하셔야 위와같은 결과를 볼 수 있습니다.
Database 만들기 MySQL 데이터베이스에 timetracker라는 이름의 데이터베이스를 생성합니다. 그리고 timetracker라는 아이디를 가진 사용자를 생성하여 timetracker 데이터베이스에 대한 모든 권한을 줍니다. 사용자 암호 역시 timetracker 입니다. 그리고 나서 명령줄 창에서 다음 명령어를 실행합니다.
명령이 성공적으로 실행되면 다음과 같이 JBoss의 default\deploy 위치에 timetracker-1.0-SNAPSHOT.ezr이 배포되었음을 알려줍니다.
애플리케이션 테스트 이제 JBoss를 실행하고 TimeTracker를 테스트해 볼 순서가 되었습니다. JBoss의 %JBOSS_HOME%\bin\run.bat 파일을 실행합니다. JBoss가 실행되고 TimeTracker가 올라오는것을 로그로 확인할 수 있습니다. 브라우저를 실행하고 다음 URL을 입력하여 TimeTracker를 시작합니다.
http://localhost:8080/timetracker
Username은 nbhatia, Password는 cooldude로 입력하고 Log In을 눌러서 TimeTracker로 로그인 합니다. Search timecards를 눌러서 현재 타임카드를 조회해 볼 수 있습니다.
지금까지 안드로메다로 애플리케이션을 개발하는 방법에 대해 TimeTracker라는 샘플 애플리케이션을 통해서 살펴봤습니다. 다음에는 좀 더 상세하게 들어가 보도록 하겠습니다.
환경변수 추가 : JAVA_HOME, MAVEN_HOME, JBOSS_HOME, CATALINA_HOME, PATH
path에 추가 : java와 maven의 bin 위치를 path에 추가
각 환경변수들은 위에서 설치한 도구들의 홈 디렉토리를 가리키는 변수들입니다.
Maven 설정 먼저 홈 디렉토리에 build.properties 파일을 추가합니다. 윈도우즈라면 홈 디렉토리 위치는 C:\Documents and Settings\[계정] 입니다. build.properties 파일은 Maven을 위한 리모트 레파지터리 위치를 정의하는 파일로 파일 내용은 다음과 같습니다.
안드로메다라고 부르는 AndroMDA는 UML 모델을 기반으로 J2EE, .NET 코드 생성을 지원하는 템플릿 기반의 프레임워크 입니다. 다른 MDA 도구와 달리 Spring, jBPM, Struts, JSF, Hibernate와 같은 프레임워크에 코드 생성을 직접 지원합니다. 원하는 UML 도구로 생성한 모델을 기반으로 코드를 생성 할 수 있습니다.
기존 카트리지를 수정해서 자신만의 카트리지를 만들수도 있습니다. 메타 카트리지라고 부르는 기존 카트리지를 카트리지 툴킷을 이용해서 수정하게 되면 새로운 카트리지를 만들 수 있고 이 카트리지로 UML 툴을 이용해서 소스 생성이 가능합니다. IDE 안드로메다는 이클립스 플러그인 형태로 설치가 됩니다. 템플릿 Velocity, FreeMarker를 지원합니다. 텍스트 생성 소스코드, SQL, HTML, O/R 맵핑 파일 생성이 가능합니다.
이런 특징을 갖고 있는 안드로메다로 어떤일을 할 수 있는 걸까요 ? 다음과 같은 아키텍처를 갖는 엔터프라이즈 애플리케이션을 만든다고 가정 해 보겠습니다.
레이어드 아키텍처는 아키텍처를 정의하는데 가장 많이 사용되는 아키텍처 스타일입니다. 각 레이어별 설명은 생략하겠습니다. 이런 아키텍처를 가진 애플리케이션을 안드로메다로 개발하려면 각 레이어 별로 사용하는 기술셋이 맵핑되어야 합니다.
안드로메다를 이용하면 오른쪽에 나와있는 기술셋으로 구현된는 J2EE 애플리케이션을 모델로부터 생성해 내는게 가능합니다. 프레임워크를 위한 설정파일은 자동으로 생성되며 개발자는 비즈니스 로직 구현에만 전념하면 됩니다.
AgitarOne이 만들어 주는 테스트 코드는 어느정도 수준일까요 ? 소스코드에 따라서 달라지기 때문에 여러 소스를 가지고 확인해 보도록 하겠습니다.
먼저 간단한 Value Object 수준의 Java Bean 클래스를 가지고 테스트 코드를 만들어 봤습니다. (AddressBean.java) 생성자와 각각의 getter, setter 쌍들에 대한 테스트 메소드가 생성되는 군요.
이번에는 좀 더 복잡한 메소드 내에 if 문이 있는 경우의 소스를 가지고 테스트 코드를 만들어 보겠습니다. (AutoCompleteBean.java)
메소드의 인자가 객체여서 인자를 만드는 로직이 복잡하기는 한데 다른 부분만 비교해 보니 if 문에 의한 경우의 수만큼 테스트 코드가 생성됩니다.
이번에는 for 루프와 if문이 같이 있는 더 복잡한 경우를 가지고 테스트 코드를 만들어 봤습니다. (CaptchaValidateFilter.java)
결과는 기대했던것 보다 테스트 코드의 양이 적게 나왔습니다. if문의 모든 경우와 for문의 모든경우의 곱이 나올거라 생각했는데 막상 결과를 보니 for문의 경우의 수만큼만 생성해줍니다. 코드를 보니 내부에 if문의 경우의 수도 모두 만족하고 있네요. (그래서 더이상 만들필요가 없었나 봅니다.)
하단의 뷰를 보면 각 테스트 클래스 별로 현재 상태와 테스트 커버리자가 보여집니다.
이외에도 Framework 기반의 코드나 EJB 등등에 대한 검토가 더 필요할 거 같습니다.
Ant가 워낙 널리 쓰이다 보니 Maven을 설명할때 "Ant 보다 좋다.", "Ant의 확장판이다." 처럼 Ant와 비교할때가 많습니다. 하지만 Maven을 Ant와 같은 빌드 스크립트로 이야기하기에는 Maven의 기능이 너무 많습니다.
Maven이 Ant가 가진 많은 단점을 보완하는것은 맞습니다. J2EE 프로젝트가 원체 다양해 지다 보니 Ant의 스크립트도 복잡해졌습니다만 Ant 스크립트는 단순한 XML 구조이기 때문에 이를 수용하기에 적합하지 않았습니다. 그래서 maven은 많은 좋은 사례들을 참고하여 미리 고울을 정의해 놓았습니다. Ant에서 스크립트를 만드느라 고생해야 하는걸 maven에서는 하지 않아도 됩니다.
즉 maven을 사용하게 되면 공통된 프로젝트 구조를 정의해 놓고 이 컨벤션에 맞는 빌드 프로세스를 사전에 정의해 놓음으로서 프로젝트와 빌드 프로세스를 분리할 수가 있는 것 입니다. maven의 빌드 라이프 사이클은 따로 살펴볼만한 가치가 있습니다.
m2라고 불리는 maven2는 maven1을 기반으로 좀 더 정형화된 빌드 라이프사이클 관리를 위해서 새롭게 개발된 버전입니다. 여기서는 maven1.02를 사용하겠습니다.
POM에 대한 기본적인 내용만 알아보겠습니다. POM은 Project Object Model의 약자입니다. maven1에서는 Project.xml이라는 이름으로 정의했으나 maven2에서는 Pom.xml이라는 이름을 갖습니다. POM에는 dependencies, task, goal 등을 정의합니다. 모든 POM은 기본 POM인 Super POM을 상속받습니다.
여기서도 일단 Maven을 Ant 처럼 프로젝트를 빌드하는 용도로만 사용하려고 합니다. 그러기 위해서는 먼저 Maven에 대해 알아야 합니다. 직접 만들까 하다가 뒤져보니 비슷한 강좌가 있어서 링크만 걸겠습니다.
위 강좌를 이해하시면 여기서 필요한 작업은 충분히 하실수 있을거라 믿습니다. 간단히 정리해 봤습니다.
Maven 다운로드
Maven 설치
MAVEN_HOME 환경변수 추가
PATH에 Maven의 bin 폴더 추가
테스트
maven의 기본적인 용법만 몇가지 정리해 봤습니다.
maven이 제대로 설치되었는지 확인하기 위해서 콘솔창에서 다음과 같이 실행합니다.
maven -v
maven으로 새로운 프로젝트를 생성합니다.
maven genapp
genapp는 maven의 기본 프로젝트 구조를 바탕으로 src폴더, conf폴더와 같은 새로운 프로젝트 스켈레톤을 생성해 줍니다. 이 구조는 원하는 대로 변경이 가능합니다.
maven에서 설정을 위해 사용하는 파일은 project.xml과 project.properties 2개입니다. project.xml은 라이센스, 개발자, 소스코드 관리, 프로젝트 개요, 메일링 리스트등의 프로젝트 상세내역을 정의하며, project.properties는 프록시 설정과 같은 정보가 들어갑니다.
루비 개발환경을 뭘로 할까 고민 하다가 일단 가볍게 가기 위해 설치되어 있는 UltraEditor로 설정을 해 봤습니다. 과거 Java 개발환경 설정했던 기억을 되살려서..
1.Syntax Highlighting 설정
[Advanced] > [Configuration] 메뉴에서 대화상자가 뜨면 Syntax Highlighting 탭을 선택합니다. [Open]을 누르면 WORDFILE.TXT가 열립니다.
이 파일 마지막 부분에 루비 문법파일을 붙여넣고 저장하면 그 다음부터는 루비파일에 대한 문법이 하이라이팅되어 나타납니다.
2.루비 실행 환경 등록
에디터 내에서 루비를 실행해 볼 수 있도록 ruby 명령어를 등록해 보겠습니다. [Advanced] > [Tool Configuration] 으로 갑니다. 아래와 같이 입력하고 [Insert]를 누르면 [Advanced] 메뉴 하단에 [ruby]라는 메뉴가 새롭게 추가됩니다.
3.hello.rb 실행
이제 테스트 해볼 차례입니다. 아무곳에서 hello.rb 파일을 만듭니다. 그러고서 에디터에서 읽어들여 [ruby] 메뉴를 실행하면 하단의 Output Window에 Hello World 라고 결과가 나타나는걸 볼 수 있습니다.
TDD하면 어떤생각이 드시나요 ? XP 프랙티스중에 가장 성공한 프랙티스이지만 현실은 조금 다릅니다. 누구나 좋다고 생각하지만 적용하는것은 어려워 하죠. 사실 테스트 코드를 작성하는데 많은 시간과 노력이 필요한것은 사실입니다. Agita Software의 AgitarOne은 그런 어려움을 해소하기 위해서 개발된 소프트웨어 입니다. 이와 유사한 도구로는 Parasoft의 JTest가 있습니다.
Name : petstore20 Next build version : petstore20-0 Trigger type : manual Build necessary condition : always Associated builders : ant 1.6.2
Next build version을 perstore20-0으로 놓게 되면 빌드가 될때마다 -1, -2 로 증가하게 됩니다. Build necessary condition은 원래 형상서버에 변경이 생겼을때만 빌드 하도록 놓는게 기본값(vcsModified or dependencyNewer)입니다만 여기서는 테스트를 위해 항상 빌드하도록 설정합니다.
저장을 하고나면 다음과 같은 결과를 볼 수 있습니다. 저는 테스트를 위해 이미 빌드를 실행했기 때문에 빌드가 성공했다는 파란 동그라미가 나타납니다. 오른쪽 상단의 build manualy를 누르고 [Save]를 누르면 빌드가 실행됩니다. build history 아이콘을 누르면 빌드 결과를 볼 수 있습니다.
전체 4번 빌드가 실행되었고 그중에서 세번 실패하고 1번 성공했군요. Version을 누르면 상세 화면으로 이동합니다.
상세화면에서는 빌드 시작일, 종료일, 빌드에 걸린시간, 빌드 로고, 리비전 로고를 볼 수 있습니다.
간단하게 나마 Luntbuild와 Subversion을 연동해봤습니다.
내용이 간단해서 더 상세하게 다룰 내용이 많이 남은거 같습니다. CVS, Visual Source Safe와 연동한다거나 Maven과 같은 빌더를 이용하는것, 구체적으로 사용되는 시나리오등도 필요할 거 같네요. 틈나는 대로 위와 같은 내용으로 이 포스트를 확장해 가려고 합니다.
이번에는 Luntbuild에 Version Control System을 등록하는것에 대해 알아보겠습니다. Luntbuild가 지원하는 Version Control System에는 어떤것들이 있을까요 ?
AccuRev
Base Clearcase
Dynamic Clearcase
CVS
File System
MKS
Perforce
Star Team
Subversion
SubversionExe
ClearcaseUCM
Visual Source Safe
많이 사용하는 형상관리 시스템을 대부분 지원하기 때문에 따로 커스터마이징이 필요없을 정도입니다. (물론 저희회사에서 사용하는 Dimensions은 없습니다. 슬픈 현실이죠. --;) 여기서는 Subversion을 사용하겠습니다.
1.Project 탭에서 해당 프로젝트 이름을 클릭하여 프로젝트를 선택합니다.
2.오른쪽 상단의 Edit 아이콘을 클릭하여 프로젝트 수정화면으로 들어갑니다.
3.Builders탭으로 이동하여 new builder 아이콘을 클릭하여 빌더를 추가합니다. Luntbuild가 지원하는 builder는 다음과 같습니다. 여기서는 Ant를 사용하겠습니다.
Ant
Maven
Maven2
Command
Rake
builder type : Ant builder Name : ant 1.6.2 Command to run Ant : E:\j2ee\devlib\apache-ant-1.6.5\bin\ant.bat Build script path : /Petstore20/build/build.xml Build targets : all
Ant는 1.6.2 버전을 사용했습니다. 미리 Ant를 받아서 압축을 풀어놓으셔 하며 그 위치를 명시하면 됩니다. 빌드 스크립트는 테스트용으로 빈 파일을 하나 만들어서 사용했으며 스크립트 위치는 /build 폴더 입니다.
Luntbuild의 실행결과는 데이터베이스에 저장하는것이 가능합니다. 굳히 무겁게 DB까지 연동할 필요가 있냐고 이야기 하는 분도 계실듯 합니다. 하지만 빌드결과는 개발관리 측면에서 본다면 유용한 정보가 될 수 있습니다. Luntbuild가 지원하는 DB는 다음과 같습니다.
HSQL
MySQL
PostgreSQL
SqlServer
Oracle
Derby
H2
이 정도면 왠만한 데이터베이스는 다 지원한다고 말할 수 있을거 같네요. 이중에서 MySQL만 한번 연동해 보겠습니다.
1.MySQL을 설치합니다. 설치가 어렵지 않으니 그냥 하시면 될거 같구요. 설치하면서 사용자계정,암호,포트번호 등을 기억해 두셔야 합니다. 클라이언트 툴을 하나쯤 사용하시는게 편합니다. 제가 주로 사용하는 툴을 SQLyog 입니다.
2.Luntbuild에서 MySQL 관련 프로퍼티를 수정합니다. 이 설정파일은 \luntbuild-1.5.4.1\web\WEB-INF\jdbc.mysql.properties입니다. 이 파일을 열어서 아래와 같이 수정합니다. 포트나 서버이름은 자신의 MySQL에 따라 다를수 있습니다.
Luntbuild는 가장 많이 사용되는 빌드서버라고 할수 있습니다. 이번에는 이 Luntbuild를 이용해서 서브버전의 형상을 빌드하는것에 대해 알아보겠습니다. 그럴려면 먼저 서브버전이 설치되어 있고 Luntbuild에서 읽어올 레파지터리가 만들어져 있어야 합니다. 이 부분은 제가 이전에 포스팅한 Collabnet Subversion으로 형상서버 꾸미기를 참고하세요.
Luntbuild를 설치하겠습니다. 설치는 단순합니다. http://luntbuild.javaforge.com에 가셔서 Luntbuild를 다운로드 해서 적당한 위치에 압축을 풀면 됩니다. 저는 Luntbuild 1.5.4 버전을 사용하였습니다. Luntbuild는 웹기반의 애플리케이션이며 두가지 방식으로 사용하는게 가능합니다.:Standalone 방식과 서블릿 컨테이너에 배포하여 사용하는 방식
Standalone방식으로 실행하기 위해서는 \bin 폴더에 있는 luntbuild.bat 파일의 $INSTALL_PATH를 실제로 Luntbuild가 설치된 곳으로 바꿔줘야 합니다.
@echo off
cd /D "$INSTALL_PATH" if "%1" == "" ( set host="localhost" ) else ( set host="%1" ) if "%2" == "" ( set port="8080" ) else ( set port="%2" )
지난번 이후로 여러가지 일로 바빠서 손을 못대다가 오늘 다시 꺼내봤습니다. 이클립스로 형상을 Subversion에 추가하려고 하는데 발생한 에러는 아무리 봐도 이상했습니다. 설정파일을 다 살펴봐도 에러가 없는데 왜 에러가 날까 ??
그래서 콤맨드 라인에서는 되는지 확인 해봤습니다. 그냥 레파지터리에 대고 checkout을 실행합니다.
svn checkout svn://localhost/moai
결과를 확인해 보니 잘 되더군요. 이클립스에서 다시 해봤습니다. 이번에는 에러없이 레파지터리 연결이 만들어지면서 팝업창이 떠서 사용자 계정을 물어봅니다.
passwd 파일에 정의해둔 계정의 Username과 Password를 입력합니다. Comment를 디폴트로 해서 확인을 누르면 형상이 하나하나 올라가는것을 진행바로 확인 가능합니다.
모든 형상이 다 올라가면 다음과 같이 형상관리 중인 형상에 노란색 마크가 붙습니다.
일단 문제는 해결했습니다만 왜 저렇게 컴맨드 라인에서 실행을 한번 해줘야 하는지 이해가 안가네요. 다음에는 빌드서버를 설치해서 Subversion과 연결해봐야 겠습니다.
형상관리 서버도 준비됐고 클라이언트로 사용할 이클립스도 준비가 다 된거 같습니다. 그럼 이제 실제로 프로젝트를 형상서버에 올려서 잘 되는지 테스트 해 보려고 합니다. 샘플 애플리케이션은 J2EE Application의 대표격인 Java Pet Store 2.0을 사용합니다. 다운받아서 압축 해제 한후에 이클립스에 집어넣어 봤습니다.
PetStore20 프로젝트를 선택하고 마우스 컨텍스트 메뉴의 [Team] > [Share Project] 를 선택합니다.
아마도 CVS와 SVN 두개를 선택하라고 나오는데 SVN을 선택하면 Url을 입력하라고 나옵니다. 그럼 미리 앞에서 만들어둔 레파지터리를 입력하면 됩니다.
svn://localhost/moai
URL을 svn:// 으로 시작하는 것은 svn 프로토콜로 서브버전과 통신하겠다는 것을 의미합니다. 서브버전에서 사용가능한 프로토콜은 svn, svn+ssh, http가 있으며 이중 svn이 보통 많이 쓰입니다. http를 쓰려면 아파치 웹서버와 연동해야 합니다.(이부분은 나중에 해보려고 합니다.)
다음은 폴더명을 물어보는데 이 폴더는 레파지터리 밑에 생깁니다. 이 폴더로 해당 이클립스 프로젝트가 들어가게 되는데 그냥 프로젝트 이름을 사용하는것으로 합니다.
형상을 올릴때 들어가는 코멘트를 적습니다. 이것도 그냥 기본값으로 두고 Finish를 누릅니다.
그러면 모든 형상이 Subversion으로 들어가야 하는데 왠지 모를 오류가 발생했습니다. 아 이거 왜이럴까요. 이따가 확인을 좀 해봐야 겠습니다. -_-;;
이 오류는 설정파일에서 설정값 앞에 공백이 있어서 나는 오류였습니다. 예를 들어 보겠습니다.
password-db = passwd password-db = passwd
첫번째 설정은 password-db 앞에 공백이 하나 들어있습니다. 두번째 설정은 없는것입니다. 두번째 처럼 해야 에러가 나지 않습니다.
2번에 걸쳐서 포스팅을 했습니다만 작업한 내용은 CollabNet Subversionn을 설치하고 사용할 사용자 계정을 추가한거 밖에 없습니다. 이번에는 이클립스와 같은 클라이언트를 이용해서 직접 써보려고 합니다. subversion을 이용하기 위한 클라이언트는 크게 세가지입니다.
Eclipse Plugin = Subclipse + CollabNet Desktop
TotorisSVN
Command Line Client
Eclipse는 많이 아실거 같습니다. 주로 이용하는 플러그인은 Subclipse이지만 CollabNet Desktop이라고 SourceForge Enterprise Edition을 이용할 경우 활용이 가능한 플러그인이 더 있습니다. TotorisSVN은 윈도우 탐색이의 컨텍스트 메뉴로 실행되는 클라이언트 프로그램으로 인터페이스는 CVS와 동일합니다. subversion의 모든기능을 다 지원하기 때문에 아주 편리합니다. 개발자는 Eclipse와 같은 IDE를 주로 사용하고 PL, PM과 같은 관리자는 이TotorisSVN을 이용하여 산출물 관리를 하면 좋습니다.
그럼 먼저 Eclipse를 이용해서 subversion을 사용해 보도록 하죠. Eclipse가 없으신분은 http://www.eclipse.org 사이트 가셔서 다운받으시면 될거 같습니다. 참고로 저는 Eclipse Europa WTP 버전을 사용합니다. 설치는 Help > Software Updates > Find and Install을 이용합니다.
Install / Update 창에서 Search for New features to Install을 체크하고 Next를 누릅니다. New Remote Site에 아래와 같이 입력하고 OK를 누릅니다.
SourceForge Enterprise Edition을 설치해 보려고 했는데 가만히 생각해 보니 CollabNet Subversion을 설치만 하고 테스트를 안해봤네요. 그래서 간단하게라도 레파지터리를 만들어서 잘 동작하는지 확인을 해봤습니다.
먼저 moai라는 이름으로 레파지터리를 만들었습니다. 설치할 때 최상위 레파지터리를 c:\svn_repository로 했습니다. 거기에서 subverion의 명령어 인터페이스를 이용합니다.
svnadmin create moai
그럼 아래처럼 moai라는 폴더가 만들어지면 안에 필요한 폴더와 파일이 좍 생겨서 들어갑니다.
이번에는 이 레파지터리를 사용할 사용자를 등록해 보겠습니다. 사용자 등록은 svnserve.conf 파일과 passwd을 이용 합니다. 레파지터리로 잡은 위치로 가보면 conf 폴더안에 이 파일들이 있는걸 볼 수 있습니다.
수정은 2단계로 이루어 집니다. 먼저 svnserve.conf 파일에 사용자 계정을 등록할 파일을 명시합니다. 눈치빠른 분은 벌써 그 파일이 뭔지 아셨을거 같네요. 예 바로 passwd 파일입니다. 그 다음에 passwd 파일에 원하는 사용자 계정을 입력하면 끝납니다.
그럼 바로 svnserve.conf 파일을 수정해 보겠습니다. 중간에 보면 주석으로 처리된 password-db 부분이 있습니다. 이 부분의 주석처리를 해제해 줍니다.
### The password-db option controls the location of the password ### database file. Unless you specify a path starting with a /, ### the file's location is relative to the conf directory. ### Uncomment the line below to use the default password file. password-db = passwd
이번에는 passwd 파일을 수정해 보겠습니다. [users]로 표시된 부분 아래 주석 처리된 부분이 사용자 계정입니다. id = password 로 되어 있습니다. 이 부분의 주석처리를 해제해 줍니다.
### This file is an example password file for svnserve. ### Its format is similar to that of svnserve.conf. As shown in the ### example below it contains one section labelled [users]. ### The name and password for each user follow, one account per line.
[users] harry = harryssecret sally = sallyssecret
이것으로 사용자 등록이 끝났습니다. 이제 subversion을 시작해야 합니다. 저는 서비스로 등록해 놨기 때문에 이미 실행중이어서 서비스 메뉴를 이용해 재시작 했습니다만 아닌 분들은 아래 명령어를 이용해서 서비스로 서브버전을 시작할 수 있습니다.
net start svnserve
서비스로 등록하지 않고 개별적으로 실행하고 싶다면 아래처럼 하면 됩니다.
svnserve -d -r C:\svn_repository
좀전에 생성한 레파지터리에 대해서 checkout 명령을 날려 보겠습니다.
svn checkout svn://localhost/moai
revision 0 가 checkout 되었다는 결과가 떨어지면 성공한 것입니다. 간단한 작업인데 정리하면서 하려니 시간이 좀 걸리네요. 다음에는 클라이언트를 이용해서 형상을 실제로 넣고 빼는 작업을 해보겠습니다. 그럼 얼추 테스트가 끝날거 같네요.
어수선한 마음을 다잡고 빌드서버 테스트를 위해서 오늘은 형상관리 도구인 서브버전을 설치했습니다. 예전에 받아둔걸 설치하려다가 "그래도 최신버전이 낫겠지" 해서 subversion.tigris.org로 다운 받으려 들어갔는데 일전에 봐둔 openCOLLABNET이 생각났습니다. openCOLLABET이 제공하는 subVersion은 두가지 버전입니다.
CollabNet Subversion
SourceForge Enterprise Edition
이중에서 먼저 CollabNet Subverion을 설치해 봤습니다. 일단 윈도우 버전이라서 그다지 설치에 어려움은 없었구요. 위자드 스타일로 필요한 설정을 다 해주니 정말 편리하더군요.
처음 물어보는 것이 아파치 웹서버를 같이 설치하겠느냐고 물어봅니다.
다음으로 서브버전이 사용할 포트번호와 서브버전 레파지토리로 사용할 위치를 물어봅니다. 아래 체크박스를 체크하면 서브버전이 윈도우즈 서비스로 등록됩니다.
그 다음에는 아파치 웹서버가 사용할 URI와 포트를 물어봅니다. 웹서버가 서브버전의 레파지터리를 바라보기 때문에 레파지터리 위치를 명시해야 합니다. 만약 아래와 같이 설치가 되면 나중에 사용자는 http://localhost/svn/repos-name 으로 레파지터리에 접근이 가능합니다.
설치후에 서비스를 확인해보면 자동으로 Subverion이 서비스로 등록되었음을 확인할 수 있습니다.
사실 collabNetSubversion이 기존 서브버전과 많이 다르지는 않지만 오픈소스가 갖고 있는 부족한점 - 안정성이나 편리성-을 채워줄 수 있는것 같습니다.