2006년 5월 21일 일요일

GWT

JavaOne에 맞춰서 여러 기술들이 나오는 바람에 정신없이 보낸 한 주 같습니다. 그 중에서도 가장 눈길을 끌었던 것은 GWT(Google Web Toolkit)이었던 것 같습니다. Blogines.com으로 받아보는 여러 Feed들이 GWT에 대한 얘기들을 여럿 담고 있더군요.

GWT를 살펴보면 핵심은 단순합니다. Java코드를 Javascript 코드로 변환하는게 주 목적입니다. 이를 위해서 총 4개의 단위로 구성됩니다.
  • Java코드를 Javascript로 컨버젼하기 위한 Java-to-Javascript 컴파일러
  • Javascript로 변환하기 전에 테스트, 디버깅 등의 목적을 위해서 Java코드만으로 Web에서 동작하는 것처럼해줍니다. (Hosted mode)
  • JRE emulation library는 java.lang 또는 java.util로 작성된 코드들이 Javascript로 컴파일 되었을 때 정상적으로 동작하게 해주기 위해서 JRE를 에뮬레이션해주는 부분입니다.
  • GWT Web UI library는 Web 브라우져에서 사용할 수 있는 컴포넌트 단위의 UI 오브젝트들입니다.
GWT를 사용하는 시나리오는 다음과 같습니다. (이클립스 사용자이며 GWT를 먼저 설치하였다고 가정하구요.)
  1. 프로그래머가 projectCreator와 applicationCreator를 사용하여 이클립스 프로젝트를 생성합니다.

  2. (이 둘을 사용하여 프로젝트를 생성하면 기본적인 프로그램의 구조와 ant파일, javascript 컨버젼 command파일 html파일등을 생성해줍니다.)

  3. 이 프로젝트를 이클립스로 import합니다. (이 때 생성된 코드를 바로 실행할 수 있도록 com.google.gwt.dev.GWTShell을 Main class로 등록하고 argument도 바로 설정됩니다.)

  4. 이클립스의 Package Explorer를 살펴보면 프로젝트 생성한 프로젝트에 따라서 Project Structure도 구성되게 됩니다. (클라이언트 파일의 경우 client 폴더아래 쪽에 작성하며 서블릿같은 서버단 코드는 server코드에 리소스의 경우 public폴더 아래에 넣습니다. Project Structure)

    ※ 이 때 주의할 점은 구조에 맞게 파일을 넣어야 하는 점입니다. 리소스의 경우 public 폴더에 넣어야만 Web 모드로 컴파일 했을 때 적절한 위치로 리소스 파일을 넣어줍니다.- 위치 변경도 가능하기는 합니다.

  5. applicationCreator에서 인자로 주었던 EntryPoint를 구현한 클래스가 시작점이 됩니다.(자바에서 main()를 가진 클래스가 시작점이 었던 것처럼요)
GWT의 문서화는 Dojo나 Prototype 같은 다른 라이브러리보다 훨씬 문서화가 잘 되어 있다고 생각되네요. Prototype의 경우도 잘되어 있기는 하지만요. 개인적으로 GWT를 사용했을 때 느꼈던 단점들은 다음과 같습니다.

  1. Hosted mode에서 테스트하는 경우 브라우저와 다르게 동작하는 부분이 있습니다. CSS가 생각했던 것과 다르게 동작하더군요.
  2. GWT가 변환해주는 Java 패키지는 java.lang과 java.util 두가지만 지원하는 점입니다. 이외에도 언어상의 제약점이나 Runtime Library Support의 제약점이 있습니다. (따라서, Java 프로그램을 컨버젼하기에는 무리가 있을 것 같네요.)
  3. Javascript의 eval() 같은 메소드가 지원이 되지 않는 단점이 있습니다. (한두달 만에 자바스크립트에 익숙해져버렸나보네요. ^^;;)
  4. Widget을 감싸는 Panel을 사용하는 경우 의도했던 것과는 다르게 table태그나 div태그 등으로 한번 더 감싸게 되기 때문에 최후에는 생성된 html과 소스코드를 확인해야하는 부분도 있습니다.
  5. 라이브러리가 포함되므로 프로그램 사이즈가 항상 100k이상이 되는 것도 문제입니다.
  6. Safari 지원이 완벽하지 않다는 얘기가 포럼에 올라오고 있기도 합니다.
장점으로는 소개글에서 나온 것처럼 이클립스에서 코딩한다는 것(== 리팩토링, 디버깅의 편리)과 자바의 클래스, 패키지 구성을 통하여 체계적인 구조를 쉽게 작성할 수 있다는 점(dojo를 사용해보기도 했습니다만, 사용자 정의 라이브러리를 추가하는데 불편한 점이 많더군요. prototype의 경우에는 쉽게 상속은 가능하나 패키지 구조가 지원이 되지 않고 상속시 스코프 영역, this에 대한 처리, js파일에 저장된 dom 핸들링이 ie에서는 다르게 동작하는 점등의 문제를 만났었습니다.)이 가장 큰 매력으로 느껴지더군요.

* GWT가 1.1로 업데이트 되었습니다.
* Pragmatic Bookshelf에서 gwt에 관한 책도 나왔네요.([5]링크 참조)

참고자료

댓글 없음:

댓글 쓰기