 |  |
|
난이도 : 중급 Chris Aniszczyk, Software Engineer, IBM Benjamin Muskalla, Software Engineer, Innoopract Informationssysteme GmbH
2007 년 12 월 11 일 Asynchronous JavaScript + XML (Ajax)과 Web 2.0의 개념은 웹 기반 애플리케이션에 활력을 더해주는 방식으로서 개발 커뮤니티를 통해 퍼져나가고 있습니다. Rich Ajax Platform (RAP)은 Eclipse 개발 모델을 사용함으로써 Ajax 실행 웹 애플리케이션을 구현하는 방식입니다. 이 글에서는, RAP의 개념과 RAP 개발 환경을 설정하는 방법과 데모를 설명합니다. 쉽게 이해할 수 있는 예제도 제공합니다.
RAP 프로젝트는 Eclipse 개발 모델을 사용함으로써 Rich Internet Application을 구현하는 것이다. 그렇다면 "Eclipse 개발 모델"이란 것은 정확히 무엇인가? RAP는 자바™ 라이브러리와 Eclipse API를 사용하여 브라우저 기반의 Ajax 애플리케이션을 구현할 수 있도록 한다. SWT, JFace, Eclipse 워크벤치의 웹 실행 구현을 제공함으로써 이를 수행한다. 이 글에서는 몇 가지 간단한 예제로 RAP를 소개하고자 한다.
두 단계 설정
RAP 설정은 매우 간단하다. 두 단계만 거치면 된다: RAP를 다운로드 하고, 이것을 사용하도록 Eclipse를 설정하면 된다.
1 단계: RAP 다운로드
Eclipse.org에서 RAP를 다운로드 한다. 최신의 안정 버전을 다운로드 하도록 한다. 이 글에서는 1.0 릴리스를 사용했다. RAP 타겟 플랫폼을 포함하고 있는 압축 파일을 다운로드 하면, 이것을 여러분이 선택한 디렉토리에 압축을 푼다. (그림 1) 이 디렉토리는 다음 단계에서 타겟 플랫폼을 설정할 때 사용할 것이므로 중요하다.
그림 1. RAP 타겟
2 단계: 타겟 플랫폼 설정하기
Eclipse Plug-in Development Environment (PDE)는 타겟 플랫폼의 개념을 사용한다. 타겟 플랫폼은 여러분이 개발하고자 하는 것을 나타내는(목표로 삼고 있는) 플러그인 세트들로 구성되어 있다. 다시 말해서, 여러분이 현재 개발하고 있는 플러그인은 현재의 실행 인스턴스에서 실행될 것이다. 타겟 플랫폼의 장점은 변경될 수 있다는 점이다. 예를 들어, 타겟 플랫폼이 Eclipse V3.2 또는 또 다른 제품 런타임이 되도록 설정할 수 있다. (이것 때문에 여러분이 개발하고 있는 것과 상관 없이 최신 Eclipse를 사용할 수 있다.)
이 경우, RAP 플랫폼을 정해야 한다. 바로 이것이 우리가 개발할 대상이 되기 때문이다. 이를 위해, 타겟 플랫폼 프레퍼런스를 1 단계에서 RAP 플러그인의 압축을 풀었던 디렉토리로 설정한다. (Window >
Preferences... > Plug-in Development > Target Platform) (그림 2)
그림 2. RAP를 타겟 플랫폼으로서 설정하기
이제 타겟 플랫폼을 설정했다면, RAP 애플리케이션을 개발할 수 있다. 코드를 보기 전에, 간단한 데모를 보고 RAP 기반 애플리케이션을 시작할 때 RAP가 어떤 일을 하는지에 대해 알아보자.
 |
RAP 대 Google Web Toolkit
Google Web Toolkit (GWT)과 RAP는 자바를 사용하여 Rich Internet Application을 코딩 한다는 점에서 유사하다. 큰 차이점은 GWT가 클라이언트에서 실행되는 반면, RAP는 서버에서 실행된다는 점이다. RAP가 서버에서 실행되기 때문에, 완전한 자바 API에 액세스 할 수 있고, OSGi를 통해 유명한 Eclipse 플러그인 모델을 사용할 수 있는 것이다. 이것에 대해 생각할 수 있는 또 다른 방식은 Eclipse 용어에 있다. GWT는 독립 SWT 애플리케이션(단순한 위젯 툴킷)과 같은 것이지만, RAP는 웹 애플리케이션에 RCP 스타일의 방식을 적용한다. |
|
데모
RAP를 사용하기 전에, 데모를 보도록 하자. RAP와 인터랙팅 하려면, RAP를 시작하는 시작 설정을 만들어야 한다. RAP 다이얼로그를 열고(Run > Open Run Dialog...) 새로운 OSGi 프레임웍 시작 설정을 만든다. 이것이 수행되면, 이러한 VM 인자들이 설정되었는지를 확인해야 한다: -Dorg.osgi.service.http.port=8000
-Dosgi.noShutdown=true (그림 3). 이러한 인자들로 인해 RAP가 포트 8000에서 시작할 수 있으며, 시작된 후에 Eclipse가 갑자기 중지되는 것을 방지한다.
그림 3. RAP 시작 설정
마지막으로, 브라우저를 시작하고
http://localhost:8000/rap?startup=controls로 가서 컨트롤 데모를 본다. (그림 4) 이 데모는 SWT 예제의 유명한 ControlExample을 기반으로 한다.
그림 4. RAP 컨트롤 데모
예제 애플리케이션
PDE에서 제공된 Rich Client Platform (RCP) 템플릿을 기반으로 하는 두 가지 예제를 보도록 하자.
Hello World 예제
전통적인 프로그래밍 예제라면 단연 Hello World 예제이다. 간단한 RAP 애플리케이션을 실행하는 것부터 시작하겠다.
그림 5. Hello World, RAP Edition
RAP 버전과 RCP 버전의 주요 차이점은 플러그인 의존성과 애플리케이션 엔트리 포인트이다. 플러그인 명세를 보면 (Listing 1), 우리가 다른 의존성을 갖고 있음을 알 수 있다.
Listing 1. RAP Hello World 의존성 (MANIFEST.MF)
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Helloworld Plug-in
Bundle-SymbolicName: rap.helloworld; singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: rap.helloworld.Activator
Require-Bundle: org.eclipse.rap.ui
Eclipse-LazyStart: true
|
org.eclipse.rap.ui에 대한 의존성에 주목하라. 이는 RCP 베이스에서 온 표준 org.eclipse.ui 플러그인과 같은 RAP 플러그인이다. OSGi와 Import-Package 헤더에 대해 잘 알고 있다면, 특정 플러그인에 의존할 필요가 없다. 다만, 여러분이 필요로 하는 패키지에만 의존하면 된다. 이것은 RAP와 RCP로 작동하는 방식으로 코드를 구축할 수 있기 때문에 중요하다. 예를 들어, RAP(Listing 2)와 RCP(Listing 3)에서 워크벤치 어드바이저용 코드를 본다면, 비슷한 코드와 반입된 패키지들이라는 것을 알 수 있다.
Listing 2. RCP 워크벤치 어드바이저
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(400, 300));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setTitle("Hello RCP");
}
}
|
Listing 3. RAP 워크벤치 어드바이저
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(400, 300));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setTitle("Hello RAP");
}
}
|
RAP와 RCP 애플리케이션의 다른 주요한 차이점은 엔트리 포인트이다.(자바 언어의 main(String[] args) 메소드와 비슷하다.) RCP에는 org.eclipse.core.runtime.applications
확장 포인트가 있는데, 여기에서 IApplication을 정의한다. (Eclipse V3.3 이전 버전에서는 IPlatformRunnable로 알려져 있다.) 이에 해당하는 RAP는 org.eclipse.rap.ui.entrypoint 확장 포인트인데, IEntryPoint를 정의한다. RCP 콘텍스트(Listing 4) 대 RAP 콘텍스트(Listing 5)에서 전형적인 엔트리 포인트 코드를 보면, 유사점을 발견할 수 있다. 두 경우 모두, 디스플레이와 워크벤치를 만들어서 워크벤치 어드바이저를 실행한다.
Listing 4. RCP 애플리케이션 엔트리 포인트 (org.eclipse.core.runtime.applications)
public class Application implements IApplication {
public Object start(IApplicationContext context) throws Exception {
Display display = PlatformUI.createDisplay();
try {
int returnCode = PlatformUI.createAndRunWorkbench(display,
new ApplicationWorkbenchAdvisor());
if (returnCode == PlatformUI.RETURN_RESTART)
return IApplication.EXIT_RESTART;
else
return IApplication.EXIT_OK;
} finally {
display.dispose();
}
}
public void stop() {
final IWorkbench workbench = PlatformUI.getWorkbench();
if (workbench == null)
return;
final Display display = workbench.getDisplay();
display.syncExec(new Runnable() {
public void run() {
if (!display.isDisposed())
workbench.close();
}
});
}
|
Listing 5. RAP 애플리케이션 엔트리 포인트 (org.eclipse.rap.ui.entrypoint)
public class Application implements IEntryPoint {
public Display createUI() {
Display display = PlatformUI.createDisplay();
PlatformUI.createAndRunWorkbench( display, new ApplicationWorkbenchAdvisor() );
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
return display;
}
}
|
RCP 메일 예제
유명한 RCP
Mail 예제(그림 6)는 약간의 수정을 통해 RAP 환경에서 실행될 수 있다. (그림 7) 이 예제는 뷰, 퍼스펙티브, 에디터 같은 워크벤치 개념들이 RAP 안에서 사용될 수 있다는 힌트를 준다. (표 1) 메일 예제와 이전 예제에 대한 소스 코드를 사용하기 바란다.
표 1. RAP 대 RCP
| RAP | RCP |
|---|
| OSGi (서버 측) | OSGi | | Standard Widget Toolkit (SWT) | RAP Widget Toolkit (RWT) | | JFace | JFace | | Workbench | Web Workbench |
그림 6. RCP Mail 예제
그림 7. RAP Mail 예제
맺음말
이 글에서는, 간단한 예제와 데모를 통해 RAP를 소개했다. RAP로는 기존 스킬을 재사용하고 Rich Internet Application을 만들 수 있다. RAP는 또한 데스크탑(RCP)와 브라우저(RAP)를 통해 재사용 될 수 있는 방식으로 코드를 구성할 수 있다. 중요한 것은, RAP가 Eclipse를 브라우저와 Web 2.0 세계로 데려왔다는 것이다.
다운로드 하십시오 | 설명 | 이름 | 크기 | 다운로드 방식 |
|---|
| 샘플 코드 | os-eclipse-richajax.zip | 52KB | HTTP |
|---|
참고자료 교육
제품 및 기술 얻기
토론
필자소개  | 
|  | Chris Aniszczyk는 IBM Lotus 팀에서 OSGi 관련 개발 분야의 소프트웨어 에지니어이다. 오픈 소스에 대한 강한 열정을 지니고 있으며 Gentoo Linux로 작업하고 있다. 몇몇 Eclipse 프로젝트(PDE, ECF, EMFT)의 커미터로서도 활약하고 있다. 언제라도 오픈 소스와 Eclipse에 대해 이야기할 준비가 되어 있다. |
 | 
|  | Benjamin Muskalla는 Innoopract Informationssysteme(Karlsruhe)의 소프트웨어 개발자 겸 컨설턴트이다. Rich Ajax Platform (RAP) 프로젝트의 커미터이며, 워크벤치 구현을 담당하고 있다. Eclipse Platform의 적극적인 기여자로도 활동하고 있다. |
기사에 대한 평가
 |
| 이 문서 북마킹 하기
|
|  |