[펌] AJAX Frameworks and Toolkits
- Posted at 2007/05/04 09:57
http://www.action-scripter.com/blog/trackback/591
- 클라이언트 측 아키텍처 레이어
- Remoting abstraction layer: XMLHttpRequest과 IFrame에 대한 핸들링을 은닉
- Proxy: 클라이언트 측 RPC-like 통신을 핸들링
- Widgets and components: 미리 사용가능하게 만들어진 UI 위젯(calendar, button 등) 제공
- JavaScript event handlers: 클라이언트 측 로직 제공
- 클라이언트 측 자바스크립트 라이브러리
- 서버측 기술(Java EE, .Net, PHP, Ruby on Rails 등)은 어떤거라도 상관없다.
- 런타임 동안 로컬 혹은 URL을 통해 접근, 동적 자바스크립트 코드 생성은 없다.
원문
Should be accessible during runtime either locally or through URL
There is no dynamic JavaScript code generation - 하나의 애플리케이션에서 라이브러리 요소들을 조합해서 사용 가능하다. 여러 자원에서 위젯과 자바스크립트 유틸리티를 같이 사용하고 싶어질 때가 생길지 모른다.
- 클라이언트 측 자바스크립트 라이브러리를 사용하는 기술적인 이유
- 원격 비동기 통신은 핸들링 가능하다.
- 브라우저간 비호환성을 핸들링한다. if/else로 코드를 혼란스럽게 하지 않아도 된다.
- 우아하게 등급을 낮출수 있다(graceful degradation). 예를 들어 XMLHttpRequest를 지원하지 않는 브라우저에서는 IFrame을 사용하면 된다.
- AJAX 상에서 페이지 탐색 고리(page navigation hooks)를 제공한다.
> Back and forward buttons
> Bookmarking - 미리 사용가능하게 만들어진 UI 위젯 제공
> Tree, Calendar, Textfield, Button, Split panes, Fisheye 등 - 사용하기 쉬운 DOM 유틸리티 제공, 오리지널 DOM APIs보다 사용이 쉽다.
- 쓸모 있는 자바스크립트 유틸리티를 제공
> Table management, Timer 등 - 에러 핸들링을 추가하기 쉽다.
- 보다 유연한 이벤트 핸들링 작업이 가능하다.
> DOM node based, Function call based, AOP style - Advanced UI features 제공
> Animation
> Drag and drop
> Fade out and Fade in - 일반적으로 객체 지향 프로그래밍 스타일을 권장한다.
- 클라이언트 측 자바스크립트 라이브러리를 사용하는 비즈니스적인 이유
- 시장에서 검증되었다. 일반적으로 자체 개발하는 것보다 품질이 좋다.
- 잘 구축된 개발자/사용자 커뮤니티
> 커뮤니티는 계속해서 기능을 향상시키거나 추가하고 있다.
> 커뮤니티 포럼에서 도움을 쉽게 받을 수 있다. - 사용하기 쉽다.
> 사용하고자 하는 것을 웹 애플리케이션 루트 디렉토리 또는 URL 위치에 설치하기만 하면 된다. - 툴 지원
> IDE에서 조만간 지원 가능하리라 본다.
- 클라이언트 측 자바스크립트 라이브러리
- DOJO Toolkit
> 가장 탁월하고 종합적이다.
> 이쪽 분야에서 리딩하고 있다.
> 메이저급 지원을 받고 있다. (Sun, IBM)
> http://dojotoolkit.com/
> 데모: http://archive.dojotoolkit.org/nightly/demos/widget
- Prototype
> 다른 툴킷 라이브러리에서 이것을 사용하고 있다.
> http://prototype.conio.net/
- Script.aculo.us
> Prototype 기반 위에 구축되었다.
> 비주얼한 효과와 컨트롤에 대해 괜찮은 셑을 보유하고 있다.
> http://script.aculo.us/
> 데모: http://wiki.script.aculo.us/scriptaculous/show/Demos
- Rico
> Prototype 기반 위에 구축되었다.
> Rich AJAX components and effects
> http://openrico.org/
> 데모: http://openrico.org/rico/demos.page
- DHTML Goodies
> 다양한 DHTML and AJAX scripts
> http://www.dhtmlgoodies.com/
> 데모: http://www.dhtmlgoodies.com/
- DOJO Toolkit
- 장단점
- 장점
> 어떤 서버측 기술과도 같이 사용 가능하다.
> 다양한 자원으로부터 많은 위젯들이 있다. - 단점
> 개발자들은 여전히 자바스크립트를 배워야 한다.
> 서로 다른 라이브러리들은 서로 다른 문법을 사용하고 있다. - 언제 사용하면 좋은가?
> 다수의 서버측 기술을 사용해야 할 필요가 있을 때
> 다수의 자원으로부터의 위젯들을 사용하기 원할 때(Java EE를 사용한다는 가정하에 jMaki가 이때 유용하다.)
- 장점
- 프락시를 통한 RMI-like 리모팅
- 특징
- 일반적인 RPC 통신방식(stub, skeleton 기반 아키텍처)과 유사하다.
- 클라이언트측 자바스크립트 코드상에 RMI-like 한 문법을 사용할 수 있다.
- 프레임워크가 자바스크립트 코드인 클라이언트 측 stub(proxy)를 생성한다.
- 프레임워크는 또한 서버측 런타임도 제공한다.
- 클라이언트측 stub(proxy)는 파라메타와 리턴 값에 대해 마샬링을 핸들링한다.
- 구현예
- Direct Web Remoting (DWR)
> 자바 애플리케이션만을 위해 디자인 되었다.
> http://getahead.ltd.uk/dwr
- JSON-RPC
> Lightweight remote procedure call protocol XMLRPC
> http://json-rpc.org/
> 언어별로 구현된 것들이 있다.
JSON-RPC-Java
- Direct Web Remoting (DWR)
- 장단점
- 장점
> 기존에 있던 백엔드 비즈니스 로직을 최소한의 노력으로 AJAX 클라이언트에 노출 가능하다.
> 클라이언트 측 자바스크립트 코드 안에서 친숙한 RMI-like한 문법을 사용할 수 있다. - 단점
> 해커들이 벡엔드에서 어떤 메소드들이 가용한지 알 수 있다.
> 특별한 컨버터(mashaller and unmarshaller)가 특별한 형태의 자바 오브젝트를 위해 생성되어야 한다. - 언제 사용하면 좋은가?
> 기존에 있던 백엔드 비즈니스 로직을 최소한의 노력으로 AJAX 클라이언트에 노출하고 싶을 때
- 장점
- 특징
- AJAX-enabled JSF 컴포넌트
- 특징
- AJAX-enabled JSF 컴포넌트는 AJAX 프로그래밍의 복잡함을 감춘다.
> 페이지를 만드는 사람은 자바스크립트를 몰라도 된다.
> 부담은 컴포넌트 개발자들의 몫이다. - IDE를 통해 드래그앤드롭을 하면서 웹 애플리케이션을 개발하는 JSF 모델을 촉진한다.
> AJAX 애플리케이션을 개발하기 위해 Sun Java Studio Creator 2 및 다른 JSF-aware한 IDE에 AJAX-enabled JSF components를 드래그앤드롭만 하면 된다.
- AJAX-enabled JSF 컴포넌트는 AJAX 프로그래밍의 복잡함을 감춘다.
- JSF 컴포넌트는 재사용 가능하다.
> 커뮤니티에 의해 보다 많은 AJAX-enabled JSF 컴포넌트가 만들어지고 있다.
> More AJAX-enabled JSF components are being built by the community - 구현예
- Blueprint AJAX-enabled JSF components (opensource)
> http://developers.sun.com/ajax/componentscatalog.jsp
> https://bpcatalog.dev.java.net/ajax/jsf-ajax/
- ajax4jsf (open-source)
> 기존 애플리케이션에 AJAX 기능을 더할 수 있다.
> https://ajax4jsf.dev.java.net/
- ICEfaces (ICESoft) - commercial
> http://www.icesoft.com/products/icefaces.html
- DynaFaces (development on-going)
> https://jsf-extensions.dev.java.net/nonav/mvn/slides.html
- Blueprint AJAX-enabled JSF components (opensource)
- 장단점
- 장점
> 드래그앤드롭으로 AJAX 애플리케이션을 만들 수 있다.
> 3rd-party AJAX-enabled JSF 컴포넌트 제작을 꾀함 - 단점
> 만만한 작업이 아니다. - 언제 사용하면 좋은가?
> 드래그앤드롭으로 구축하기 원할때
> JSF-aware IDE를 사용하는 JSF 프로그래밍 모델에 이미 익숙해져 있을때
> 자바스크립트 코딩을 하지 않기 원할때
- 장점
- 특징
- Wrapper(jMaki)
- jMaki 등장 배경
- 여러 AJAX 툴킷이나 프레임워크는 위젯을 포함하고 있는데, 각기 다른 문법을 가지고 있다.
따라서 이런 다양한 위젯을 사용함에 있어 공통적인 프로그래밍 모델이 필요하게 되었다. - 자바스크립트 코딩은 자바 EE 프로그래머에겐 너무나도 이질적이다. 따라서 자바 EE 문법과 프로그래밍 모델을 사용하여 자바스크립트 위젯을 활용하는 필요성이 대두되었다.
- 여러 AJAX 툴킷이나 프레임워크는 위젯을 포함하고 있는데, 각기 다른 문법을 가지고 있다.
- jMaki가 무엇인가?
- 자바 플랫폼을 위한 자바스크립트 랩퍼 프레임워크
> j는 자바를 뜻하고, Maki는 싸다라는 뜻의 일본말 - 웨젯을 JSP 혹은 JSF 태그로 쌈으로써 프로그래머가 다양한 AJAX 툴킷 및 프레임워크의 위젯을 사용 가능하게 한다.
- 자바 플랫폼을 위한 자바스크립트 랩퍼 프레임워크
- 구현예
- jMaki
> https://ajax.dev.java.net/
- jMaki
- jMaki 등장 배경
- 자바 to 자바스크립트/HTML 변환기(GWT)
> AJAX 애플리케이션을 일반적인 자바 개발 환경에서 구현 및 디버깅을 한 후에 배포 시점에만 GWT를 사용하여 자바 애플리케이션을 자바스크립트 및 HTML로 변환한다.- 장단점
- 장점
> 디버깅, 테스트를 자바 언어를 사용하여 진행할 수 있다.
> 자바스크립트를 배울 필요가 없다.
> 구글로부터 시작된 것이라 문서화 및 튜토리얼 작업 등이 잘 되어 있다. - 단점
> 변환기가 다 알아서 하기 때문에 통제권을 상실했다고 볼 수 있다. - 언제 사용하면 좋은가?
> 이미 스윙을 잘 사용할 줄 안다면..
- 장점
- 데모
- GWT Kitchen Sink demo
> http://code.google.com/webtoolkit/documentation/examples/kitchensink/demo.html
- GWT Dynamic Table example demo
> http://code.google.com/webtoolkit/documentation/examples/dynamictable/demo.html
- GWT Kitchen Sink demo
- 장단점
- AJAX 확장기능을 포함한 웹 애플리케이션 프레임워크
> 기존 웹 애플리케이션 프레임워크에 AJAX 기능을 추가함. 필요 없거나, 최소한의 자바스크립트 코딩이 필요
> 내부적으로 자바스크립트 클라이언트 라이브러리 사용- 구현예
- Wicket
> http://wicket.sourceforge.net/
- Echo2
> http://www.nextapp.com/platform/echo2/echo/
- Shale
> http://struts.apache.org/struts-shale/
- Ruby on Rails
> http://www.rubyonrails.org/
- Wicket
- 장단점
- 장점
> 현재 사용하는 프레임워크 내에서 AJAX 기능을 제공할 수 있다. - 단점
> 특정 웹 애플리케이션 프레임워크에 묶이게 된다. - 언제 사용하면 좋은가?
> 특정 웹 애플리케이션을 사용하고 있는데, 그것이 AJAX 확장 기능을 제공할 때
- 장점
- 데모
- 구현예
- 이 중에 무엇을 사용해야 하는가?
- UI 쪽
> Sun Java Studio Creator 2와 같은 JSF-enabled IDE 사용이 가능하다면 AJAX-enabled JSF 컴포넌트를 사용해라.
> JSF 컴포넌트 솔루션을 사용할 상황이 아니면 jMaki를 사용해라.
> 자바스크립트 코딩에 대해 전적인 통제를 원한다면 Dojo 툴킷을 사용해라.
> 이미 스윙 애플리케이션을 가지고 있는 상태에서 AJAX 기능 추가를 원하고 자바스크립트 코딩은 피하고 싶다면 GWT를 사용해라. - 비즈니스 로직 쪽
> 이미 자바 EE로 구현된 비즈니스 로직을 가지고 있는데, 클라이언트로부터 AJAX적인 행위의 RMI 콜을 핸들링하고 싶다면 DWR을 사용해라.
> 이미 특정 웹 애플리케이션 프레임워크를 사용하고 있는데, 그것이 AJAX 확장 가능하다면 그것을 계속 사용해라.
- UI 쪽
■ 원문 : http://wiki.javajigi.net/display/WEB20/AJAX+Frameworks+and+Toolkits










