2013년 11월 27일 수요일

GWT 설치하기

WEB 개발환경에서 JAVA 를 알고 있는 개발자라면 한번 고려 해 볼만한 UI 툴이 GWT 인것
같습니다.

특화된 디자인이 꼭 필요한 곳이 아니라면, application 같은 Web Page 구성이 필요한 사이트에서 사용하면 좋은 툴이라고 생각합니다.

http://www.gwtproject.org 사이트에 접속해서 GWT SDK를 다운받으면(현재 2.5.1) 사용할 준비가 끝난것과 같습니다.
IDE로 이클립스를 사용하신다면 Eclipse plugin 을 이용해서 개발환경을 구축하실 수도 있습니다.


개인적으로 console로 관리하는게 더 편하기 때문에 cmd 창에서 프로젝트를 생성합니다.
먼저 압축을 푼 디렉토리로 이동합니다.
이동후 확인해 보시면 webAppCreator 이름의 파일이 있습니다. 이 실행파일로 프로젝트를
생성합니다.
webAppCreator 의 기능중 프로젝트 생성에 꼭 필요한 것은 -out 이라는 option 과 moduleName 만 정확히 기록하면 가능합니다.
예를 들어 C:\\GwtTester 라는 디렉토리에 test.abc.GwtTester 라는 모듈이름으로
프로젝트를 생성하고 싶다면 다음과 같이 입력합니다.
webAppCreator -out C:\\GwtTester  test.abc.GwtTester
-out 다음의 경로는 상대경로도 가능합니다.

위와 같이 하여 프로젝트가 생성되었다면, 해당 디렉토리로 이동해 생성된 파일을 확인해 봅니다.
정상적으로 진행되었다면 build.xml 파일이 생성되어 있어야 합니다.
ant 가 설치되어 있다면 바로 ant 라고만 명령을 수행하면 컴파일이 수행됩니다.
이후 and devmode 라고 입력하면 개발된 내용을 확인해 보실 수 있습니다.

개발자 입장에서 보면
GWT로 개발하는 과정은 극단적으로 자바스크립트를 단 한줄도 코딩하지 않고 java 만으로 개발할 수 있습니다.

어떻게 보면 전통적인 web page 구성이 아니라 application 개발과 유사한 모습을 보이기도 합니다.

Page 가 전체 refresh 되지 않고 구성되기 위해서는 AJAX 방식과 DHTML 의 동적인 구성이 가능해야 하는데 gwt는 그것을 가능하게 해 주는 툴입니다.
더 더욱 강력한 기능은 AJAX의 통신을 RPC라는 방식으로 지원해 주고 있고 RPC 방식의 통식 객체는 java serialize 가 가능한 객체와 java.util 의 collection 객체들을 지원해 주고 있습니다.

생성된 소스 디렉토리에는 client, server, shared 가 directory로 생성되어 있습니다.
client 의 UI 소스는 서비스 웹서버에 배포할 때는 필요하지 않습니다. interface인 ..Service.java, ...ServiceAsync.java 와 server디렉토리의 ...ServiceImpl.java 클래스 가 일반적으로 배포시 필요한 파일들 입니다.

새롭게 설치하기 위해 오랜만에 GWT 사이트를 접속해 보았습니다.
디자인도 많이 변했고(너무 오랜만에 들어가 보아서요 ...) 무엇보다 Article중 MVP라는 항목이 눈길을 끌었습니다.
잠깐 살펴보았더니 GWT 개발할 때, 어떻게 할까 망설이던 내용을 잘 정리해 놓은듯 했습니다.   굳이 여러명이 개발하는 환경이 아니라도 하나의 화면에 다양한 기능이 집약되어 있다면 서버와의 통신(RPC 담당객체)을 관리하는 영역과 각 UI의 이벤트 핸들링, 화면 리셋과 다시 로딩하는 문제등을 한번 생각하게 만드는 글로 생각되었습니다.

예전 web이 page 에서 get 혹은 post 호출로 다른 페이지를 호출하고 화면이 갱신되는 구조에서는 사용자 요청을 담당하는 Servlet 이 Controller 역활을 담당하고 command 형태의 명령어에 따라 요청을 처리한 후 그 결과에 따라 페이지를 분할 하여 로딩하도록 하는 형태를 많이 사용하였습니다.(현재도 사용할 수 있을 것 같습니다.) 이때 화면에 필요한 데이터는 프레임웤에 따라 차이가 있으나, 대게 setAttribute의 메소드와 scope 영역을 지정하여 forward 하는 방식으로 모델 객체를 넘겨 화면단에서 처리하도록 하는 방식을 많이 사용하였습니다.

AJAX 환경에서는 단일 Page가 application 처럼 비대해졌고(다양한 기능을 담당해야 하고요) 이 환경에서는  Client 단의 event 처리 및  UI 갱신 서버와의 통신이 한 페이지 내에서 빈번히 발생할 수 밖에 없습니다.   Server 에 있는 Controller 가 그 역활을 담당하기에는 한계가 있을 수 밖에 없는 구조입니다.( 서버의 controller 가 의미가 없다는 것이 아니라 AJAX 페이지 내의 업무를 담당하는 구조가 더 많이 필요하다는 의미입니다.)
gwt mvp 소스에서 RootPanel ( html의 document.body 에 해당 한다고 보셔도 될 듯 합니다.) 을 Presenter에서 갱신하면서 각 Presenter 에서 객체로 보유한 viewer 의 내용을 표현하고 각 Presenter는 처음 생성된 rpc객체(통신객체)를 공유하고, event를 보유한 viewer 에 bind 하고 있습니다.
gwt 개발에는 문서에서 설명하듯 접근방법이 mvc 형태의 접근보다, mvp의 접근 방식이 더 타당해 보입니다.

GWT를 설치하러 들어왔다 잠깐 문서를 보고 검토한 것이라, 생각에 오류가 있을 수도 있습니다.  하지만, 잠깐 보았어도 상당히 매력있는 방식이라는 생각이 들었습니다.

2010 년도에 게시된 내용을 지금 보았다는 것도 많은 자극이 되고요, 설치하다 설치와는 별로 관계 없는 내용이 되어버렸습니다.  조금이나마 도움이 되실까 해서 장황하게 적어 보았습니다.






댓글 없음:

댓글 쓰기