박용우

이클립스는 앞으로 다가올 대변혁의 시대를 준비하고 있다. 지금까지 진행해왔고, 앞으로 진행할 이클립스 프로젝트들은 엔터프라이즈 개발, 임베디드 및 모바일 개발, 리치 클라이언트 플랫폼, 애플리케이션 프레임워크, 개발 언어 IDE 등으로 세분화되고 있다. 그러나 우리는 과거의 이클립스 IDE만을 생각하며 마냥 시간을 보내고 있는 것 같다. 필자 역시 이번 기고를 진행하면서 까맣게 잊고 있던 무언가를 다시금 떠올릴 만한 계기를 마련한 것 같다. 지금부터 RCP와 함께 새로운 각오를 다져보자.



1990년대 중반부터 두드러진 인터넷과 웹 브라우저의 보급으로 현대인들의 생활 패턴이 완전히 달라졌다. 이제는 모든 생활이 인터넷에서 이뤄질 수 있다고 해도 과언이 아닐 것이다. 그러나 최초의 웹 브라우저인 넷스케이프와 마이크로소프트의 인터넷 익스플로러가 펼친 웹 브라우저 전쟁에서 인터넷 익스플로러가 승리한 이후부터는, 많은 웹 기반 개발자들과 사용자들은 더 이상의 새로운 웹 기술의 발전을 경험하지 못했고, 점점 더 웹의 한계를 느끼기 시작했다. 그나마 리눅스나 파이어폭스와 같은 도전자들이 존재하고 있어 마이크로소프트가 장악하다시피 한 웹 환경에서 다소나마 발전이 이뤄지고 있다고 할 수 있다.



리치 클라이언트의 귀환

웹브라우저를 필두로 하여 웹 페이지, 웹 서버, CGI, 웹 애플리케이션으로 이어지는 씬(thin) 클라이언트가 클라이언트 PC의 기본 플랫폼이 되었고, 많은 유지보수(특히 버그 수정과 버전 갱신) 문제와 무거운 동작성이라는 약점을 안고 있는 리치 클라이언트가 점차 사라지게 되었다.

21세기로 넘어오면서 이처럼 많은 시스템들이 웹으로 이동했고, 웹은 사용자가 처음 익히기에 쉽고 빠르며 이식도 편리한 환경을 제공했다. 그러나 사용자들이 모든 일을 웹 브라우저를 통해 수행하려다 보니, 빈약한 사용자 체험(user experience), 웹 엔트로피의 증가, 다양한 플랫폼 및 다중 웹 브라우저에 대한 지원 부족 등의 문제들이 하나둘 나타나기 시작했다. HTML의 단순한 사용자 인터페이스가 주는 제약을 뛰어넘기 위해 DHTML, 자바스크립트, 액티브X 컨트롤, 플래시가 범람하게 되었고, 이는 결국 웹 브라우저로 대표되는 씬 클라이언트가 다시금 무거워지는 계기로 작용했다. 이러한 혼란의 시대가 계속되자 어디론가 사라졌던 리치 클라이언트가 다시 귀환하게 되었다.

플래시 는 리치 클라이언트의 부활을 알리는 첫 신호탄이었다. 이는 기존의 웹에서 볼 수 없었던 풍부한 사용자 체험(user experience)을 제공했고 나아가 프로그래밍이 가능한 플렉스로 발전했다. 그러나 플렉스가 리치 인터넷 애플리케이션(Rich Internet Application, RIA)이라고 스스로 말하고 있듯이, 웹 브라우저 내에서 실행되는 특성 탓에 웹이라는 태생적인 한계는 벗어나지 못하고 있는 것 같다.

또한 웹2.0을 구현할 기술의 하나로 주목받고 있는 AJAX(Asynchronous JavaScript and XML) 역시 기존의 웹과 HTML이 지닌 웹 엔트로피 과다 생산의 문제점을 보완하기 위해 생겨난 하나의 웹 기술에 불과하다. 이러한 상황에서 이클립스 리치 클라이언트 플랫폼(Rich Client Platform, RCP)은 신선한 충격으로 다가왔다. 다중 크로스 플랫폼 환경에서 성공적으로 상호작용하는 비즈니스 애플리케이션 생성에 필요한 모든 요구사항들을 충분히 만족시키고 있다고 생각한다. 물론, 웹 애플리케이션은 여전히 큰 장점을 갖추고 있고 AJAX나 웹2.0 등의 기술과 함께 진일보하고 있다. 동시에 리치 클라이언트 애플리케이션은 일부 애플리케이션에 훨씬 더 부합한다. 그 예로, 은행 창구(Bank Teller) 애플리케이션이나 콜센터(Call Center) 애플리케이션 등을 꼽을 수 있다. 이 경우의 애플리케이션들은 일반적으로 다음과 같은 특징을 지닌다.

- 대부분 수 백, 수 천명의 사용자들을 타깃으로 한 내부 인트라넷 애플리케이션이다.
- 폰트, 컬러, 위젯 등 UI에 대한 엄격한 룩앤필 요구사항이 적용된다.
- 파워유저가 사용하는 것이므로 단축키를 사용한 빠른 반응을 필요로 한다.
- 매우 큰 데이터 세트를 가지고 있고 스크린에 많은 정보를 디스플레이 한다. 클라이언트 측에 큰 세션 데이터를 관리하여 퍼포먼스를 높인다.
- 데스크탑 및 다른 데스크탑 애플리케이션과 통합한다.
- 일반적으로 워크플로우 유형 또는 협업 유형의 애플리케이션이고 오프라인에서 작업할 수 있는 기능과 태스크 변환 기능이 매우 중요하다.

이 세상에서 인간이 만든 그 어떤 것도 완벽할 수는 없다. 따라서 지금부터는 리치 클라이언트와 씬 클라이언트가 서로의 역할을 명확히 구분하고, 서로를 존중하며 공존해야 할 것이다.



리치 클라이언트 플랫폼

자바를 잘 알지 못하는 주변의 친구들이나 혹은 함께 작업하는 이들에게 이클립스 IDE 프로그램을 보여주고, 그것이 어떤 언어로 개발되었다고 생각하는 지를 물어보길 바란다. 아마 대부분의 사람들은 VB(비주얼 베이직), C++, 혹은 C# 등의 언어로 개발되었다고 답할 것이다. 이들에게 이클립스는 자바로 개발된 애플리케이션임을 알려주면 대다수가 무척 놀랄 것이다.

이 는 자바를 잘 모르는 이들에게만 해당되는 반응은 아니다. 이클립스가 제공하는 리치 클라이언트 플랫폼을 써서 VB, C++, C#, 델파이 등을 이용해 개발한 것과 동일한 윈도우 프로그램을 개발할 수 있고, 더군다나 그 윈도우 프로그램을 윈도우, 리눅스, 맥 OSX 등에서 아무런 변경 없이 실행할 수 있다고 말한다면 자바를 충분히 알고 있는 독자들도 별반 다르지 않은 반응을 보일 것이다.

● 이클립스 RCP

물론 이클립스가 처음부터 그랬던 것은 아니다. 이클립스는 2001년 11월 7일 공식적으로 오픈 프로젝트가 된 후, 2002년 6월 처음으로 2.0 버전을 릴리즈했다. 가장 최근에는 2005년 11월에 3.2 M3 버전이 릴리즈되었다 (http://www.eclipse.org/ community/news/whatsnewhistory.html). 지난 몇 년 동안 이클립스 프로젝트는 극적으로 성장했고, 그 결과 강력한 개발 환경으로 성숙했다. 대다수의 독자들은 이클립스를 단순한 통합 개발 환경(IDE)으로 여길지 모르지만, 이클립스 3.0 버전 이후부터는 더 이상 단순한 IDE가 아니라 소프트웨어 라이프사이클 전반에 걸친 개발 플랫폼으로 자리매김하고 있다.

또한 이클립스 3.0에 와서는 비로소 이클립스 UI의 근간이 되는 핵심 기능들을 비IDE 애플리케이션에서도 쉽게 사용할 수 있도록 리팩토링 한 리치 클라이언트 플랫폼이라는 개념도 소개했다. 개발자들은 비즈니스 애플리케이션을 개발할 때 이클립스 플러그인 아키텍처에 기반해 이클립스 RCP가 제공하는 많은 고급 기능들(플랫폼 독립적인 네이티브 GUI 컴포넌트와 네이티브 룩앤필, 풍부한 사용자 인터페이스, 헬프 시스템 등)을 사용할 수 있게 되었다.

이처럼 많은 이클립스의 기능들은 이클립스 RCP라는 이름으로 비즈니스 애플리케이션 개발에 필요한 공통 프레임워크로 사용되었다. 이로써 개발자들은 코어 컴포넌트 셋을 만들기 위해 시간을 낭비하는 대신에, 각자가 만들고자 하는 애플리케이션의 요구사항 분석이나 실제 개발에 더 많은 시간과 정열을 쏟을 수 있게 되었다. 이클립스의 주요 컴포넌트와 이중에서 이클립스 RCP로 패키징된 컴포넌트들의 구성도를 살펴보면 <그림 1>과 같다.


<그림 1> 이클립스 아키텍처와 이클립스 RCP 구성 컴포넌트

이클립스를 구성하는 전체 컴포넌트 중에서 이클립스 RCP의 기본 구성 컴포넌트를 골라 제시하고 있는데, 그 각각을 살펴보면 다음과 같다.

- UI 워크벤치(Workbench) : 에디터(editors), 뷰(views), 퍼스펙티브(perspectives) 등으로 구성된 UI 워크벤치를 제공한다.
- SWT(Standard Widget Toolkit) : SWT는 운영체제의 네이티브 윈도우 환경과 긴밀하게 통합된 다양한 컴포넌트와 플랫폼 독립적인 API를 제공한다. SWT는 자바 개발자들로 하여금 네이티브 데스크탑 애플리케이션과 동일한 품질의 솔루션을 개발할 수 있게 해준다.
- JFace : JFace는 SWT를 이용해 사용자 인터페이스를 개발할 때 해야 하는 많은 공통 작업들을 간편화 해주는 컴포넌트와 헬퍼 유틸리티 셋을 제공한다. 데이터 뷰, 위자드, 다이얼로그 컴포넌트, 텍스트 관리, 이미지 및 폰트 컴포넌트 등을 제공하기 위해 SWT를 확장하는 많은 유틸리티 클래스들을 포함하고 있다.
- 플랫폼 런타임 : 플러그인과 JIT 레이지 로딩(just-in-time lazy loading) 및 초기화 간에 확장 포인트(extension-point) 모델 기반의 느슨한 결합을 정의하고 있다.
- OSGi(Open Services Gateway Initiative) : 플러그인 라이프사이클 관리 등을 위한 프레임워크이다. 이클립스에서의 플러그인 발견이나 애플리케이션의 재시작 없이 플러그인을 로딩 및 언로딩 하는 동작이 이에 해당된다.



리치 클라이언트 애플리케이션

지금부터는 이클립스 RCP를 써서 개발한 대표적인 리치 클라이언트 애플리케이션을 소개한다. 데모를 다운로드 하기 위한 사이트 주소는 다음과 같다.

http://udig.refractions.net/confluence/display/UDIG/Home

이 사이트에서 데모를 다운로드 해 실행하면, 애플리케이션에서 제공하는 사용자 인터페이스가 이클립스와 별반 다르지 않음을 알 수 있다. <화면 1>에 나타난 모습과 여러분이 현재 사용하고 있는 이클립스를 비교해보길 바란다.


<화면 1> 이클립스 RCP를 이용한 리치 클라이언트 애플리케이션(uDig)

상 단의 메뉴바와 툴바, 왼쪽의 프로젝트와 레이어 탐색기, 컨텐츠 편집기, 그리고 하단의 몇 개 탭으로 구성된 메시지 또는 상태 창 등이 이클립스의 UI와 무척 흡사한 것을 알 수 있다. 게다가 ‘Window’ 및 ‘Help’ 메뉴는 이클립스와 완전히 동일하다. <화면 1>에서 보여주고 있는 uDig(User-friendly Desktop Internet GIS) 프로젝트는 GeoSpatial 애플리케이션이자, 개발자들이 새롭게 혹은 상속해서 애플리케이션을 생성할 수 있는 플랫폼이다. uDig는 인터넷에서 인식할 수 있는 GIS(Geographic Information System)의 핵심 엘리먼트다. uDig와 같은 리치 클라이언트의 특징은 다음과 같다.

- 사용자 편의성을 높인 풍부한 사용자 체험(rich user experience) 제공
- 플랫폼 독립(윈도우, 리눅스, 맥 OSX 등의 운영체제와 무관하게 실행)
- 하부 운영체제의 네이티브 위젯을 사용함으로써 네이티브 룩앤필 제공
- 드래그 & 드롭 기능과 같은 고급 사용자 인터페이스 제공
- 통합된 업데이트 방식 제공
- 확장성 제공



이클립스 플러그인 아키텍처

이클립스의 전신이 IBM의 비주얼 에이지 포 자바(Visual Age for Java)였기 때문에, 이클립스는 플랫폼을 쉽게 확장할 수 있도록 만들어졌다. <그림 2>는 이클립스 플러그인 아키텍처의 주요 컴포넌트들을 보여주고 있는데, 이클립스 RCP의 핵심은 바로 이클립스 워크벤치, SWT, JFace, 헬프 컴포넌트 등이다.


<그림 2> 이클립스 플러그인 아키텍처

이 클립스 플랫폼 런타임을 구성하는 기본 파일들을 제외하면, 이클립스의 모든 기능들은 플러그인을 사용해 구현된다. 플러그인은 개발자들이 이클립스 환경에 새로운 기능과 동작을 추가하기 위해 사용할 수 있는 기본 빌딩 블록이라고 볼 수 있다. 따라서 이클립스 플랫폼 런타임은 워크벤치 내에서 플러그인의 라이프사이클을 관리하는 책임을 지닌다. 이클립스 RCP를 이용하여 개발한 리치 클라이언트 애플리케이션에서 사용하는 모든 플러그인들은 애플리케이션의 디렉토리 구조 내에 있는 plugin 폴더 내에 존재한다. 리치 클라이언트 애플리케이션의 실행 시에 이클립스 런타임은 모든 사용가능한 플러그인을 찾아내고 전역 플러그인 레지스트리를 생성하기 위해 이 정보를 사용한다.

따라서 이클립스 RCP를 이용하여 리치 클라이언트 애플리케이션을 개발하고자 한다면, 메인 프로그램으로서 이클립스 RCP에서 실행될 수 있는 플러그인을 생성해야 한다. 이클립스는 플러그인 개발을 쉽게 할 수 있도록 플러그인 개발환경(Plug-in Development Environment, PDE)도 제공하고 있다. 이클립스 PDE에는 플러그인 개발 과정을 단순화시켜주는 다양한 위자드(Wizard)와 에디터(Editor)들이 포함되어 있다. 따라서 이클립스 SDK에 기본적으로 내장된 PDE를 사용하면 이클립스 RCP를 이용하는 리치 클라이언트 애플리케이션을 더 쉽고 빠르게 개발할 수 있다. <화면 2>는 이클립스 PDE의 실행 화면이다. 이클립스 RCP나 PDE를 이용해 리치 클라이언트 애플리케이션을 개발하는 방법은 이 글이 의도하는 바가 아니라 여기서는 다루지 않기로 한다.


<화면 2> 이클립스 PDE

이클립스 RCP를 이용한 리치 클라이언트 애플리케이션의 개발에 대해서는 마소가 향후에 별도 지면을 통해 연재해주길 기대한다.



플러그인 vs. 제품

이클립스 RCP를 이용해 리치 클라이언트를 개발하고 배포하는 방법에는 두 가지가 있다. 앞에서 이미 언급했듯이 이클립스 RCP는 플러그인 아키텍처에 기반하고 있다. 따라서 이클립스 RCP를 이용해 개발한 리치 클라이언트 애플리케이션은 기본적으로 이클립스의 플러그인처럼 실행된다. 소프트웨어 라이프사이클을 위한 다양한 툴을 개발해 판매하는 것이 목적이라면 이클립스 내에서 플러그인 형태로 실행되더라도 아무런 문제가 없을 것이다. 그러나 회사에 따라서는 서버를 모니터링 하는 리치 클라이언트(윈도우 프로그램)를 만들어 상용화해야 하거나, 또는 콜센터나 일정관리의 경우처럼 이클립스 없이 실행되는 독립(stand-alone) 애플리케이션의 형태로 배포해야 할 수도 있다. 그럼 이런 경우에는 어떻게 해야 할까?

이런 문제에 대비해 이클립스 RCP를 이용해 개발한 리치 클라이언트 애플리케이션은 플러그인이나 독립 애플리케이션(product) 형태로 만들어져 배포될 수 있도록 하고 있다. 이런 두 가지 형태로 배포되는 대표적인 프로그램으로 Adobe사의 ‘플렉스 빌더’를 꼽을 수 있다. <화면 3>과 <화면 4>에서 차례로 소개되는 실행 화면은 각각 플렉스 빌더를 이클립스 플러그인 형태로 설치해 실행한 경우와 독립(stand-alone) 애플리케이션으로 설치해 실행한 경우이다.


<화면 3> 이클립스 플러그인으로 실행한 플레스 빌더


<화면 4> 독립 애플리케이션으로 실행한 플렉스 빌더

< 화면 3>과 <화면 4>가 보여주고 있는 플렉스 빌더의 실행 화면은 서로 별반 다를 게 없어 보인다. 그도 그럴 것이 두 가지 모두 이클립스 RCP를 이용해 개발되었고, 또한 이클립스 RCP의 런타임 환경에서 실행되기 때문이다. 그렇다면 대체 어떤 차이가 있는 것일까? 그렇다. 바로 플러그인(plug-in)과 제품(product)의 차이인 것이다. 지금까지 필자가 독립 애플리케이션(또는 stand-alone 애플리케이션)이라고 부르던 것을 이클립스 RCP에서는 제품이라고 부르고 있는 것이다. 이는 이클립스 RCP 입장에서 볼 때 이클립스 IDE 내에서 실행되는 플러그인이 아니라, 이클립스 IDE와는 별개로 배포되는 제품이라고 생각했기 때문일 것이다. 결국 이 두 화면이 보여주고 있는 것처럼 플러그인이나 제품의 형태로 실행되더라도 모두가 이클립스 RCP 상에서 실행되므로 그 외관상에는 큰 차이가 없다.

그러나 동작의 측면에서 볼 때 아주 큰 차이점이 있다. 플러그인은 이클립스 IDE 내에서 실행되므로 이클립스 IDE의 모든 기능과 퍼스펙티브를 사용할 수 있는 반면에, 제품 형태로 실행되는 경우에는 이클립스 RCP에서 정의하고 있는 기능만 쓸 수 있을 뿐 이클립스의 IDE적인 기능들은 사용할 수 없다는 점이다. 따라서 전체 화면 구성에서 볼 때 둘 모두가 플렉스 퍼스펙티브를 사용하고 있어 거의 동일하지만, 두 개의 실행화면을 자세히 살펴보면 메뉴, 툴바, 사용 가능한 퍼스펙티브 등의 유무에서 다소 차이가 있음을 알 수 있다.

이렇 듯, 이클립스는 이클립스 RCP를 이용해 개발한 리치 클라이언트 애플리케이션을 독립 실행이 가능한 프로그램 형태로 배포할 수 있는 제품(product)의 개념을 지원한다. 이클립스 RCP를 이용해 생성된 제품은 자신이 필요로 하는 다른 플러그인들을 모두 포함하고, 애플리케이션을 실행하기 위한 네이티브 실행 파일(launcher program)과 환경구성 파일(config files) 등을 생성해 포함한다. 또한 실행 윈도우의 타이틀과 여러 윈도우 및 데스크탑 아이콘, 프로그램 시작 화면(Splash Screen), 프로그램 실행 파일의 이름, 어바웃 다이얼로그 정보 등을 변경할 수 있는데, 이를 브랜딩이라 한다. 이렇게 생성한 제품은 InstallShield, NSIS, 인스톨 팩토리 등과 같은 유틸리티 프로그램을 써서 인스톨 프로그램으로 만들고 배포할 수 있다.



이클립스 SWT와 JFace

이클립스 SWT(Standard Widget Toolkit)는 JFace와 함께 다중 플랫폼에서 네이티브 리치 클라이언트 애플리케이션을 개발하기 위한 이클립스의 대표적인 컴포넌트로 일종의 라이브러리이다. 또한 이는 이클립스 RCP의 풍부한 사용자 경험을 제공하기 위한 핵심 컴포넌트라고 할 수 있다. 비록, SWT와 JFace가 같은 목적을 지녔다고는 하지만, 이 두 가지 기술은 사용자 인터페이스를 생성하는 데 있어서 다음과 같이 다른 철학을 가졌다.

먼저 SWT는 시스템 내부 자원에 대한 풍부한 제어와 액세스가 가능하도록 지원하지만, 개발자가 모든 고급 UI 작업을 해주어야 하므로 사용하기가 복잡하다. 반면에 JFace는 모든 GUI 작업을 자동으로 하지만, JFace에서 제공되는 GUI 컴포넌트를 사용해야 하므로 유연성(flexibility)이 부족하다고 할 수 있다.

즉, 이클립스 SWT에서는 GUI 프로그래밍을 위한 풍부한 컴포넌트들을 제공하고, JFace에서는 SWT에서 제공하는 기본 컴포넌트들을 조합해 복잡한 형태의 GUI(즉 마법사 형태의 컴포넌트)를 제공하므로, 두 가지 기술을 적절히 조합해 사용하는 것이 바람직하다(이클립스 SWT에 대한 보다 자세한 내용은 필자가 2006년 9월부터 12월까지 마소에 기고한 이클립스 SWT 관련 연재를 참고하길 바란다).

이클립스 SWT를 이용한 GUI 개발

모든 운영체제는 기본적인 사용자 인터페이스를 개발할 수 있는 수많은 그래픽 컴포넌트를 제공한다. 이러한 그래픽 컴포넌트에는 버튼, 윈도우, 메뉴를 비롯해 모니터 스크린에 나타나는 다른 모든 그래픽 컴포넌트들까지 포함된다.

SWT 의 목적은 자바 프로그래머가 이러한 컴포넌트를 직접 액세스할 수 있게 함으로써 그러한 컴포넌트들을 원하는 대로 구성 및 위치시키고, 이를 통해 GUI 화면을 개발할 수 있도록 하는 것이다. 이클립스 SWT를 이용해 애플리케이션에 SWT 버튼 객체를 사용하는 프로그램을 작성했다면, MS 윈도우 환경에서 실행될 때는 윈도우의 버튼처럼, 매킨토시에서는 매킨토시의 그것처럼 나타난다. 마찬가지로 리눅스나 유닉스 등에서도 그 각각의 버튼처럼 나타나고 동작한다. 이러한 그래픽 컴포넌트와 함께 SWT는 이벤트에 대한 액세스도 제공한다. 이는 사용자가 어떤 버튼을 클릭했고, 어떤 메뉴 아이템이 선택되었는지를 알 수 있게 한다(모든 형태의 사용자 입력 처리 가능). 마지막으로 애플리케이션에서 그래픽스 작업을 해야 하는 경우를 살펴보자. 이 경우에는 SWT가 이미지 생성과 폰트 이용, 그리고 다양한 도형 표현을 위한 방대한 그래픽 툴셋을 제공한다. 이러한 기능은 새로운 그래픽 작업이 가능하도록 할 뿐만 아니라 GUI 내에 언제, 어느 곳에, 어떻게 디스플레이할 지를 제어하도록 지원한다.

이처럼 SWT는 사용자 인터페이스를 생성하는 데 필요한 풍부한 기능들을 제공하지만, 모든 GUI 작업을 개발자가 직접 해야 하므로 프로그램이 길고 복잡해질 수 있다. 이런 까닭에 이클립스는 GUI 개발을 지원하는 복잡한 컴포넌트들을 만들어 JFace라는 이름의 라이브러리로 제공하게 되었다.



이클리스 JFace를 이용한 GUI 개발 단순화

동일한 SWT 코드를 반복 작성하는 수고를 줄여 이를 보다 간편화할 수 있도록 등장한 것이 바로 JFace이다. JFace는 SWT만을 이용해 작업할 때 많은 시간을 소모할 수 있는 다수의 작업들을 간단히 수행할 수 있도록 돕는다. 그러나 JFace가 단순히 SWT를 대체하는 것은 아니다. 대부분의 GUI 프로그램은 SWT와 JFace 두 가지 기능을 적절히 사용해야만 보다 나은 효과를 얻을 수 있다.

JFace의 중요한 예로 이벤트를 꼽을 수 있다. 일반적인 사용자 인터페이스에서는 버튼을 클릭했거나, 키를 눌렀거나, 혹은 메뉴가 선택되는 등의 서로 다른 이벤트를 받을 수 있고, 이 이벤트는 모두 똑같은 기능을 수행해야 한다. 이런 과정을 수행하는 데도 SWT와 JFace 간에는 차이가 있다. 먼저 SWT에서 각 이벤트는 별도로 받아 처리해야 한다. 그러나 JFace는 이 이벤트들을 하나의 객체로 조합해 그 이벤트를 발생시킨 컴포넌트보다 이벤트에 대해 어떤 응답을 할지 자체에 더 많은 관심을 가지도록 해준다. 이런 간단하면서도 강력한 개념 덕분으로 GUI 프로그램에 많은 양의 코드를 작성하지 않더라도 컨텍스트 메뉴, 툴바, 그리고 팔레트 등을 추가할 수 있는 것이다.

JFace 는 이뿐만 아니라 다중 윈도우나 그래픽스를 필요로 하는 방대한 GUI 프로그램을 개발하는 데도 매우 유용하다. SWT 컴포넌트들을 조직하고 컴포넌트들이 사용하는 메모리 할당(allocation)을 도와주는 레지스트리 클래스들도 제공한다. 예를 들면 SWT에서 애플리케이션이 사용할 많은 폰트와 이미지를 생성 및 해제(deallocate)하는 경우가 이에 해당한다. JFace를 이용하면 이런 지루한 작업을 대신하기 위해 빌트인 FontRegistry나 ImageRegistry 객체를 사용할 수 있다.



참고 자료
1. http://udig.refractions.net/confluence/display/UDIG/Home, 이클립스 RCP UDIG 프로젝트
2. http://www.foreflight.com/, 이클립스 RCP ForeFlight 프로젝트
3. http://www.eclipse.org/community/casestudies/RSSfinal.pdf, 이클립스 RCP RSS Solutions 프로젝트
4. http://www.eclipse.org/community/ casestudies/NASAfinal.pdf, 이클립스 RCP Maestro (NASA Space Mission Management)
5. http://www.zdnet.co.kr/builder/dev/java/0,39031622,39139542,00.htm, EJB와 리치 클라이언트 구축
6. http://www.eclipse.org/articles/Article-RCP-1/tutorial1.html, Rich Client Tutorial Part 1
7. http://wiki.eclipse.org/index.php/Rich_Client_Platform, Eclipse Rich Client Platform



제공 : DB포탈사이트 DBguide.net


'Dev > eclipse' 카테고리의 다른 글

이클립스 단축키  (0) 2011.04.30
이클립스 자동 가비지 컬렉션 플러그인  (0) 2011.04.30
이클립스 속도 올리기  (0) 2011.04.29
Boost Eclipse speed performances  (1) 2011.04.29

1. Editing( 편집 )

1-1 커서 이동 / Windows 이동
  • Ctrl + D :  줄 삭제
  • Ctrl + Alt + ↑(위)/↓(아래) : 줄 복사
  • Ctrl + Shift + Enter : 현재 줄에서 새줄 추가
  • Shift + Enter : 다음 줄에 새줄 추가
  • Ctrl + L : 원하는 라인으로 이동
  • Ctrl + →(Right) : 다음 문자로 이동 
  • Ctrl + →(Left) : 이전 문자로 이동
  • F10 : 메뉴창을 활성화
  • Ctrl + F8 : 다음 Perspective로 이동
  • Ctrl + N :  새로운 파일 및 프로젝트 생성
  • Ctrl + Shift + ↓(Down) : Java Editor에서 다음 member로 이동
  • Alt + < : 이전 작업 화면
  • Alt + > : 다음 작업 화면
  • Ctrl + 1 : 컴파일 에러가 발생한 곳에서 Ctrl + 1을 누를 경우 컴파일 에러에 대한 해결책을 제시
1-2 주석
  • Ctrl + Shift + / : 주석 처리 
  • Ctrl + Shift + \ : 주석 풀기
  • Ctrl + / : 라인별로 주석처리

1-3 검색
  • Ctrl + J : 점증적 검색(키 수행 후 원하는 단어 입력하면 이클립스 하단바에서 찍히고 바로 검색 가능
  • Ctrl + K : 다음 찾기
  • Ctrl + Shift + K : 이전 찾기 
  • Ctrl + H : 검색 다이얼로그(메서드, 타입, 패키지 등 검색 가능
1-4 Tab 기능 / 코드어시스트
  • Tab : 들여 쓰기
  • Shift + Tab : 내여 쓰기
  • Ctrl + Space bar : 코드어시스트(키보드 Type3을 쓸 경우에는 왼쪽 Ctrl을 누른 상태에서 오른쪽 Ctrl을 누르고 왼쪽 Ctrl을 뗀 후에(오른쪽  Ctrl은 누른 상태) Space를 눌러 준다.)
1-5 기타
  • Ctrl + Shift + M : 특정 클래스  Import 시키기
  • Ctrl + Shift + O : 자동으로 Import 시키기
  • Ctrl + Shift + F : 코드 자동으로 정리 시키기
  • Ctrl + Shift + G : 특정 메써드나 필드를 Reference하고 있는 곳을 찾는다.
1-6 Information
  • Ctrl + Shift + R : 리소스 찾기
  • Ctrl + O : 레이어로 현재 파일의 Outline 보여줌
  • Ctrl + T : 레이어로 계층 구조 보여짐
  • F3 : 해당 메서드나 클래스가 정의된 곳으로 이동




2. Navigation 

2-1 에디터간의 이동
  • Ctrl + E : 에디터안에서 열린 파일간의 이동(작은 레이어로 뜬다.)
  • Ctrl + Shift + E : 에디터안에서 열린 파일간의 이동
  • Ctrl + F6 : 에디터안에 열린 파일간 이동하는데 F6 누를 때마다 하나씩 순차적으로 넘어감
  • Ctrl + F7  :  다음 View로 이동
  • Ctrl + Shift + F7 +  :  이전 View로 이동
  • Ctrl + F8 : 퍼스펙티브 간 전환
  • F12 : 컴파일 중 에러 등으로 포커스가 다른데로 갔을 때 Editor로 커서 이동

3. Debugging(디버깅)

3-1 디버깅 단축키

  • Ctrl + Shift + B : 현 커서의 위치에 브레이크 포인터 설정/해제
  • F11 : 디버깅 시작
  • F8 :  디버깅 계속
  • F6 : 한줄씩 실행(Step Over)
  • F5 : 한줄씩 실행 하되 함수일 경우 그 함수 내부로 들어감(Step Into)
  • Ctrl + R : 현재 라인까지 실행(Run to Line)

4. Run (컴파일 및 실행)

  • Ctrl + S : 자동으로 컴파일
  • Alt + Shift + X , J : Run Java Application (Alt + Shift + X 그외 여러가지 옵션이 있다.)

출처 : http://calmmass.tistory.com/126

이클립스 속도 올리기 글을 쓰다가.. 번거롭게 휴지통을 누르는게.. 불편해서, 자동으로 이런 기능을 해 주는게 없나 해서.. 구글링을 해 봤더니.. 역시나 있더군요.^ ^;;

플러그인으로 지원합니다.


이 사이트에서 친절하게도 2개의 플러그인을 지원해 줍니다. 둘 중 하나를 마음에 드시는 걸로 설치 하시면 됩니다.

두 프로그램 다 설치 및 사용법은 간단합니다. 둘다 압축을 풀고, 플러그인 폴더에 복사해 넣어 주면 설치가 됩니다. 설치 과정을 거쳐서 설치 하셔도 되고요..
그리고 Activate automatic GC when memory reaches below setup size의 옵션을 켜 주시면, 지정해 둔 사이즈 이상이 되면, 정해놓은 주기대로 garbage collector를 동작하게 됩니다.

아래는 홈페이지를 펌해 왔습니다. 보시고 사용할 플러그인을 고르세요.



Eclipse Status Monitor

The Eclipse Status Memory Monitor Plugin offers the continiously dynamic inspection of the Eclipse IDE's memory consumption and the automatic and forced execution of garbage collection for the Eclipse IDE. The Status Memory Monitor installs itself into the Eclipse status line area and is customizable to the users needs.

The Status Memory Monitor Plugin for the Eclipse Workbench offers:

  • The continiously dynamic inspection of the Eclipse Workbench memory consumption inside the Eclipse status line
  • The automatic and forced execution of garbage collection for Eclipse
  • The visualisation of a setable warn memory indication for Eclipse
  • The individual settup of the Memory Monitors sampling rate
  • To customize it's options and used colors individually
  • Included online help

Screenshots



Compatibility

This Plugin has been tested with Eclipse R3.1 and a Java jdk1.5.0_02 under Win2K/XP.

Download

File Size Date
stmemmonitor_v1.1_R3.1.1_dist.zip

99 KB
2005-07-02


Eclipse Memory Monitor

The Eclipse Memory Monitor is a port of the Kyrsoft JBuilder Memory Monitor OpenTool to the Eclipse Workbench as an Eclipse SWT based Plugin. The JBuilder Memory Monitor version has been around for years and has proven to be a valuable tool there.

The Memory Monitor Plugin for the Eclipse Workbench offers:

  • The continiously dynamic inspection of the Eclipse Workbench memory consumption inside the Eclipse status line
  • The automatic and forced execution of garbage collection for Eclipse
  • The visualisation of a setable warn memory indication for Eclipse
  • The individual settup of the Memory Monitors sampling rate
  • To customize it's options and used colors individually
  • Included online help

Screenshots


Compatibility

This Plugin has been tested with Eclipse R3.1 and a Java jdk1.5.0_02 under Win2K/XP.

Download

File Size Date
swt_memmonitor_v1.6_R3.1.1_dist.zip

144 KB
2005-11-24

출처 : http://gyuha.tistory.com/290

'Dev > eclipse' 카테고리의 다른 글

이클립스 리치 클라이언트 플랫폼(RCP)  (0) 2011.06.09
이클립스 단축키  (0) 2011.04.30
이클립스 속도 올리기  (0) 2011.04.29
Boost Eclipse speed performances  (1) 2011.04.29
Eclipse 정말 좋은 툴입니다. 무료에다가 엄청나게 많은 지원... 느려터졌지만, 포기하기 힘든 툴 같습니다.
이 느린 이클립스를 조금이라도 빠르게 사용하기 위한 팁을 모아 봤습니다.

여기서 나오는 팁은 3.5 기준입니다.


1. 이클립스 옵션 조정

우선 이클립스 폴더안에 있는 eclipse.ini에 다음을 추가 하거나 수정해 줍니다.

-Xverify:none
-XX:+UseParallelGC
-Xms256M
-Xmx512M

-Xverfify :
초기 시동시 verfify체크를 하지 않습니다. 당연히 시동이 빨라 집니다. 플러그인아 features에 문제가 발생 할 수 있습니다. 플러그인아 변경 사항이 있을 경우에는 이걸 키고 시동하시고, 별 문제 없으면 추가해서 사용하세요.
-XX:+UseParallelGC :
Parallel Collector를 사용 하도록 합니다. 패러럴로 모아 준다니.. 빨라지겠죠.. 체감 속도가 올라 갑니다. 다중 프로세서를 사용하시는 분들은 필수.
-Xms256M
이클리스가 시작시 잡는 메모리(256메가 바이트)
-Xmx512M
이클리스가 사용하는 최대 메모리(512메가 바이트). 메모리가 어느 정도 되신다고 생각 하시면, 늘려 주셔도 됩니다.



2. 중간중간 메모리를 정리해 주자


Window > Perference > General에 보면 Show heap status라는 옵션이 있습니다. 이걸 켜 주시면, 화면 오른쪽 하단에 아래와 같은 아이콘이 생깁니다.
사용하다가, 메모리가 많이 올라 갔다 싶거나, 느려졌네 싶을때 마다, 옆에 쓰레기통 아이콘을 눌러 주세요. 메모리가 확 줄어 듭니다. 그러면 좀 더 쾌적하게 작업을 하 실 수 있을 겁니다.

추가로 메모리는 좀 들긴 하지만 자동 가비지 컬랙션 해주는 플러그인을 설치 하셔도 됩니다.




3. 사용하지 않는 검사를 없애 준다.

필요 이상으로 많은 검사를 많이 해서 느려지는 경우도 많습니다. HTML이나 그외 등등의 검사도 거기에 포함되죠, 딱 필요한 검사만 하도록 합니다.
Window > Perferences > Validation에서 자기가 사용하는 옵션을 켜 줍니다. 저같은 경우에는 PHP를 요즘 사용하고 있어서.. PHP만 켜 줬습니다.

그리고, 영어 스펠링 검사입니다. 영어 단어를 잘 모르지만, 느려지는건 못 참아서.. 그냥.. 꺼 줬습니다.
Window > Prereces > General > Editors > Spellings에서 Enable spell checking을 과감하게 꺼 줍니다.



5. 잘 안 쓰는 기능 끄기 및 사용습관 바꾸기.


코딩하는 공간에서 잘 사용하지 않거나, 있는둥 마는둥 하는 기능을 꺼 줍니다.

Automatic folding 끄기
코드 옆에 더하기 표시 나와서, 코드를 펼쳤다.. 닫았다 하는 기능입니다. 눈에도 안 띄고 전 잘 안 쓰는 기능이라서 꺼 버립니다.
Window->Preferences->Java(또는 사용언어)->Editor->Folding 모든 옵션을 해제(disable) 합니다.옵션을 모두 해제(disable)한다.

Automatic Code Insight 끄기
Window->Preferences->Java(또는 해당언어)->Editor->Code Assist 에서 Enable auto activation 항목을 해제(disable)합니다. 자동으로 동작하는 code assist 기능은 꺼지지만, ctrl+space러 여전히 code assist를 사용할 수 있습니다. 손이 좀 불편하면 이클립스가 빨라집니다 -_-;;

사용하지 않는 플러그인 삭제 하기
이클립스를 패키지로 설치 하도 보면, 사용하지 않는 기능도 많이 들어 가게 됩니다. 그리고 이것저것 설치하기도 하고요. 그 중에서 사용하지 않는 플러그인은 삭제해 주세요.

사용하지 않는 프로젝트 닫아주기
현재 작업과 관련없는 프로젝트를 닫아 주세요. 이클립스가 접근하는 파일의 갯수를 줄여 줍니다.

사용하지 않는 파일은 닫아주기
작업하다가 사용하지 않는 창은 닫아주세요. 메모리가 절약됩니다. 이클립스를 종료시 편집하던 문서를 모두 닫고 종료하는건 다음에 이클립스를 띄울때 좀 더 가볍게 띄울 수 있습니다. 그리고 Window->Preferences->General->Editors에서 Close editors automatically를 켜주세요. 그럼 아래 설정된 숫자만큼만 문서가 열립니다. 그 이상의 문서는 자동으로 닫아집니다. 이렇게 사용하면, 무심결에 많이 열린 파일이 적어집니다. 메모리도 절약 되고요.. ^^*

사용하지 않는 플러그인을 start list에서 제외하기
Window > Preferences > General > Startup and Shutdown에서, 불필요한 플러그인을 startup list에서 제외합니다. 이렇게 하면 이클립스 실행시 좀 더 가볍게 실행 할 수 있습니다.



6. 그래도 느리다.


좀 더 처절하게 가 보겠습니다.

이클립스가 설치된 폴더에 바이러스를 검사를 꺼보세요.
백신마다 보면, 예외사항이 있을 겁니다. 거기서 이클립스가 설치 된 폴더를 예외에 넣어 주세요. 백신을 끄고 사용하면 더 좋지만, 그것 까지는 좀 그렇다면, 이 정도만 해 주세요.

작업하는 파일들과 이클립스 프로그램을 작은 파티션을 만들어서 관리해 주세요.
헤더의 움직임을 최소화 해주고 빨라집니다. 하드디스크에서 디스크 조각모음하는것 보다 훨씬 좋습니다.





7. 그래도 느려서 못 해 먹겠다.

마지막으로 그래도 정말 안 되겠다..
어쩔수 없습니다. 호주머니를 여실 수 밖에,
메모리를 늘리고 CPU를 최신으로 올리고, OS를 64bit로 올려 주세요.
위에 껄 뭐 하려고 했나 싶을 정도로 빨라집니다. -_-;;;



Eclipse is an open source community whose projects are focused on building an open development platform
comprised of extensible frameworks, tools and runtimes for building, deploying and managing software across
the lifecycle.

I am using these settings for more than a year now, and the speed gain you can expect is in the range
of 40%. Eclipse is more responsive, start up time is nearly divided by 2! These gains are reproducible
on different machines in the office.

Conditions

  • You must have a dual processor or quad core, (better if you use VMarg1)
  • You must start Eclipse with Java 1.6, note that you can still compile your project with Java 1.5
    (see windows - preferences - java - Installed JRE's)

The tricks is to use the optimization done in JDK 1.6 (VMarg2) and the new agresivity of the Just In Time
compiler (JIT) for VMarg3

Add theses VM arguments to eclipse.ini (file is located in your Eclipse directory)
eclipse.ini

-XX:-UseParallelGC -XX:+AggressiveOpts -XX:-UseConcMarkSweepGC

Some details about what these parameters are doing:

VMarg1 -XX:-UseParallelGC

Use parallel garbage collection for scavenges. (Introduced in 1.4.1) this will create more threads running in parallel, so the second processor will be put in use

VMarg2 -XX:-UseConcMarkSweepGC

Use concurrent mark-sweep collection for the old generation. (Introduced in 1.4.1)

The Eclipse GUI will feel more responsive as memory will be reclaimed without blocking VM executions.

VMarg3 -XX:+AggressiveOpts Turn on point performance compiler optimizations that are expected to be default in upcoming releases. (Introduced in 5.0 update 6.)

 

More about tuning Garbage collector HERE and at the Java HotSpot VM Options page

'Dev > eclipse' 카테고리의 다른 글

이클립스 리치 클라이언트 플랫폼(RCP)  (0) 2011.06.09
이클립스 단축키  (0) 2011.04.30
이클립스 자동 가비지 컬렉션 플러그인  (0) 2011.04.30
이클립스 속도 올리기  (0) 2011.04.29

+ Recent posts