오늘 오랜만에 Grails.com을 둘러 보았더니, Grails 2.3의 Async Support에 관련된 글이 올라왔다.

아마도 Grails 2.2에서 부터 지원하기 시작한 Suvlet 3.0의 async API에 대한 지원에 대한 것이라 관심있게 읽게 되었다. 읽다 보니 Grails의 기능 제공 보다는 Servlet 3.0에서 추가된 기능들에 대해서 알아봐야겠다는 생각이 들어 몇몇 사이트를 보면서 아래와 같이 정리하였다.

자료들을 찾다 보니, Servlet 2.5에서도 이미 제공하고 있었지만, 서버 vernder들의 상이한 기능제공으로 인해 사용하기에 적합하지 않은 부분들이 있었다고 한다. 그러나 3.0에서는 이러한 혼란 스러운 부분들이 제거되어 제공하게 되었다. Servlet 3.0은 2009년도 12월에 발표가 되었다.


[Servlet 3.0 변경사항]

배경을 약간 설명하게 되면, 기존의 Web Technology는 클라이언트(Web Browser)와 서버간의 전형적인 Request-Response 모델을 따르도록 설계되어 있었다. 이러한 구조는 Web 2.0이라는 기술적인 Trand가 변함에 따라서 작지만 많은 Request들을 연속적으로 Server에 요청을 하게 되고 이로 인한 지연과 성능적인 측변에서의 변화를 이끌어 내게 되었다. 

Servlet 3.0의 특징으로는 java web application을 위해서 3가지 configuration옵션을 제공한다. Annotation, API 그리고 Xml이용해서 configuration 변경이 가능하다. 


다음은 주요 기능들의 요약이다.


1. Annotations 추가:  기존 web.xml에서 제공하던 기능을 Annotation을 통해서 제공

- @WebServlet

- @WebListener

- @WebFilter

위 3개는 스프링 프레임워크 등을 사용해왔던 개발자라면 충분히 비슷하다고 생각할 것인데, 실제 사용번도 크게 다르지는 않다.

- @MultipartConfig

역시 스프링 프레임워크의 MultipartFile과 사용법과 용도가 유사하다.


2. Dynamic Registration of Servlet and Filters:  서블릿, 필터 클래스의 매핑과 등록 해제가 코드에서 가능

ServletContext.addServletMapping(..), ServletContext.addFilter(..)등의 ServletContext클래스를 이용하여 직접 코드상의 수정도 가능하다. 


3. Pluggability: Annotation을 통한 서블릿, 필터 정의 또는 web-fragment.xml을 통해 배포 기술자의 모듈화 가능

4. Asynchronous Support: 말 그대로 비동기 모드 지원

5. Security: Annotation을 통한 용청별 권한 이증 지원

- @RolesAllowed

- @DenyAll

- @PermitAll

- @TransportProtected


Servlet 3.0과 관련된 주요 사이트들.

- https://blogs.oracle.com/enterprisetechtips/entry/asynchronous_support_in_servlet_3

- http://www.java.net/blogs/mode/

http://ko.wikipedia.org/wiki/자바_서블릿

- http://en.wikipedia.org/wiki/Java_Servlet


[Grails 2.3 Async Support]

이제 본론으로 들어가야 할 때이다. Servlet 3.0이 생각보다 오래전에 발표되었지만, 아는 사람들과 실제 환경에서 적용하여 사용하는 사람들은 많지는 않아 보인다. 뭐.. google app engine도 최근에 지원하려고 준비고 있는 단계이니, 그럴수도 있겠지.)

오늘 읽어 본 글은 http://grails.io 에 올라온 글이다.

예제위주로 설명이 되어 있어서 이해는 어렵지 않은데 실제 코드를 만들지 않으면 별로 의미가 없을 수 있다. 나중에 꼭 해볼것을 다짐하면서...

Grails 2.3에서는 Promises패키지에 포함되어 있는 메소드들을 통해서 Async 기능을 제공하고 있다.

아래는 그 예제이다. 설명을 따로 하지 않아도 알겠지만 3개의 메소드를 async하게 실행해서, 그 결과를 wateAll 메소드를 통해서 전달 받는다.

import static grails.async.Promises.*

def p1 = task { 2 * 2 }
def p2 = task { 4 * 4 }
def p3 = task { 8 * 8 }
assert [4,16,64] == waitAll(p1, p2, p3)

아래는 GORM을 통한 query메소드를 호출하는 예제로 위의 예제와 사용법이 같다.

import static grails.async.Promises.*
def p1 = Person.async.get(1L)
def p2 = Person.async.get(2L)
def p3 = Person.async.get(3L)
def results = waitAll(p1, p2, p3)

그런데, 위의 예저들은 서블릿 3.0에서 제공하는 기능들과의 연관성이 전혀 없어 보인다.


음의 예제들이 Async 방식을 지원하는 예제로 Service를 Annotation을 통해서 Async 서비스로 노출을 시기는 코드이다. 그 아래의 코드는 모든 메소드를 Async로 실행하는 코드이다. 

import grails.async.*
class AsyncBookService {
   @DelegateAsync BookService bookService    
}

AsyncBookService asyncBookService
def findBooks(String title) {
    asyncBookService.findBooks(title)
       .onComplete { List results ->
          println "Books = ${results}"    			
       }
}






Posted by 행복상자
Spring Tool Suite는 Eclipse기반의 Java 개발 환경 툴로, Spring Framework로 유명한 Spring Source사에서 제작 배포를 하고 있다. STS를 사용하는 이유는 자동화된 환경을 통해서 필수적인 부가 Plug-in의 설치가 쉽고, Grails와 스프링 프레임워크의 구성이 쉽기 때문이다.

최근까지도 Eclipse 3.6 기반의 STS 2.5.2를 설치한 이후로 자동 업그레이트롤 통해서 STS 2.7.1을 사용했는데, Eclipse 3.7기반의 STS 2.7.1을 설치하고, Grails 1.3.7을 설치하기로 하였다.
사실, STS 2.5.0은 Plug-In의 업그레이드 기능에 문제가 있어서, Grails Plug-in들과 번들의 설치가 안되는 이슈가 있었는데, 2.5.2 버전에서는 이러한 문제가 해결되어서 업그레이드를 하거나 다시 설치할 필요성을 느끼지 못했었다.  

간략히 설치 방법과 순서에 대해서 설명을 하면, 
http://www.springsource.com/ 로 웹브라우저를 통해서 이동을 하며 화면 하단에 아래 이미지와 같은 화면이 보일 것이다. 여기서 SpringSoruce Tool Suite를 클릭해 주거나,
직접 브라우저에서 http://www.springsource.com/downloads/sts 로 이동해서 다운을 받아도 된다.

■ Spring Tool Suite 다운로드


이번에 설치할 버전은 Eclipse 3.7 기반으로 구성되어져 있고, STS 2.7.1 버전이다.
다운로드 사이트로 이동하면, 아래와 같은 화면이 나오는데, 운영 환경에 맞추어서 설치를 하면 되다.
(화면에는 표시되지 않았는데, 하단에 다른 버전들오 이동할수 있는 링크가 있다.)
 

■ STS 설치
다운로드해서 압축을 풀고, 원하는 경로에 옮겨높고 JAVA SDK의 경로(PATH)를 설정하면 설치는 마무리된다. (다 알고 있다고 생각하기에 별도 설명은 하지 않는다.)

■ STS 실행
STS를 실행하기 위해서는 "설치경로/springsource/sts-2.7.1.RELEASE/sts.exe"를 실행해주면 된다.

■ Groovy와 Grails 설치
실행후 나타나는 dashboard를 하단을 보면 두개의 tab이 있다. 하나는 dashboard 텝이고 하나는 Extensions이라는 템이다. Extensions 탭은 개발에 필요한 Plug-in 들을 쉽게 설치하도록 도와 준다.

여기서는 Grails, Grails Support 그리고 Groovy Elipse를 설치할 예정이다.
아래와 같이 선택하고 하단 오른쪽에 있는 "Install" 버튼을 눌러서 설치츨 진행하면 된다.


설치한 플러그인들에 대한 설치에 대한 진행 화면이 아래와 같이 나오면, "Next"버튼을 눌러 설치를 진행하면 된다.


설치가 완료되면, STS를 재 시작을 해주어야 한다.

재 시작이 되면, Grails프로젝트를 시작할 수 있을 것이다.




Posted by 행복상자
오늘 추석 연휴의 첫날, 새벅같이 일어났으면 좋으련만, 휴일이라는 핑계로 7시 경에 일어나서 어제 찾아 보던 자료를 마져 보았다.

최근에 웹기술들은 정말 눈부시게 발전하지만, 그 중에서 가장 눈에 띄는 것은 RIA쪽과 다양한 브라우져들 그리고 자바쪽의 Spring framework이다. 
Spring framework는 자바를 이용한 웹개발에 많을 변화를 몰고 왔는데, EJB를 반드시 써야한다는 국내 대규모 웹 개발 풍토에 많은 변화를 주었다. 단지 마케팅과 정치적인 주장에서 개발 효용성을 안전성과 성공사례를 통해서 바꿔버렸다. 

하지만, 개선은 어디서나 일어나나 보다. 자신의 아이디어이든 다른 이의 아이디어이든, 좀더 쉽고 빠르고 안정성있는 개발을 원하는 것은 개발자들의 희망이자 욕심이다.

그중에서 GRails와 Groove는 스프링 프레임워크의 적자는 아니었다. 하지만 로드존슨이 Dynamic Language에 대한 애정을 매 컨퍼런스마다 비추었었는데, 결국은 정확이 기억이 나지 않지만, 지난해에 Groove를 SpringSource에 합병시키고, 자신의 제품라인 중에 하나로 만들었다.

Grails를 공부하기 위해서는, 사실 이것은 어제 오늘 내가 찾아본 사이트들인데, 이미 RubyOnRails에 대한 겅험이 있는 사람이라면, 그 기본 Feature를 잘 알고 있기 때문에, 이해하가 어렵지 않을 것이다.

Grails Site
- Grails: http://grails.org/
- Grails Documents: http://grails.org/Documentation
- Grails Quick Start; http://www.grails.org/Quick+Start
- Grails Tutorials; http://www.grails.org/Tutorials

IBM Developers Network:


IBM의 개발자 네트웍스에 올라와 있는 자료들은 모두 한번씩 읽어 볼만 하다.
내용은 많을 지도 모르겠지만, 각 예제들이 연결되어 있어서 공부하는데, 많은 도움이 될거라 생각된다.

하지만, 가장 중요한 것은 자신의 PC에 환경을 구성하고, 하나 하나 실행해 보는 것만큼 큰 도움이 되는 것은 없을 것이다. 새로운 것을 아무런 부담없이 공부할 수 있다는 것은 즐겁다. 이것도 또한 일로 연결될 수 있다면, "이보다 더 좋을 수 없다" 이다. ^^

Posted by 행복상자