달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

'공부하는 것/GRails'에 해당되는 글 3

  1. 2013.03.31 GRails 2.3 Async 지원과 Servlet 3.0
  2. 2011.09.10 GRails 대한 나의 생각... 2
  3. 2011.07.30 GRails 개발 환경 만들기 - Spring Tool Suite

오늘 오랜만에 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}"    			
       }
}






'공부하는 것 > GRails' 카테고리의 다른 글

GRails 대한 나의 생각...  (2) 2011.09.10
GRails 개발 환경 만들기 - Spring Tool Suite  (0) 2011.07.30
:
Posted by 행복상자
2011. 9. 10. 09:28

GRails 대한 나의 생각... 공부하는 것/GRails2011. 9. 10. 09:28

내가 RubyOnRails를 처음 알게된 것도 괘 오래전 이었던 것 같다.
2008년 이후로, ROR을 비롯해서, RedRails와 JRuby, Groovy를 개인적인 흥미로 인해서 설치해 보고 사용해 보기도 했지만, 그렇게 오래가지는 않았던 것 같다.

 왜냐하면, 내가 주로 하고 있는 업무는 JAVA 기반의 서비스이다보니, JAVA Virtual Machine위에서 동작해야 하고, 이를 보다 효율적인 측면에서 활용하기 싶었기 때문에, ROR을 직접 이용하기 보다는 다르지만 같은 환경에서 이용해 보고 싶었기 때문이다.

ROR의 쉽고 빠른 개발을 내가 하고 있는 프로젝트에 적용을 한다면, 생산성의 향상과 직관적인 관리를 통해서 보다 효과적이고 효율적으로 프로젝트를 진행할 수 있다고 생각했기 때문이다. (사실은 개발 시간을 줄여서 개발자들이 편해질까하는 순수한 의도와 흥미도 있었다.)
그러나, 개인적인 프로젝트라면 모를까, 팀 프로젝트와 실 운영을 위한 프로젝트 적용에는 많은 어려움들이 수반되고, 안정화와 검증되지 않은 부분에 대한 책임등을 고려할 때, 적용이 쉽지 않았기 때문에 프로젝트에서는 사용하지 못했었다.

GRails를 처음 접하게 된것은 2009년 상반기 였던것 같은데, ROR과 JRuby와 비교하면 굉장히 앞선 무엇이 있다라고 생각하지 않고, 또하나의 메이져는 아니지만, "흥미로운 프로젝트가 또 하나 나왔구나"라는 생각뿐, 큰 감흥은 없었던 프로젝트 였다.

그러가다, SpringSource에서 개발하고 있는 Eclipse기반의 개발툴인 Spring Tool Suite을 사용하다 보니, 
Grails와 Groovy를 쉽게 플러그인으로 설치할 수 있도록 되어 있어서, 설치해서 사용해 보게 되었는데, ROR과 같이 자동으로 Scaffolding해주고, Springframework를 사용할 수 있도록 해주고, groovy 대신에 java를 사용할 수 있다는 것이 마음에 들었다.
 

그리고, 기본 내장되어 있는 in-memory DB인 Hbase와 Tomcat를 통해서 Grails 프로젝트 생성과 동시에, Deploy해서 테스트 할 수 있는 환경이 바로 제공된다는 것이 무척 마음에 들었었다.

단, 새로운 파일들의 생성과 빌드를 위해서 HDD의 I/O가 많아서 불필요한 시간이 든다는 점과, Plug-in간의 
Dependency에 대한 문제가 있어서 인지, 일부 플러그인은 정상적으로 업데이트가 안되곤 했다.
특히, STS를 이용할 경우는 여러가지 편리한 점이 많지만, STS에 대한 Dependency로 인한 Plug-in의 업데이트가 정상적으로 진행되지 않았기 때문에, 문제점 해결에 많은 시간을 보내곤 했다.

그러다가, STS 2.7 버전이 나오면서, 기존에 2.5와 2.6버전에서 가지고 있던 Dependency 문제를 어는 정도 해결해 주었는데, 이직도 Plugin에 대한 Dependency문제가 있다. 특히, Hibernate와 Tomcat은 기본 프로그인으로 설치시 포함되어 있지만, Google App Engine SDK 설치를 위해시, 이들 플로그인들이 정상적으로 제거되지 않는 문제들을 가지고 있고, STS를 종료하고, 수동으로 삭제해주어야 한다.
 

사실, 이는 Grails의 문제가 아니라, STS와 윈도우즈7간의 권한의 취득에 대한 것이므로, 직접적인 책임은 없으나, 제대로된 IDE의 지원은 절실하다.

GRails는 STS의 지원 없이도 사용이 가능하지만, IDE를 이용하는 것은 생산성을 위해서 이기 때문에, 이를 이용하는 것이 사용하지 않는 것보다 이득이 크다.
Ggrils를 통한 개발에서 STS를 이용하지 않는 다는 것은 굉장히 불편한 길을 찾아서 걷는다라는 기분이 든다. 자바 개발에서 사용하던 라이브러리들도 그대로 이용이 가능하므로, 자바로 개발하던 개발자에게는 추가로 개발을 위해서 들여야 하는 학습 시간을 많이 필요로 하지 않기 때문에 이전에 Eclipse를 사용하던 개발자라면, STS를 설치하지 않고, Plug-in 만 설치해서 개발이 가능하다.
하지만, 나는 개인적으로 Eclipse를 설치하는 것보다는 STS를 설치하는 것이 낫다고 생각한다.

올 10월 정도에는 GRails 2.0이 새로 나온다.
여러가지 다양한 Featuer들의 변화가 였보이는데, 어제인가 보니 Grails 2.0 M2버전이 Release 가 되었던 것 같다.
 



 
:
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프로젝트를 시작할 수 있을 것이다.




'공부하는 것 > GRails' 카테고리의 다른 글

GRails 2.3 Async 지원과 Servlet 3.0  (0) 2013.03.31
GRails 대한 나의 생각...  (2) 2011.09.10
:
Posted by 행복상자