 |
|
난이도 : 중급 Kulvir Singh Bhogal, Consultant, Software Services for WebSphere, IBM Mark Talbot, Developer, Industry Solutions, IBM
2007 년 2 월 06 일 Eclipse 업데이트 사이트에 새로운 플러그인이 추가되었거나, 플러그인이 업데이트 되면, IBM Lotus Sametime 사용자들에게 알릴 수 있는 방법은 무엇일까? 이 글에서는, Sametime 액션 바(action bar)에 추가할 수 있는 기능을 포함하는 업데이트 사이트를 쉽게 구현하는 방법을 설명합니다.
소프트웨어 애플리케이션들은 버그를 수정하고, 새로운 기능을 추가하면서 끊임없이 변화한다. 업데이트 하는 방식은 기업 인프라스트럭처에 있어 매우 중요한 요소이고, 특히, 해당 어플리케이션에 대한 사용자 규모가 대규모이거나, 분포도가 넓을 경우에는 더욱 그렇다. 전 세계적으로 분포되어 있는 기업의 경우, 소프트웨어 업데이트를 위해 기술자를 파견하는 것은 현실적으로 불가능하다. 다행히도, Eclipse 플랫폼에 구현된 IBM Lotus Sametime V7.5의 업데이트 사이트를 사용하여, 중앙에서 업데이트 내용을 확인할 수 있다.
이 글에서, Sametime 플러그인을 위한 업데이트 사이트를 구현하는 전 과정을 설명하고자 한다. 업데이트 사이트를 통해서 새로운 기능을 제공하고, 업데이트를 적용하는 방법을 설명할 것이다. Lotus Sametime Connect의 액션 바(Action Bar)에 버튼을 생성하는 단순한 플러그인을 만드는 방법과, Sametime 클라이언트의 Update Manager를 이용하여 업데이트 사이트에서 이 플러그인을 가져오는 방법도 설명할 것이다. 또한, 기존 플러그인의 업데이트를 검색하는 부분도 설명한다. 그림 1은 Sametime 클라이언트의 Update Manager 모습이다. 아래 그림에서, Sametime 클라이언트에 새로운 기능과, 기존 기능의 업데이트를 제공하는 사이트를 만들 수 있다.
그림 1. Update Manager
플러그인 업데이트 시, HTTP 서버의 역할
업데이트 사이트에 배치(deploy)하는 방법이 있다. Eclipse 업데이트 사이트는 하나의 URL로서, 이곳에서 클라이언트는 향상점이나 업데이트를 Sametime 클라이언트로 다운로드 할 수 있다. Eclipse 업데이트 사이트는 site.xml 파일에 의해서 정의되는데, 이 부분에 대해서는 이 글 후반에 설명하도록 하겠다. 업데이트 사이트를 호스팅 하려면, HTTP 서버가 필요하다. 이 글에서는, 무료로 사용할 수 있는 IBM HTTP Server를 사용하여 업데이트 사이트를 호스팅 했다. IBM HTTP Server page에서 IBM HTTP Server V6.1의 무료 카피를 다운로드 할 수 있다.
플러그인 만들기
설치와 업데이트를 본격적으로 논하기에 앞서, 간단한 플러그인을 만들어야 한다. 물론, 이러한 플러그인에는 여러 기능들이 들어갈 수 있다. 그림 2와 같이, 액션 바 위에 버튼을 배치하는 간단한 플러그인을 만들어 보자.
그림 2. 플러그인이 추가된 액션 바(Action bar)
여러분이 Eclipse 3.2를 사용하여 Lotus Sametime용 플러그인을 개발해 본 경험이 있을 것이라는 가정하에 설명하겠다. 만일 그렇지 않다면, 아래 참고자료 섹션에서, Sametime 플러그인 개발 관련 기술자료를 읽어보기 바란다.
다음 단계를 따라, 대상 플랫폼을 Lotus Sametime V7.5로 바꾸고, Eclipse 3.2에 com.ibm.example.iu 라고 하는 플러그인 프로젝트를 만든다.
- Eclipse 3.2를 열고, Plug-in Development Perspective로 전환한다.
- Window - Preferences를 선택한다.
- Preferences 다이얼로그 박스에서, Plug-in Development - Target Platform을 선택한다.
- 목표 플랫폼을 시스템 상에 Lotus Sametime V7.5 플러그인 디렉토리로 변경한다. 예를 들어, 기본 위치에 Lotus Sametime V7.5를 설치했다면, 대상 플랫폼 위치는 C:\Program Files\IBM\Sametime Connect 7.5이다.
- File - New Project를 선택하여 새로운 플러그인 프로젝트를 만든다.
- Plug-in Project를 선택한다.
- New Plug-in Project 마법사에서, 프로젝트 이름으로 com.ibm.example.iu를 선택하고, Next를 클릭한다.
- 플러그인 이름으로는 com.ibm.example.iu를, 플러그인 공급자로는 IBM DeveloperWorks를 지정한다.
plug-in.xml 파일
com.ibm.example.iu 플러그인 프로젝트를 만든 후에, org.eclipse.ui.viewaction 확장 포인트(extension point)를 제공하는 plug-in.xml 파일을 만든다. plug-in.xml 파일의 내용은 Listing 1과 같다.
Listing 1. Plug-in.xml 파일
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin>
<extension point="org.eclipse.ui.viewActions">
<viewContribution id="com.ibm.collaboration.realtime.sample.snippets.viewAction"
targetID="com.ibm.collaboration.realtime.imhub">
<action
class="com.ibm.example.iu.ClickHandler"
enablesFor="0"
icon="icon/kulvir.gif"
id="com.ibm.example.iu.ClickHandler"
label="Buddylist icon"
style="push"
toolbarPath="buddylist/additions"
tooltip="Kulvir hates gyros."/>
</viewContribution>
</extension>
</plugin>
|
확장 포인트(extension point)는 org.eclipse로 시작한다. 이것은 확장 포인트가 Lotus Sametime API가 아닌, 기본 Eclipse API의 일부라는 의미이다. 가끔, 숙련된 Eclipse 개발자들은 Eclipse API를 사용하여 Sametime 플러그인을 직접 개발할 수 있다. org.eclipse.ui.viewActions 확장 포인트에 대한 자세한 내용은 Eclipse 웹 사이트를 참조한다. 또한, Eclipse SDK에서 Help - Help Contents를 선택하면 도움말이 나타나고, 여기에서 org.eclipse.ui.viewAction을 검색하여, viewActions 확장 포인트에 대한 정보를 찾을 수 있다.
org.eclipse.ui.viewActions 확장 포인트를 자세히 보자. targetID는 버튼을 추가할 대상 뷰의 ID이다. 이 액션 바에 대한 뷰 ID는 com.ibm.collaboration.realtime.imhub이다. 그림 3에 강조된 부분은 뷰 ID를 갖고 있는 Sametime 클라이언트 액션 바의 모습이다.
그림 3. view ID를 갖고 있는 액션 바
액션 바의 뷰 ID를 targetID로 정의하여 액션 바를 확장할 수 있다. 또한, 뷰 액션을 핸들하는 클래스로서 com.ibm.example.iu.ClickHandler를, 그리고 뷰 액션을 나타내는 아이콘으로 icon/kulvir.gif를 정의한다. kulvir.gif 파일은 이 글의 필자인 Kulvir Bhogal의 헤드샷(headshot)이고, 툴팁(tooltip)은 "Kulvir hates gyros"이다. 나중에, 기존 기능 업데이트를 설명할 때, 이 툴팁을 "Kulvir loves gyros"으로 변경할 것이다.
BuddyListDelegate 인터페이스
액션 바에 추가된 버튼을 클릭하면 Hello! 메시지 박스가 생긴다. (그림 4)
그림 4. 메시지 박스
plug-in.xml에 버튼을 정의하는 것 외에도, 클릭 버튼을 처리 할 클래스도 만들어야 한다. com.ibm.example.iu 플러그인 안에, com.ibm.example.iu.ClickHandler라는 클래스를 만든다. BuddyListDelegate 인터페이스는 viewAction 클릭 버튼을 처리한다. BuddyListDelegate 인터페이스는 com.ibm.collaboration.realtime.imhub 플러그인에 저장된다. BuddyListDelegate 인터페이스를 변환하려면, com.ibm.collaboration.realtime.imhub 플러그인을 META-INF/MANIFEST.MF 파일의 필수 번들 리스트에 추가해야 한다. (Listing 2)
Listing 2. META-INF/MANIFEST.MF
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Iu Plug-in
Bundle-SymbolicName: com.ibm.example.iu;singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: com.ibm.example.iu.Activator
Bundle-Vendor: IBM
Bundle-Localization: plugin
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
com.ibm.collaboration.realtime.imhub
Eclipse-LazyStart: true
|
버튼을 클릭하면 나오는 Hello! 라는 메시지가 나타나는 메시지 박스를 만드려면, Listing 3처럼, run 메소드를 구현해야 한다.
Listing 3. Run method for MessageBox용 run 메소드
public class ClickHandler implements BuddyListDelegate {
public void run(ISelection selection) {
MessageBox mBox = new MessageBox(new Shell());
mBox.setMessage("Hello!");
mBox.open();
}
}
|
아이콘 생성하기
이제, 액션 바에 추가될 버튼 이미지를 포함하는 폴더를 만들자. com.ibm.example.iu를 오른쪽 클릭하여, New - Folder를 선택한다. 폴더 아이콘의 이름을 정하고, Finish를 클릭한다. 아이콘을 반입하려면, 이미지 파일이 저장된 폴더에서 플러그인 프로젝트의 아이콘 폴더로 드래그 한다.
그 다음에는, build.properties 파일을 변경하여, 아이콘 폴더와 콘텐트가 빌드 파일에 포함되도록 한다. Build Properties 에디터에서 build.properties 파일을 연다. com.ibm.example.iu 플러그인 프로젝트에 있는 build.properties를 오른쪽 클릭하고, context 메뉴에서 Open With - Build Properties Editor를 선택한다.
Build Properties Editor에서, 아이콘 폴더 옆에 있는 옵션을 선택하고, plugin.xml을 선택하고(그림 5), build.properties 파일의 변경 사항들을 저장한다.
그림 5. Build Properties Editor
Eclipse 기능
Eclipse의 기능(feature)들은 사용자에게 각 기능 별로 추상화되어 표현하며, 이는 캘린더, 메일 툴이 될 수도 있고, 현재 만들고 있는 액션 버튼이 될 수 있다. 이러한 Eclipse의 기능들은 여러 플러그인들로 구성되거나, 여러 기능들을 참조할 수 있으며, 이러한 관계는 feature.xml 파일에서 결정된다.
지금부터 단일 기능을 구현하는 방법을 설명하도록 하겠다. 단순하게 하기 위하여, 이 기능에 단 하나의 필수 플러그인만 추가하기로 한다. 이전에 만들었던 com.ibm.example.iu 플러그 인을 이용하기로 하자. 새로운 기능을 만들려면, File - New - Other를 추가해야 한다. New Feature 마법사에서, Plug-in Development - Feature Project를 선택하고, Next를 클릭한다.
이 기능의 경우, 프로젝트 이름은 com.ibm.example.feature.iu를 사용한다. 디폴트 기능 ID를 수락하고, 기능 이름을 "Action Bar Button Feature"로 한다. Next를 클릭한다. Reference Plug-ins and Fragments의 경우, 그림 6처럼 com.ibm.example.iu 플러그인을 선택하고, Finish를 클릭한다.
그림 6. New Feature 마법사
feature.xml 파일을 열고, Overview 탭을 선택한다. 다음과 같은 URL 포맷으로 업데이트 사이트의 URL을 입력한다.
http://YOUR_HTTPSERVER_URL/myupdatesite
여기에서, YOUR_HTTPSERVER_URL은 여러분이 사용하는 HTTP용 URL이다. HTTP 서버를 입력하면, Sametime 클라이언트가 HTTP 서버를 사용할 때, 기능을 자동으로 체크하고 업데이트를 다운로드 할 수 있다.
Feature.xml: Eclipse PDE의 역할
Eclipse 플러그인 개발 환경(PDE : Plug-in Development Environment)은 feature.xml 파일을 보고 편집할 수 있는 편리한 수단을 제공한다. PDE가 어떤 역할을 하는지 궁금한 사람들을 위해, Listing 4에 feature.xml 파일의 일부를 소개한다. 우선, 이 기능의 기본적인 상세를 설명한다. 고유 ID, 레이블(사용자에게 보여지는 기능 이름), 버전, 공급자 이름 등을 설명한다. 또한 디스크립션, 카피라이트, 라이센스 필드도 있다.
필수 플러그인과 기능들이 고유 ID와 버전과 함께 제공된다. 버전은 Update Manager에게 사용할 수 있는 버전을 제시하는 역할을 하기 때문에 중요하다. 버전 0.0.0은 어떤 버전이나 가능하다는 것을 의미한다.
Listing 4. Feature.xml 파일
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="com.ibm.example.feature.iu"
label="Iu Feature"
version="1.0.0"
provider-name="IBM">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<url>
<update
url="http://talgate.austin.ibm.com/myupdatesite"/>
</url>
<plugin
id="com.ibm.example.iu"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>
|
업데이트 사이트(Update site)
Eclipse 툴을 사용하여 업데이트 사이트를 만드는 방법을 설명하겠다. 업데이트 사이트는 클라이언트가 기존 Sametime 컴포넌트에 대한 업데이트나 완전히 새로운 Sametime 컴포넌트를 받는 장소라고 설명했다. 이 개념을 이해했다면, 업데이트 사이트에 대한 정의를 수정할 수 있다. 업데이트 사이트는 클라이언트가 새로운 기능을 설치하거나, 기존 기능에 대한 업데이트를 수락하는 곳이다.
이제 업데이트 사이트를 구현하는 과정을 설명하도록 하겠다. Eclipse는 업데이트 사이트의 구현 과정을 자동화 하는 마법사를 제공한다. File - New Project를 선택하여 마법사를 시작한다. New Project 마법사에서, Plug-in Development - Update Site Project를 선택하면, New Update Site 마법사가 나타난다. (그림 7)
그림 7. New Update Site 마법사
그림 7을 보면 알겠지만, 새로운 업데이트 사이트의 위치를 HTTP 서버가 되도록 설정했다. HTTP 서버 위치의 경우, HTTP_DOC_ROOT\myupdatesite 포맷을 사용하는데, 여기에서 HTTP_DOC_ROOT는 HTTP 서버용 문서 루트이다. Use default location 옵션을 선택하지 않았기 때문에 디폴트 위치도 사용하지 않을 것이다. 우리가 제공하는 기능 정보를 나타내는 웹 페이지 리스팅을 만들 것이라는 것도 지정했다.
Site.xml
site.xml 파일은 업데이트 사이트에서 사용할 수 있는 기능 목록을 제공한다. site.xml 파일을 열고, New Category 버튼을 클릭하여 카테고리를 추가한다.
새로운 카테고리를 추가했다면, Update Site Map 페이지는 그림 8과 같이 된다. 새롭게 생성된 Category에 대한 Category Properties가 Update Site Map 페이지의 우측 페인(pane)에 나타난다.
그림 8. 사이트 맵에 추가된 새로운 카테고리
이 카테고리의 이름과 레이블을 DeveloperWorks Sample로 한다. 이름은 이 카테고리의 고유 이름이고, 레이블은 카테고리 사용자에게 제시되는 이름이다. 이해하기 쉽도록, "This feature is a sample feature to demonstrate the functionality of an update site." 문장을 추가했다.
그런 다음, 앞서 만들었던 기능을 DeveloperWorks Sample Category에 추가한다. DeveloperWorks Sample 카테고리를 선택한 다음, Add Feature 버튼을 클릭한다. Feature Selection 다이얼로그 박스에서(그림 9), com.ibm.example.feature.iu를 선택한 다음, OK를 클릭한다.
그림 9. Feature Selection 다이얼로그 박스
사이트 맵이 설정되었다면, 플러그인과 기능을 구현할 수 있다. Build All 버튼을 누르면, com.ibm.example.feature.iu 기능과 이것의 필수 플러그인이 구현된다.
Lotus Sametime Connect V7.5 업데이트
업데이트 사이트가 구현되었다면, Sametime 클라이언트에서 기능을 다운로드 할 수 있다. Lotus Sametime V7.5 Connect를 실행한다. Sametime 클라이언트에서, File - Manage Updates - Download 플러그인을 선택하면, Install/Update 마법사가 열린다. (그림 10)
그림 10. Install/Update 마법사
"Search for new features to install" 옵션을 선택하고, Next를 클릭한다. 다음 마법사 패널(panel)에서, New Remote Site 버튼을 클릭한다. Edit Remote Site 다이얼로그 박스에서(그림 11), 업데이트 사이트의 URL을 입력한다.
그림 11. Edit Remote Site 다이얼로그 박스
OK를 클릭하여, 새롭게 생성된 업데이트 사이트를, Sametime 클라이언트가 업데이트를 체크하는 업데이트 사이트 리스트에 추가하고, Finish를 클릭한다. Updates 창이 나타난다. Developer Works Example Site 옵션을 선택하여 Developer Works Example Site에서 사용할 수 있는 모든 기능들을 설치한 다음 Next를 클릭한다. (기능의 하위 세트만 선택할 수도 있다.) License를 수락하고 Next를 클릭한다.
그 다음 창에서, Finish를 클릭하여 기능을 설치한다. 기능의 설치 여부를 묻는다면 Install 버튼을 클릭한다. 워크벤치를 재시작 할 것인지 여부를 묻는 다이얼로그 박스가 나타난다. (그림 12) Yes를 클릭하면 워크벤치가 재시작 된다.
그림 12. 재시작 프롬프트 박스
재시작 후에, 그림 13에서 보이는 것 같은, 새로운 액션 바가 나타난다.
그림 13. 새로운 기능이 추가된 액션 바
기존 기능 업데이트하기
기존 기능에는 버그 픽스와 업데이트가 늘 있기 마련이다. 업데이트 사이트로 지정했던 feature.xml 파일을 보자.
<url>
<update url="http://updatesite.mycompany.com/myupdatesite/"/>
</url>
위 URL은 Sametime 클라이언트가 기존 기능에 대한 업데이트 부분을 보는 곳이다. 클라이언트가 업데이트를 자동으로 체크할 수 있도록 설정할 수 있다. 이렇게 하려면, File - Preferences를 선택한다. Preferences 다이얼로그 박스에서, 왼쪽 페인에 있는 Install/Update - Automatic Updates를 선택한다. Automatic Updates를 설정하여, 플랫폼이 재시작 할 때 마다, 업데이트를 체크할 수 있도록 한다. (그림 14)
그림 14. Preferences 다이얼로그 박스-Automatic Updates
기존 기능이 업데이트 되면, 자동으로 체크되도록 Sametime 클라이언트가 설정되었기 때문에, 그림 15와 같은 다이얼로그 박스가 뜨게 된다.
그림 15. 새로운 업데이트
플러그인 업데이트
플러그인 용 툴팁을 "Kulvir hates gyros."에서 "Kulvir loves gyros." 로 수정하면서, 기능 업데이트 방법을 설명하도록 하겠다. 우선, Listing 5처럼, com.ibm.example.iu의 plugin.xml에 있는 툴팁을 업데이트 한다.
Listing 5. 툴팁 수정
<action
class="com.ibm.example.iu.ClickHandler"
enablesFor="0"
icon="icon/kulvir.gif"
id="com.ibm.example.iu.ClickHandler"
label="Buddylist icon"
style="push"
toolbarPath="buddylist/additions"
tooltip="Kulvir hates gyros."/>
|
Bundle 버전의 값을 수정하여, MANIFEST.MF 파일 버전을 1.0.0에서 1.1.0으로 바꾼다.
Bundle-Version: 1.1.0
클라이언트는 버전을 보면서 업데이트를 사용할 수 있는지 여부를 판단하기 때문에 버전 수정은 중요하다. 모든 com.ibm.example.iu 플러그인 파일들을 저장한 후 닫는다.
feature.xml 파일을 열고, Overview 탭을 선택한다. Versions 버튼을 클릭한다. Feature Versions 다이얼로그 박스에서, "Copy versions from plug-in and fragment manifests" 옵션을 선택한다. (그림 16)
그림 16. Feature Versions 다이얼로그 박스
이 기능은 com.ibm.examle.iu 버전 1.1.0을 참조한다. feature.xml 파일의 버전을 1.1.0으로 업데이트 한다. (Listing 6)
Listing 6. 버전 수정
<feature
id="com.ibm.example.feature.iu"
label="Iu Feature"
version="1.1.0"
provider-name="IBM">
|
모든 파일을 저장한 후 닫는다.
Update Site Map 페이지에서 site.xml 파일을 연다. Build All 버튼을 클릭하여, 업데이트 된 플러그인과 이에 상응하는 기능을 구현하고, 이를 업데이트 사이트에 저장한다.
주: 이 경우, 개발 환경과 업데이트 사이트는 같은 머신에 있다. 하지만, 실행 환경에서는, 서버와 개발 머신은 분리되어 있다. 따라서, 새롭게 구현된 업데이트 사이트를 개발 머신에서 실행 서버로 옮겨야 한다.
Sametime 클라이언트 재시작 시, Sametime 클라이언트가 업데이트를 자동으로 체크하도록 수정했다면, 새로운 기능이 탐지 및 설치된다. 툴팁이 "Kulvir hates gyros."에서 "Kulvir loves gyros."로 변경되었다. (그림 17)
그림 17. 업데이트
맺음말
엔터프라이즈 환경에서는 사람들마다 기술 역량이 다양하기 때문에, 사용자가 업데이트를 직접 수행하고 관리하는 방법을 알고 있을 것이라고 단정지을 수 없다. 이러한 부분이 Sametime 개발자들을 괴롭히는 문제가 된다. 다행히도, Lotus Sametime Connect의 Update Manager는 새로운 기능을 수락하고, 기능을 업데이트하는 과정을 보다 사용자 친화적으로 바꾸었다. 이 글에서, 새로운 Sametime 플러그인들을 업데이트 사이트에 전개하는 방법을 배웠다. 본문에서는 업데이트 사이트, 플러그인 개발 환경(PDE), Sametime 클라이언트는 모두 같은 머신에 존재하는 것으로 간주했지만, 실제로는, 개별 머신들에 존재한다. 여러분이 만든 업데이트 사이트는 HTTP 서버를 실행하는 다른 머신으로 복사될 수 있고, 여러 클라이언트들이 업데이트를 위해 HTTP 서버에 액세스 할 수 있다.
업데이트 사이트에 대한 대안으로, Sametime 기능들을 프로비저닝 애드온(provisioning add-on)으로 전개할 수 있다. 프로비저닝 애드온의 장점은 업데이트할 때 사용자가 개입할 필요가 없다는 점이다. 우리 예제에서는, 사용자가 업데이트 사이트의 위치를 입력해야 하고, 자동 업데이트 스케줄을 조정해야 했다. 프로비저닝 애드온은 Push Update(Pull Update)와 Scheduled Update를 사용한다. Push Update는 사용자의 개입 없이 관리자에 의해 업데이트가 수행된다. Scheduled Update는 사용량이 적은 시간대에 업데이트를 수행한다. 다음 글에서는, 프로비저닝 애드온을 사용하는 방법을 설명하도록 하겠다.
기사의 원문보기
참고자료 교육
제품 및 기술 얻기
토론
필자소개  | |  | Kulvir Singh Bhogal은 IBM Software Services for WebSphere 컨설턴트이며, J2EE 솔루션을 구현하고 있다. (kbhogal@us.ibm.com) |
 | |  | Mark Talbot은 Industry Solutions 팀의 개발자이다. (talbotm@us.ibm.com) |
기사에 대한 평가
|