Eclipse

Using and hacking Subclipse - the Subversion plugin for Eclipse

_침묵_ 2006. 9. 15. 19:36

출처 :http://www.dev2dev.co.kr/pub/a/2005/11/subclipse.jsp

Using and hacking Subclipse - the Subversion plugin for Eclipse

byEugene Kuleshov
2005/11/30

개요

Subversion(SVN) 은 CVS를 대체하는 강력한 버전 제어 시스템으로, 버전 지정으로 변경되는 이름, 디렉토리 및 메타데이터 그리고 원자적 커밋(atomic commit) 및 HTTP/HTTPS를 통한 원격 액세스와 같이 CVS에서 제공하지 않은 여러 가지 중요한 기능을 지원합니다. 현재 BEA의dev2dev CodeShare사이트에서 호스팅되는 프로젝트들을 위시한 많은 오픈 소소 프로젝트에서 Subversion을 버전 제어 시스템으로 채택하고 있습니다. CodeShare용으로 명령줄SVN 클라이언트와 Tortiose SVN for Windows를 설치하는 방법에 대해서도 간단히 설명하겠지만, IDE에서 바로 Subversion 리포지토리와 연동하도록 하는 것도 좋은 방법입니다.

여기서는 Subversion을 Eclipse IDE와 연동하여 사용하는 방법에 대해 설명합니다. 특히 Subclipse 플러그인의 설치 및 사용에 대해 검토하도록 하겠습니다. 아울러 준비된 구성을 사용하여Subclipse 플러그인자체를 확장하거나 수정하는 방법에 대해서도 설명하겠습니다.

Subclipse 설치

Subclipse를 설치하는 가장 좋은 방법은 Eclipse Update Manager를 사용하는 것인데, Eclipse 3.1의 메뉴에서 Help -> Software Updates -> Find and Install... 순서로 들어가면 찾을 수 있습니다. Search를 선택하여 설치할 새 기능을 검색하고 새로운 원격 사이트를 추가하여 URL을 http://subclipse.tigris.org/update로 지정하십시오.

사용자 삽입 이미지

그림 1. Eclipse Update Manager를 통한 Subclipse 설치

업데이트를 검색하면 사용 가능한 기능 목록을 확인할 수 있습니다. 본 자료를 집필하는 시점의 최신 업데이트는 Subclipse 0.9.33입니다.

사용자 삽입 이미지

그림 2. Subclipse의 최신 업데이트 선택

다음 화면에서 라이센스 규정에 동의하고 설치 위치를 선택해야 합니다. 새 플러그인(Subclipse 등)은 기본 제공되는 Eclipse 설치 디렉토리가 아닌 별도의 외부 확장 위치에 설치하는 것이 좋습니다. 이렇게 하면 필요한 경우에 설치된 기능을 수작업으로 쉽게 제거할 수 있을 뿐 아니라 릴리스, 안정적인 초기 액세스(M1, M2 등) 및 통합 IDE 빌드와 같은 플러그인을 여러 차례의 Eclipse 설치 시에 공유할 수 있습니다.

사용자 삽입 이미지

그림 3. 설치 위치 선택

이제 Update Manager가 선택된 기능을 다운로드하여 설치한 다음 재시작 요청 메시지를 표시합니다.

다시 시작하면 기본 설정 대화 상자에 새로운 SVN 섹션이 표시되고 Subversion 활동에 대한 추가 뷰가 나타납니다. 이러한 뷰는 Window -> Show View -> Other... 메뉴를 사용하여 Java Perspective에 추가됩니다.

사용자 삽입 이미지

그림 4. Subversion 활동 뷰 추가

SVN Repository 뷰를 Quick Views에 추가하고 SVN Resource History를 Java Perspective의 작업 영역 하단에 있는 탭 그룹 중 하나에 추가하면 개발 작업 시에 편리하게 이용할 수 있습니다. 또한 드래그 앤 드롭 방식을 사용하면 (Navigator, Package Explorer, SVN Repository 및 Synchronize와 같은 리소스 지향 뷰에서 SVN Resource History 뷰로) "리소스 활용 내역 가져오기(get resource history)"와 같은 작업을 간편하게 수행할 수 있습니다.

Subclipse에서 SVN 인터페이스 구성

다음 프로토콜 중 하나를 사용하도록 Subversion 서버를 구성할 수 있습니다.

  • svn프로토콜은 독립 실행형 Subversion 서버(svnserve)에서 사용하는 상태 유지형 경량 프로토콜이며 안전한 버전인 이 svn+ssh는 ssh기반 터널링을 사용합니다.
  • http프로토콜은 WebDAV확장에 기반을 두고 있으며 주로 Apache HTTP 서버에 모듈로 배포됩니다. 이 안전한 버전은 https를 사용하며 dev2dev CodeShare에서 Subclipse를 설치할 때 사용하는 프로토콜입니다.
  • 파일 프로토콜은 로컬로 제공되는 Subversion 리포지토리(예: 공유 드라이브상의 레포지토리 등)에 액세스하는 데 사용되며 가장 비효율적인 방법이라 할 수 있습니다.

Subclipse는 특수 어댑터 추상화를 사용하여 위의 프로토콜과 연동합니다. Window -> Preferences -> Team -> SVN dialog의 플러그인 속성에서 다음 어댑터 중 하나를 선택할 수 있습니다.

사용자 삽입 이미지

그림 5. 어댑터 선택

모든 어댑터는 각각의 장점을 가지고 있습니다.

  • JavaSVN은 전적으로 Java에 기반을 둔 유일한 Subclipse 클라이언트이며 기본적으로 사용 가능하도록 설정되어 있습니다. 이 어댑터는 file:/// 프로토콜은 지원하지 않습니다.
  • JavaHL은 고유 Subclipse API를 둘러싼 씬 래퍼(thin wrapper)입니다. 이 어댑터는 Win32 플랫폼용으로 사전에 구축되었지만 그 외의 경우에는 (Unix 배포에 포함되지 않는 한) 수동으로 구축해야 합니다.
  • 명령줄 어댑터는 JavaHL을 설치할 수 없을 때만 사용해야 하며, Subclipse 리포지토리는 file:/// 프로토콜을 사용합니다.

대부분의 경우에는 JavaSVN을 선택하고 필요한 경우에만 JavaHL이나 명령줄 어댑터를 선택할 수 있습니다.Resources section의 링크는 HTTP 프록시 구성이나 SSL클라이언트 인증서 등 특별한 경우를 해결하는 데 유용하게 사용됩니다.

CodeShare에서 SVN 리포지토리에 연결

여기 제시된 예제를 참고하시기 바랍니다. CodeShare SVN 서버에는 dev2dev 사이트에서 사용하는 것과 동일한 사용자 이름과 암호를 입력해야 합니다.

사용자 삽입 이미지

그림 6. Subversion 리포지토리에 연결

연결 파라미터가 정확히 설정되어 있으면 SSL 인증서 확인 대화 상자가 나타납니다.

사용자 삽입 이미지

그림 7. SSL 인증서 수락

인증서를 수락하면 해당 리포지토리를 찾아 기존의 프로젝트를 확인할 수 있습니다.

사용자 삽입 이미지

그림 8. SVN 리포지토리에서 기존 프로젝트 보기

이제 Subversion과 Subclipse 플러그인을 사용할 수 있습니다!

SVN에서 기존 프로젝트 확인

SVN Repository 뷰에서 볼 수 있는 것과 마찬가지로 Subversion을 사용하는 다른 프로젝트 뿐 아니라 많은CodeShare 프로젝트에서도 공통된 레이아웃을 볼 수 있는데, 그 모습은 다음과 같습니다.

 

https://xjms-ra.projects.dev2dev.bea.com/svn/xjms-ra
   +-- branches
       +-- www
       +-- xjms-ra
           +-- mqseries (work in progress)
           +-- activemq
   +-- tags
       +-- xjms-ra
           +-- 0.0.1 (stable versions or releases)
           +-- 0.0.2
   +-- trunk
       +-- www     (project web site)
       +-- xjms-ra (project source)

 

트렁크 폴더에 주요 개발 소스, 태그 폴더에 안정적인 스냅샷이나 릴리스, 분기 폴더에 대신 사용할 수 있는 다른 개발 라인의 코드들이 들어 있습니다. Subversion에서 태그와 분기는 선택된 소스 스냅샷에 다른 버전이 붙여진 복제본일 뿐입니다. 보다 자세한 내용은Subversion 관련 교재를 참조하십시오.

SVN Repository 뷰에서 현재 프로젝트의 트렁크나 특정 태그 또는 분기를 선택하고 팝업 메뉴에서 Check Out AS... 작업을 선택합니다. 그 다음 표준 New Project Wizard가 안내하는 대로 프로젝트 유형(예: Java 또는 Simple Project), 프로젝트 이름 및 위치를 선택하고 필요에 따라 Java 빌드 경로를 구성합니다.

새 CodeShare 프로젝트를 위한 SVN 리포지토리 구성

버전 제어 리포지토리는 모든 프로젝트 인프라스트럭처의 중요 구성 요소입니다. 특히 오픈 소스 프로젝트(CodeShare에서 호스팅되는 프로젝트 등)에 있어서는 개발자와 다른 커뮤니티 구성원 간의 의사 소통에서 핵심적인 역할을 수행합니다. 예를 들면, 최종 사용자가 가장 최근의 코드에 패치를 제공할 수 있도록 하며 중요한 문제 해결을 위해 초기에 업데이트 메커니즘을 제공하기도 합니다. 따라서 새로운 프로젝트를 위해 SVN 리포지토리를 구성하고 시작 단계부터 모든 프로젝트 코드의 버전을 제어하는 것이 중요합니다.

새로운 CodeShare 프로젝트가 생성되면 SVN 리포지토리에 트렁크, 태그 및 분기 폴더가 포함되며, 트렁크 아래에 프로젝트 웹 홈 페이지용 index.html 파일이 들어 있는 www 모듈도 포함됩니다. 이 모든 요소들은 SVN Repository 뷰에서 확인할 수 있으며 이 뷰의 팝업 메뉴에서 액션을 사용하여 누락된 폴더를 생성할 수도 있습니다.

이제 모든 소스 코드, 빌드 스크립트, 설명서 그리고 기타 프로젝트 리소스가 Eclipse 프로젝트로 구성되었다고 가정해 봅시다. 그러면 Package Explorer나 Navigator 뷰의 팝업 메뉴를 통해 Team -> Share Project... 액션을 사용할 수 있습니다. Share Project Wizard가 안내하는 절차에 따라 SVN 리포지토리 유형을 선택한 후 다음 페이지에서 기존의 리포지토리 중 하나를 선택하거나 새로운 리포지토리를 구성합니다.

사용자 삽입 이미지

그림 9. Share Project Wizard에서 SVN 리포지토리 유형 선택

다음 화면에서 모듈 이름을 지정합니다. CodeShare 프로젝트의 레이아웃과 일치되도록 트렁크 폴더 아래에 모듈을 생성했기 때문에 trunk/xjms-ra와 같이 모듈 이름을 trunk/<project name>으로 지정해야 합니다.

사용자 삽입 이미지

그림 10. 모듈 이름 지정

확인 절차를 마치면 Subclipse에서 해당 모듈을 생성하여 SVN 리포지토리 내부로 모든 프로젝트 파일을 가져옵니다.

SVN 리포지토리와 연동

프로젝트가 SVN리포지토리에 연결되면 Package Explorer 및 Navigator 뷰의 Team 팝업 메뉴에 Subversion과 관련한 모든 액션 표시됩니다. 그러면Version Control with Subversion교재에 설명된 바와 같이 Commit, Update, Add to svn:ignore를 비롯한 여러 가지 액션을 직접 수행할 수 있습니다. 본 교재의 내용은 Help -> Help Contents -> Version Control with Subversion을 선택하면 나타나는 Eclipse 도움말 시스템에서도 확인할 수 있습니다.

Subclipse 플러그인을 설치하면 Eclipse의 Team Synchronize 뷰도 사용할 수 있어 다른 작업자가 커밋할 내용과 변경한 사항은 물론 리포지토리에서 업데이트되어야 할 부분을 한 눈에 파악할 수 있습니다. 또한 대부분의 SVN 명령을 이 Synchronize 뷰에서 실행할 수 있습니다.

Synchronize 뷰에 프로젝트나 작업들을 추가하려면 Team -> Synchronize with Repository 팝업 메뉴를 사용하거나 주 도구 모음의 Synchronize... 마법사 단추를 누르십시오. 이 단추를 찾을 수 없다면 (빈 공간을 클릭 한 후) 주 도구 모음의 팝업 메뉴에서 Customize Perspective 대화 상자를 사용하여 Team 명령을 현재 perspective에 추가하고 Window -> Save Perspective As... 메뉴를 사용하여 해당 perspective를 같은 이름으로 저장할 수 있습니다.

사용자 삽입 이미지

그림 11. 현재 perspective에 명령 그룹 추가

도구 모음 드롭다운에서 Synchronize... 액션을 선택하여 마법사를 시작합니다. 첫 번째 화면에서 다시 SVN 버전 추적 시스템을 선택하면 기본 리소스 선택 창이 나타나는데 여기서 전체 작업 공간을 동기화하거나 일부 프로젝트 집합을 선택하거나 또는 이름이 지정된 Working Set를 사용할 수 있습니다.

사용자 삽입 이미지

그림 12. 작업 공간, 작업 집합 또는 선택된 리소스 동기화

생성되면 Synchronize 뷰에서 버전 제어 시스템을 사용하여 자동 새로 고침을 예약할 수 있습니다. 이 과정은 Synchronize 뷰 메뉴의 Schedule... 메뉴를 통해서 구성할 수 있습니다. 이로 인해 항상 최신 상태를 유지할 수 있으며 다른 개발자들에 의해 변경되는 모든 사항을 파악할 수 있습니다.

사용자 삽입 이미지

그림 13. 자동 새로고침 예약

Subclipse는 여전히 발전 단계에 있기 때문에 버그가 존재할 수도 있고 사용자가 실제로 원하는 기능이 지원되지 않을 수도 있습니다. 이런 이유 때문에 다음과 같은 항목을 다루는 것입니다.

Subclipse 패치

Subclipse에서 문제가 발생할 경우에 몇 가지 해결 방법이 있습니다. 문제가 매우 심각하다면 해당 제품을 사용하지 않거나 다음 버전이 나오기를 기다리면 됩니다. 또는문제 추적 시스템시스템과 메일 목록 아카이브에서user@subclipse.tigris.orgdev@subclipse.tigris.org를 검색하여 문제에 대한 설명이나 임시 방편적인 해법을 찾을 수도 있습니다. 만약 이것도 도움이 되지 않으면 메일 목록의 주소로 해당 문제를 제기해 주십시오. 문제를 스스로 해결하고 싶다면 다음 단락에 제시된 Eclipse의 디버깅 및 패치 방법에 대한 간략한 설명을 살펴 보십시오. 참여할 의사가 있다면dev@subclipse.tigris.org메일 목록에 신청하여 다른 개발자들과 함께 작업을 진행하고 프로젝트 로드맵과 본인의 아이디어를 조율하는 것도 좋은 방법입니다.

이전에 Eclipse 플러그인을 사용해 본 경험이 없더라도 쉽게 시작할 수 있습니다. 우선 Subclipse 프로젝트를 Eclipse 작업 공간으로 가져와야 합니다. Subclipse 프로젝트용 Subversion 리포지토리는http://subclipse.tigris.org/svn/subclipse/에 있으며 이전에 설치된 Subclipse 플러그인을 사용하거나 명령줄 Subversion 클라이언트 또는 TortoiseSVN과 같은 외부 도구를 사용하여 코드를 확인 할 수 있습니다.tigris.org웹 사이트에 등록하여 Subclipse 프로젝트에 대한 관찰자(Observer) 역할을 요청하는 것도 좋습니다. 그러면 동일한 사용자 이름(읽기만 원하는 경우에는 "guest"/"guest"도 무방함)으로Subversion 리포지토리에 접속할 수 있고 문제 추적기(통합 Bugzilla 리포지토리)에 의견을 제시할 수 있는 권한을 얻는 것은 물론, 해당 문제에 패치를 추가할 수도 있습니다.

버전 제어 리포지토리에 연결되면 사용자의 작업 공간에서 다음의 프로젝트를 확인해야 합니다. 각각의 모듈에서 Check Out As...를 선택하고 위치와 프로젝트 이름(다음 표에 나오는 실제 플러그인 이름을 사용할 것을 권장함)을 선택한 후 Finish를 클릭합니다.

Repository PathJar or Eclipse Plug-in NameDescription
trunk/svnClientAdaptersvnClientAdapter.jar비 Windows용 또는 svnClientAdapter나 JavaHL을 구축해야 하는 경우
trunk/subclipse/coreorg.tigris.subversion.subclipse.coreEclipse 관련 플러그인 백엔드
trunk/subclipse/javahl-win32org.tigris.subversion.javahl.win32svnClientAdapter 및 JavaHL용으로 사전 구축된 고유 Windows 바이너리
trunk/subclipse/uiorg.tigris.subversion.subclipse.uiEclipse관련 UI
trunk/subclipse/feature-pluginorg.tigris.subversion.subclipse관련 내용. 코드 없음
trunk/subclipse/featureorg.tigris.subversion.subclipse (feature)Subclipse 기능
trunk/subclipse/bookorg.tigris.subversion.book"Version Control with Subversion" 설명서의 Eclipse 도움말 섹션
trunk/subclipse/book-featureorg.tigris.subversion.book (feature)"Version Control with Subversion" 설명서 모양
trunk/subclipse/update-site-Subclipse와 "Version Control with Subversion" 설명서 모양의 업데이트 사이트

개발 및 테스트 단계에서는 org.tigris.subversion.subclipse.core, org.tigris.subversion.subclipse.ui와 org.tigris.subversion.javahl.win32나 svnClientAdapter 중 하나를 사용해야 합니다. 그 외 다른 모듈은 전체 플러그인 기능을 패키지로 제공하거나 업데이트 사이트를 구축하는 데에만 필요합니다.

이 모든 프로젝트가 Eclipse 작업 공간에 있을 때 다음과 같은 방법으로 실행해 볼 수 있습니다. Run -> Run... 메뉴를 사용하여(또는 디버거에서 실행할 경우 Debug 메뉴 사용) Eclipse Application 유형의 새 론치(launch)를 생성한 후 Workspace Plug-Ins 목록에서 Subclipse 플러그인을 선택합니다. 설치된 Subclipse와 연동하여 IDE를 실행하는 경우 External Plug-Ins 목록에서 Subclipse 플러그인의 체크 표시를 취소하고 나머지 다른 플러그인에는 체크 표시를 해야 합니다.

사용자 삽입 이미지

그림 14. Eclipse 애플리케이션 실행

Run(또는 Debug)을 클릭합니다. 모든 것이 제대로 구성되었으면 두 번째 Eclipse Workbench 창이 표시됩니다. 여기서 Subclipse 뷰를 열어서 주 Eclipse 인스턴스에서와 마찬가지로 리포지토리에 연결할 수 있습니다. 디버거에서 실행하는 경우에는 Subclipse 클래스나 Subclipse에서 사용하는 Eclipse 코어 클래스에 중단점을 설정할 수 있습니다. 가장 바람직한 시작 지점은 org.tigris.subversion.subclipse.ui 플러그인의 org.tigris.subversion.subclipse.ui.actions 패키지이며, 여기에 메뉴나 도구 모음에서 조작할 수 있는 Subclipse 관련 UI 액션들이 포함되어 있습니다. 액션들은 plugin.xml에서 선언적으로(주로 액션 요소) 또는 Java 코드에서 프로그래밍적으로 등록될 수 있기 때문에 이 두 가지를 모두 확인해야 합니다.

까다로운 부분이 완료되고 변경 사항이 모두 구현됐다고 가정한다면 이제는 패치를 생성하고 해당 패치를 Subclipse문제 추적 리포지토리의 원래 문제로 연결해야 합니다. 하지만 패치를 생성하기 전에 먼저 버전 제어 리포지토리에서 가장 최근의 변경 사항(변경이 있는 경우)을 선택하여 최종적으로 테스트해봐야 합니다. 아무 문제가 없다면 Team -> Create Patch... 메뉴를 사용하여 마법사를 시작합니다. Save To Clipboard 또는 Save In File System을 선택하고 서브디렉토리에서 변경 사항을 반복적으로 검사할 필요가 있는지 여부를 지정합니다.

사용자 삽입 이미지

그림 15. 패치 생성

패치가 생성되면 해당 패치를 dev@subclipse.tigris.org 메일 목록으로 보내거나 문제 추적기에서 문제를 확인하여 패치를 문제에 연결할 수 있습니다.

결론

Subclipse 플러그인과 같은 Eclipse 플랫폼에 대한 오픈 소스 확장을 통해 개발자 생산성을 높이고 실수의 여지를 없애며 개발 팀 내의 의사소통을 향상시킬 수 있습니다. 지금까지Eclipse IDE 내에서 Subversion 버전 제어 시스템과 상호 작용할 수 있도록 Subclipse를 설치, 구성 및 사용하는 방법에 대해 설명했습니다.

Subclipse 플러그인을 예로 들어 Eclipse 플러그인 개발 환경의 설치 방법, 기존 플러그인의 디버그 방법 그리고 패치 생성 방법에 대해서도 다뤘습니다. 거의 모든 Eclipse 사용자가 오픈 소스 확장은 물론, Eclipse 플랫폼 자체에 대해서도 아이디어와 패치를 제공할 수 있습니다.

Resources

Eugene Kuleshov는 독립 컨설턴트로서 소프트웨어 설계 및 개발 부문에서 12년 이상의 경력을 보유하고 있으며, 애플리케이션 보안, 엔터프라이즈 통합(EAI) 및 메시지 지향 미들웨어 분야의 전문가로도 명성을 얻고 있습니다.