스프링 프레임크를 사용하기 시작한지는, 만 5년 정도 된것 같다. 아니 정확하게 이야기하면 알기 시작한지 5년이다. 그 동안 몇개의 프로젝트에는 적극적으로 사용해왔고, 사용하려고 했었다.

솔루션을 위한 내부의 기반 프레임워크를 개발하기에도, 그 자체만으로도 스프링은 너무 훌륭하기 때문에, Application의 공통 부분을 위한 기능들만을 최적화하고, 정의하는 것 만으로도 노력대비 좋은 결과들을 낼수 있었다. 다 로드존슨 아저씨가 많은 시간을 들여서 갈고 닦고, 발전시킨 노력의 결과들이다.

시간이 흐를수록 큰 조직에서는 코드와 PC와 씨름하기 보다는 수 많은 회의와 씨름을 하는 일이 많아진다. 더군다나 같이 협업하는 사람들이 많아지면, 본인이 원치 않아도 관리자의 길에서 뛰고 있는 모습을 보게된다. 딱 지금의 나의 모습니다.

공부하지 않고, 적절하게 판단하고 선택하고 방향에 대해서 이야기 할 수 있을까?
많은 고민을 하지만, 역시 시간이 절대적으로 부족하다.

요즘은 코드를 보기가 힘들정도로, 공부할 여유가 별로없다.
하지만, 사둔 책이 아깝다는 이유이든, 공부의 재미를 알았다는 이유이든 개발자로 살아가는 한은
꾸준히 배워야한다.

스프링 3.1은 또 다른 변호들을 이야기 할지는 모르겠다. 이전에 책을 보면서 정리한 내용인데 일단 올려놓는다.

[Spring Framework 3.0 - MVC]

·         스프링은 DespatcherServlet 7개의 Strategy를 기반한 MVC 프레임워크를 제공한다.

·         이중 DespatcherServlet는 가장 기본적이면서도 SpringMVC의 필수적인 기본 Servlet 역할과 스프링의 특징중의 하나인 Light-weight 컨테이너의 역할을 수행한다.

 

1.     @RequestMapping 핸들러 매핑

o    @MVC는 메소드 레벨에서 컨트롤러를 작성할 수 있다.

o    Annotation은 타입(클래스, 인터페이스)레벨뿐 아니라 메소드 레벨에도 적용 가능함.

o    @MVC 핸들러 매핑을 위해서는 DefaultAnnotationHandlerMapping이 필요하다.

o    DefaultAnnotationHandlerMapping은 기본 핸들러 이므로 다른 Handler Mapping bean이 명시적으로 등록이 되지 않았다면, 기본으로 사용이 가능하다.

o    만약, 다른 핸들러 매핑 빈이 등록이 되었다면, DefaultAnnotationHandlerMapping
명시적으로 등록을 해주어야 사용이 가능하다.

2.     Class/Method 결합 Mapping 정보

o    DefaultAnnotationHandlerMapping

·         @RequestMapping 애노테이션을 활용해서 타입레벨과 메소드 레벨 지원하며
타입레벨을 기본으로 삼고, 메소드 레벨의 어노테이션 정보는 타입레벨의 매핑을 세분화 하는데 사용한다.

o    @RequestMapping Annotation

·         Spring[] value(): URL 패턴

1.     String 배열 타입으로 URL 패턴을 지정해서 사용

2.     URL 패턴은 ANT 스타일과 와일드카드를 사용이 가능하다.

·         @RequestMapping("/hellow")

·         @RequestMapping("/admin/**/user")

·         @RequestMapping("/hellow", "/hi")

3.     "{ }"를 사용할때는, "{ }"의 위치에 해당하는 내용을 컨트롤러 Method에서 파라메터로 전달받을 수 있다. "{ }"에 들어가는 변수를 "path variable"이라고 부른다.

·         @RequestMapping("/user/{userid}")

·         RequestMethoe{} method(): HTTP Request Method

1.     Request Method GET, HEAD, POST, PUT, DELET, OPTIONS, TRACE 7개의 HTTP 메소드가 정의되어 있다

2.     HTTP 메소드를 추가하면 요청 메소드에 따라 다른 메소드를 매핑해 줄 수 있다.

·         @RequestMapping(value="/user/add", method=RequestMethod.GET)

3.     정의된 메소드 이외의 사용시 "HTTP 405 - Method Not Allowed"를 받음.

4.     타입레벨에서 URL을 주고 HTTP 요청 메소드를 지정할 경우 URL 생략가능.

·         @RequestMapping(method=RequestMethod.GET)

·         String[] params(): Request Parameter

1.     이것은 요청 Parameter와 그 값을 비교해서 매핑해 주는 것이다.

2.     같은 URL을 사용하지만, Parameter값에 따라 다른 작업을 할 때 사용한다.

·         @RequestMapping(value="/user/edit", params="type=admin")

3.     특정 Parameter 값이 존재하지 않아야 한다는 조건을 둘 경우 사용

·         @RequestMapping(value="/user/edit", params="!type")

·         String[] header(): HTTP 헤더

1.     Header 정보에 따라 매핑이 가능하다.

·         @RequestMapping(value="/view", headers = "content-type="text/*")

 

o    Type level 매핑과 Method level 매핑의 결합

·   타입(클래스오 인터페이스)레벨에 붙는 @RequestMapping은 타입내의 모든 매핑용 메소드의 공통 조건을 지정할대 사용한다.

·   메소드 레벨의 매핑은 클래스 레벨의 매핑을 상속한다.

      1. 컨트롤러가 각각 /user/add, /user/edit, /user/delete URL에 매핑

@RequestMapping("/user")

public class UserController{

@RequestMapping("/add") public String add(){ }

@RequestMapping("/edit") public String edit(){ }

@RequestMapping("/delete") public String delete(){ }

}

2.     타입 레벨의 URL패턴에 * **를 사용하여 매핑 가능

·         /user/*

·         /user/**  

·         타입레벨에서 공통의 매핑을 정의하고, 메소드 별로 세분화 해서 사용

 

o    Method 레벨 단독 매핑

·   공통 매핑 조건이 없을 경우, 조건을 주지 않고 메소드 레벨에 정의해서 사용.

·   이렇게 정의하지 않는다면, 클래스 자체가 매핑이 되지 않는다.

·   만약, @Controller 애노테이션을 붙여서 자동 빈 스캔을 사용할 경우는, 클래스 레벨의 @RequestMapping을 생략할 수 있다.

o    Type 레밸 단독 매핑

·   클래스 레벨의 URL 패턴이 /*로 끝나는 경우, apthem 레벨의 URL 패턴으로 메소드 이름을 사용할 수 있음.

·   아래는 /user/add /user/edit 로 각각 매핑

@RequestMapping("/user/*")

Public class UserController {

@RequestMapping public String add( ) { }

@RequestMapping public String edit( ) { }

}

 

 

 

 

 

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 행복상자
기다렸던 사람들이 많았을 것 같다. 이제야, 오늘에야 Spring 3.0.0 RC1이 나왔으니까 말이다. 물론 Toby(일민)이를 비롯한 몇몇 선행적인 개발자들이 이미 열심히 공부하고 있고, 이의 전달도 열심인 것에 비하면, 최근에 나는 크게 관심을 두려고 노력하지 않았다. 개인적으로는 다른 사업부로 옮겨와서, 새로운 일을 맡아서 관심이 적어진(?) 것도 있지만, 사실은 그것 보다도, 기존에 내가 만든 Framework는 스프링 2.5.5 또는 2.5.6을 기반으로 설계되어 있다. 그리고 이것을 이용하여 여러 솔루션들이 개발되고 있는 중이어서, 자체 개발한 Framework의 Minor 체인지가 아닌 Big 체인지를 결정하기 쉽지 않기 때문이다. 만약 그것을 결정해야 한다고 해도 2년 후가 될 것이다. (상품으로 그리고 서비스를 하고 있는 시스템을 변경하기란 많은 결정해야할 문제에 직면해야 하는 용기가 필요한다. 그러나 이것은 모험이 아니다.)

현재 Springframework에서 제공하고 있는 메이져 Branch는 2가지이지만 앞으로는 3가지가 될 것이다.
Springframework 1.2 와 2.5 그리고 향후 주축이될 3.0이다.
그리고 이제는 3.0 Release Candidate 1이 나왔다. 이제는 또 열심히 공부할 시점이 된 것이다.
여러가지 변경된 API라이브러리들도 있고, 추가된 라이브러리들이 있는데, 이중에서 가장 먼저 눈에 들어왔던 것은 Jackson JSON라이브러리이다. 이른 아침에 Jackson 투터리얼을 보면서 시간 가는줄 몰랐다.
앞으로 정식 버전이 나올날이 멀지 않았지만, 언제가 될지는 잘 모르겠다. 올해 안에는 나오지 않을지...

Springframework 3.0 RC1의 변경 사항은 다음의 링크를 보면된다.

그리고, 아래는 이번에 RC1에 추가된 내용이다.

Changes in version 3.0.0.RC1 (2009-09-25)
-----------------------------------------

* upgraded to CGLIB 2.2, AspectJ 1.6.5, Groovy 1.6.3, EHCache 1.6.2, JUnit 4.7, TestNG 5.10
* introduced early support for JSR-330 "javax.inject" annotations (for autowiring)
* introduced early support for JSR-303 Bean Validation (setup and MVC integration)
* added default editors for "java.util.Currency" and "java.util.TimeZone"
* refined PathMatchingResourcePatternResolver's treatment of non-readable directories
* PathMatchingResourcePatternResolver understands VFS resources (i.e. works on JBoss 5.x)
* revised AccessControlContext access from BeanFactory
* AbstractBeanDefinitionParser can deal with null return value as well
* PropertyOverrideConfigurer's "ignoreInvalidKeys" ignores invalid property names as well
* PropertyPlaceholderConfigurer supports "${myKey:myDefaultValue}" defaulting syntax
* BeanFactory's default type conversion falls back to String constructor on target type
* BeanFactory tries to create unknown collection implementation types via default constructor
* BeanFactory supports ObjectFactory as a dependency type for @Autowired and @Value
* BeanFactory supports JSR-330 Provider interface as a dependency type for @Inject
* BeanFactory prefers local primary bean to primary bean in parent factory
* protected @Autowired method can be overridden with non-annotated method to suppress injection
* private @Autowired methods with same signature will be called individually across a hierarchy
* @PostConstruct processed top-down (base class first); @PreDestroy bottom-up (subclass first)
* ConfigurationClassPostProcessor detect @Bean methods on registered plain bean classes as well
* support for default "conversionService" bean in an ApplicationContext
* MBeanServerFactoryBean returns JDK 1.5 platform MBeanServer for agent id "" (empty String)
* changed NamedParameter/SimpleJdbcOperations parameter signatures to accept any Map value type
* refined logging in JMS SingleConnectionFactory and DefaultMessageListenerContainer
* introduced "ui.format" package as an alternative to PropertyEditors for data binding
* @RequestMapping annotation now supported for annotated interfaces (and JDK proxies) as well
* @RequestParam and co support placeholders and expressions in their defaultValue attributes
* @Value expressions supported as MVC handler method arguments as well (against request scope)
* JSR-303 support for validation of @MVC handler method arguments driven by @Valid annotations
* refined response handling for @ExceptionHandler methods
* @ResponseStatus usage in handler methods detected by RedirectView
* all @SessionAttributes get exposed to the model before handler method execution
* @Event/ResourceMapping uniquely mapped to through event/resource id, even across controllers
* MultipartRequest is available as a mixin interface on (Native)WebRequest as well
* removed outdated "cacheJspExpressions" feature from ExpressionEvaluationUtils
* introduced common ErrorHandler strategy, supported by message listener container
* Jpa/JdoTransactionManager passes resolved timeout into Jpa/JdoDialect's beginTransaction
* HibernateJpaDialect applies timeout onto native Hibernate Transaction before begin call
* Spring's Hibernate support is now compatible with Hibernate 3.5 beta 1 as well
* Spring's JPA support is now fully compatible with JPA 2.0 as in EclipseLink 2.0.0.M7
* SpringJUnit4ClassRunner is now compatible with JUnit 4.5, 4.6, and 4.7
* SpringJUnit4ClassRunner once again supports collective timeouts for repeated tests
* deprecated @NotTransactional annotation for test classes in favor of @BeforeTransaction








Posted by 행복상자
며칠전에 블로그를 통해서, SpringSource Tool Suite(STS)의 무료 공개에 대해서 언급했었는데, 이제 공식적으로 무료로 공개한다고, 지난 5월 7일자(미국 시간)로 블로그의 "SpringSource Tool Suite is Now Free!" 라는 제목의 글을 통해서 발표했다.

글의 내용을 잠시 읽어보면, Rod Jonson이 지난 SpringOne Europe에서 약속하였던 것을 이행한다는 이야기이다.
그리고 이제부터는 SpringSource Tool Suite (STS)의 정식버전을 무료로 사용할 수 있다는 내용이다.
또한, Christan Dupuis의 최근의 Blog에 추가된 새로운 Feature(2.1.0.M1)들을 소개한다고 한다.

지난 번에는 블로그를 통해서는 Roo가 STS의 한 Feaure로 들어가있고, Roo를 사용해보기 위해서는 STS를 설치해보아야 한다고 이야기한적이 있는데, 이는 2.1.0.M1 버전 부터 가능할 거라 생각된다.

내가 STS에 관심을 갖고 있는 것은 SpringDM과 OSGi번들로 되어 있는 프로젝트 또는 개발된 Application을 제대로 지원하고 있는 툴이 없기 때문이다. 내가 작년부터 진행하고 있는 프로젝트에 도움이 되지 않을까라는 기대 때문에 이전부터 관심을 두어 있었다.

하지만, 아직 설치와 테스틀 해보지 않은 상태이므로, 툴의 장점을 알아가야 하는 과정을 밟아야 한다.
개발에 직/간접적으로 많은 도움을 줄거라는 기대가 있기 때문에, 조만간 날 잡아서 설치해볼 생각이다.

STS는 "download SpringSource Tool Suite"에서 다운 받을 수 있다.


Posted by 행복상자
Spring Source에서 새로운 툴을 하나 발표하려는 것 같다.
미국 시간으로 어제 "Roo Alpha 2 is now available for download" 라는 제목으로 글이 하나 올라왔는데, 생소한 이름의 툴이 하나 올라왔는데, 기존에 진행되었던 프로젝트와는 많이 생소한 내용이었다.

"Roo Alpha 2" 라는 이름으로 이미 Relesed 된 상태로, 이미 국내에서도 여러 개발자들이 관심을 갖고 살펴보고 있는 듯하다. 이는 SpringSource의 Tool Suite(STS)에 Roo Plugin으로 포함되어져 있고, 이들은 "introduction to Roo" 라는 블로그의 글을 통해서 "Roo"에 대해서 간략하게 소개하고 있다.
간단하게 Roo는  SpringSouce 오픈 소스 프로젝트이고, TDD를 위한 툴이고 이를 위해서 Shell을 개발자에게 제공한다. 그리고 Roo는 개발자가가 새로운 언어를 배우지 않고 쉽고 빠르게 그들의 Application을 개발 할 수 있도록 설계되었다고 한다.

Roo는 무료로 사용할 수 있는 툴인데, 이번주, 즉 5월 7일자(미국시간)로 무료로 다운받아 사용할 수 있다는 것이다. 이에 대해서 시간 제약과 같은 규제는 따로 없다.
우리 시간으로 5월 8일에 다운 받아 쓸수 있다는 말이다. (참조: http://www.springsource.com/products/sts)

Roo는 나에게는 아주 생소한 주제이다. 그래서 잠깐 구글링을 해보 았는데, 국내의 여러개발자들이 벌써 이를 테스트하고 분석하고 있는 중이었는데, 그중 특이한 것은 이 Roo가 갑자기 하늘에서 떨어진 것은 아니라는 것이다.
이미 일민(Toby)이가 이를 대한 소개를 한 글이 있었다. 2006년도에 TES2006에 참석해서 배운 내용을 정리했던 것인데 "TSE2006 넷째날 두번째 세션 - ROO"를 보면 이해에 도움이 될거라 생각된다.
그가 2006년에 Roo에 대해 알았다면, 이는 참 오래된 감춰진 프로젝트의 하나일 것이다.

그리고, "Introducing Spring ROO: Part 1" 의 글을 보면, 현재의 Roo에 대한 간략한 소개와 설치에 대한 설명들이 있다. 이름 참조하면 설치에 무리가 없을 거라 생각되고, 참고로 여기서는 A1 버전을 사용하였다.

그리고 지난주에 유럽에서 열렸던 SpringOne에서 발료되었던 세션중에 "Presentation: "Extreme Productivity in Application Development"을 보면 좀더 새로운 Roo에 대한 정보를 얻을 수 있을 것이다.

최근에 Roo에 대한 새로운 이름에 대해서 투표를 진행했는데, Roo도 괜찮은 이름인것 같다. 어떤 이름으로 다시 공개될지 모르지만 현재는 Roo이고, 이는 당분간은 유지 될거라 생각된다.
(투표에 관심있는 사람은 http://cloud.springsource.com/vote 를 한번 찾아가 보시길... )
Roo 1.0 Release는 6월 중순에 발표될거고, 1.0 GA버전은 올해말에 공개될 예정이다.

Roo를 사용하게 되면 어떤식으로 프로그램 방법이 바뀔지는 아직 감은 없지만, 많은 사람들이 관시을 가지고 있었던 프로젝트 였던만큼, 큰 반향을 일으킬 소지는 충분히 있다. 간단하게 작성된 소스들을 보더라도, AspectJ와 많은 Anotaion들이 사용이 된다. 중요한 것은 새로운 것을 익히고 쓰기 위해서는 기본에 충실해야 한다는 것이다. 이를 쓰기 위해서도 역시 기본적인 개념과 사용법에 대해서 익숙해질 필요가 있다.

아무리 좋은 도구라도 사용하는 사람이 익숙하지 않다면, 좋은 인상을 주기 어렵다. 새로운 것을 배우는데 익숙하거나 즐기는 사람이라면 다르겠지만, 자기가 하고 있는 분야만이 전부라고 생각하는 소아적인 개발자와 관리자를 깨우치기는 정말로 어렵기 때문이다. 그래서 "돼지목에 진주"라는 말이 있나 보다.

Posted by 행복상자

어제는 근로자의 날이라서 출근하지는 않았었다. 그리고 전날은 부부동반 모임이 있어서, 늦에 들어온 것을 핑계삼아 간만에 게으름도 피우고 그랬다. 아니 사실은 게으름을 피운 것운 것이 아니라, 감기인지 못살인지 몸이 좋지 않아서 누워서 오전을 보냈다. 선천적으로 늦잠을 좋아하지 않는 관계로 시간이 무척 아까웠다.

무엇을 할까 고민하다가, Google App Engine에 스프링으로 간단한 페이지를 한번 올려봐야지라는 생각이 들었다.
최근에 Google의 Eclipse 플러그인과 SDK는 이미 설치해서 간단한 것들은 적용해 본 상태여서, Google의 App Engine의 인증만 남은 상태이므로 남은 작업은 정말 간단하다.

만약 Eclipse에 Google App Engine Plugin과 SDK를 설치 하지 않았으며,
이전에 블로그에 올렸던 다음의  글을 "Google App Engine SDK 설치 및 실행" 를 참조 하기 바란다.

위와 같이 Google App Engine을 위한 기본 환경을 만들었으면, Spring Framework를 다운 받아야 한다.
이미 Spring Framework를 이용하여 개발한 경험이 있는 개발자라면, 기존에 가지고 있던 Library들을 그대로 사용하면 되지만, 그렇지 않은 개발자라면 www.springframework.org 에서 다운 받아야 한다.
                      - Spring Framework 2.5 Dependency Version Download

지금은 SpringFramework 3.0M3가 공개되고 있지만, 정식 Release된 2.5.5버전을 예제 작성에 사용할 것이다.
(물론 다른 버전을 사용해도 큰 영향은 없을거라 생각된다. 환경만 잘 맞추어 주면 말이다.)

자 이제 본론으로 들어가서, Google App Engine의 Eclipse Plugin을 정상적으로 설치하게 되면, Eclipse의 상단 메뉴텝에 다음과 같이 3개의 아이콘들이 생겨난 것을 볼수 있을 것이다.

   



위에 첨부한 메뉴 이미지 중에서 왼쪽에 있는 메뉴 아이템을 클릭하여 "New Web Application Project"창을 아래와 같이 띄운다.

위의 창에 생성할 프로젝트 이름을 입력하고, 기본적으로 생성할 패키지명도 입력한다. 만약 Google Web Toolket를 사용하기 원하지 않으면 체크박스에서 체크 표시를 지워주고 하단에 있는 "Finish"버튼을 클릭하면 된다.

프로젝트를 생성하면 기본적인 Servlet을 예제로 제공한다. 자 일단 테스트를 위해서 이를 실행해 보자.
아래와 같이 "Debug As" 메뉴의 서브 메뉴인 "Web Application" 를 실행시키면 웹서버가 실행된다.



이를 확인하기 위해서는 웹브라우져의 주소창에 "http://localhost:8080" 입력하여 실행하면 된다.

정상적으로 동작하는 것을 확인하면, 이제 스프링을 실행할 수 있는 환경을 만들어 보겠다.
예제는 아는 사람들에게는 잘 알려져 있는 "step-by-step" 를 예제로 작업할 것이다. 환경을 만들어 주기 위해서는 이전에 다운 받은 Springframework에서 Spring.jar, Spring-mvc.jar 그리고 common-log.jar 파일을 WEB-INF/lib 디렉토리 아래로 복사한다. (아래  그림 참조)

common-log.jar 파일은 Google에서 제공하는 logging 패키지를 이용해도 되지만, Spring의 "DispatcherServlet"을 로딩할때 에러가 나기 때문에 넣어준 것이다. 위의 "step-by-step" 예제를 따라하면, 기본적인 웹페이지를 작성할 수 있을 것이다. 다만, "Ant Build"에 관한 내용과 "Unit Test"에 관한 부분은 크게 신경 쓰지 않아도 된다.

Spring의 "DispatcherServlet"을 이용한 기본적인 예제는 큰 에러 없이 작성될거라 믿는다. 만약 에러가 난다면, Google의 SDK없이 만들어서 돌려보기 바란다. 기본적인 개념을 익히는데 큰 도움이 될거라 믿는다.

일단 http://localhost:8080 을 이용해서 무리가 없으면,



위 이미지의 메뉴중(붉은 박스로 안에 있는)에 세번째 아이템(비행기 모양의 버튼)을 클릭을 하여 "Deploy Project to Google App Engine" 윈도우를 띄운다. 



위와 같은 창이 뜨면, 입력할 값들을 입력박스에 채워 넣고 Deploy를 실행하면 되는데, 이를 위해서는 Google App Engine의 인증이 필요하다. 인증을 위해서는 이미 구글의 Account가 있어야 하고, 이를 이용하여 Deplore를 진행할 수 있다.

아래의 이미지는 서버에서 서비스할 application을 위한 기본적인 정보인데, 간단하게 필요한 내용을 입력하면 된다.


위 화면의 "Applicatiion Identifier"는 자신이 원하는 App Engine상의 sub 도메인 역할을 하는 것이고, "Appication Title" 은 적절한 이름을 넣어주면 된다. 인증 관련된 부분은 특별한 설정 없이 그래도 놓은면, 누구다 다 접속이 가능하고, 별도의 추가 설정이 필요하면 "Edit" 링크를 눌러서 추가 설정을 해주면 된다. (자세한 내용은 구글에서 제공하는 가이드를 참고하기 바란다.)
 
설정을 마쳤으면 "Save" 버튼을 클릭하면 서버상의 설정을 마쳐지게 된다.

내가 작성한 셈플 프로그램은 여기에 있다.
    Sample Progrom 링크 : http://happyzoo2009.appspot.com/hello.htm

추가적인 사항으로는 Google App Engine에서 제공하는 DB는 공식적으로는 없다. 다만 Google App Engine의 Datastory를 이용이 가능하다. 하지만 이 역시도 Google에서 제공하는 Library를 통해서 JPA와 JDO틀 통한 이용이 가능하다. 이를 이용해서 Persistance 데이터들을 관리해서 사용해야 한다. 이의 사용은 기존의 관계형 DB와는 차이가 있다. 때문에 제대로 이용하기 위해서는 역시 공부하고, 분석하는 시간들이 필요하다.

하지만, 관계형 DB의 사용도 가능하나 역시 제약이 뒤 따른다. HSQLDB를 이용하여 in-memory상에서 동작을 시키는 경우이다. (이런 경우는 Hibernate의 이용이 가능하다. ) 
 
이제는 데이터를 어떤식으로 다룰지에 대한 고민들이 남아있다.
한가지 한가지씩 배워나가는 즐거움이 있는 장남감이다. SprignSource에선 Groovy와 Grails을 이용한 예제를 벌써 내 놓았다. 아직은 이들을 적용하고 싶은 생각은 없지만, 조만간 한번을 이들에 대해서도 공부하고 알아야 겠다는 생각은 늘상 가지고 있다. 일단은 Jruby를 먼저 적용해 보고 싶은 생각이 크다.





Posted by 행복상자
내가 현재 진행하고 있는 프로젝트는 Spring Dynamic Modules 1.1.2를 기반으로 개발하고 있다. 그리고 이를 기반으로 다른 솔루션 또는 Web Application들이 개발되고 있다.

지금은 지난 말까지 개발된 Framework의 일부 Architecture와 모듈을 Refactory중에 있다. 이의 필요성은 아마도 Spring DM Server가 나온다면, 사라질지도 모른다. 개발하고 있는 Core가 Spring DM Server와 거의 유사한 Architecture를 하고 있기 때문이다. 아마도 Spring DM Kernel만 있다고 누군가가 같다고 할지도 모르지만, Spring의 많은 기능을 얻어다 사용하기 때문에 이를 갈 수는 없고 많은 혜텍을 입었다고 할 수 있다.

지난 주에 Spring Dynamic Module 1.1.3이 발표되었다.
몇가지 변경된 사항을 살펴보았는데, 크게 바뀐 부분들은 눈에 들어오지 않는다.

아래는 Spring Dynamic Module의 Change Log이다.


Changes in version 1.1.3 (2009-02-13)
-------------------------------------

General
* various documentation improvements and fixes

Package org.springframework.osgi.context
* improved proxying of classes that are boot delegated outside the OSGi environment

Package org.springframework.osgi.io
* fixed manifest headers parsing problem when dealing with nested whitespaces
* fixed handling of optional required bundles
* improved OsgiBundlePatternMatchingResolver to return ContextResources
* changed OsgiBundlePatternMatchingResolver#findResources(String) visibility to protected

Package org.springframework.osgi.service
* fixed visibility issue when invoking non-public proxied methods
* improved waiting code to deal with spurious or accidental wakeups
* fixed issue with OsgiServiceProxyFactoryBean that caused autowiring to fail in some cases

Posted by 행복상자
이번이 계획하였었던 내용으로는 마지막이다.

  - Eclipse에서 hsqldb 사용하기(1)
  - Eclipse에서 hsqldb 사용하기(2)

지난번까지 해 왔던 작업들을 정리하면, 먼저,Jave와 Eclipse 환경에서 개발하기 위해서 hasqldb.jar를 Spring Framewor의 Libray디렉토리로 부터 복사해서 Eclipse의 "lib" 디렉토리에 넣어, Eclipse와 Ant로 Build 시 사용할수 있도록 환경을 만들어 주는 것을 배웠다.

그리고, Ant로 빌드하기 위해서, Data Source를 Propeties로 부터 참조할 수 있도록 별도의 파일로 나누었고,이를 참조하는 방법에 대해서 배웠다.

이번에는 지난번에 작성하였던 "Build.xml" 파일이 정상적으로 동작하는지 실행해보고, 실제로 생정한 값들이 새로 만들어진 Table에 추가되었는지를 Eclipse의 Plug-in을 통해서 확인하는 방번에 대해서 이야기 할 것이다.

우선, 가장 먼저 해야 할 일은, 지난 번에 만들어 놓은 배치 파일(server.bat)을 이용해서, hsqldb 서버를 실행시켜 주어야 한다.

나의 경우는 배치파일에 아래와 같이 정의 되어 있다. 물로 도스 창에서 Typing해서 실행할 수 있지만, 자주 사용하는 것이므로 배치파일로 만드는 것이 편리하다.

java -classpath ..\war\WEB-INF\lib\hsqldb.jar org.hsqldb.Server -database test

도스창이 뜨로 정상적으로 실행이 되었으면, 이제 본격 적으로 실행을 시켜 보겠다.

내가 사용하는 Eclipse버전은 Eclipse IDE for Java EE Develosers 버전을 www.eclipse.org 에서 다운 받아 사용하는데, 이유는 WTP(Web Tools Platform) 이 이미 포함되어 있어서 별도로 설치할 필요가 없기 때문이다.

먼저 Elclipse에서 Ant를 실행 시켜 보도록 하자.

Eclipse IDE 왼쪽 하단에 있는 툴바의 제일 왼쪽에 있는 버튼을 클릭을 한다.
(아래 그림 참조)

그러면 아래와 같은 pop-up 창이  나타날 것이다. 메뉴 항목중에 Ant를 찾아서 클릭을 해줌면 Ant의 View 윈도우가 나타난다.


만약 위 pop-up창에서 Ant 메뉴가 보이지 않으면, 위 그림 하단에 있는 "Other..."를 선태하거나, 단축키(Alt-Shiff+Q, Q)를 눌러서 아래의 "Show View" 윈도우를 호출한다.
여기서 "Ant"를 찾아 선택한다.(아래 그림 참조)


그러면 아래와 같이 Ant의 View 화면이 나타나게 된다.(사실 여기서는 Build.xml을 선택한후 Ant View를 띄우는 순서로 진행한것이다.) 
우리는 Table을 생성을 하려고 하는 것이므로 아래 그림의 왼쪽에 있는 트리에서 "ceate Tables"를 더블 클릭한다.그러면 아래와 같이 "Ant Cofiguration Selection"창이 나타 나는데 여기서는 "createTables"라는 항목을 실행 시킨다.
 
그러면 Eclipse IDE의 Consol 창에 테이블 생성이 성공 되었다는 메시지가 아래와 같이나타날 것이다.

자 그러면 이제는 Sample 데이터를 만들어 보자.
이 것도 역시 지난번에 만들어 놓은 Built.xml에 있는 스크립트를 이용하면 된다.
이번에도 Eclipse의 Ant View에서 실행 시켜 보겠다.
단추키 "Alt+Shift+Q, Q"를 이용하여 "Show View"창을 띄우고,"Ant"를 선택하면 아래와 같이 "Ant View"창을 나타날 것이다. 여기 트리에서 "loadData" 선택해서 Table을 생성했던고 마찬가지로 실행을 시킨다.


Ant는 아래와 같이 만들어 놓은 스크립트를 참조해서 데이터를 hsqldb에  생성하게 되는데, 생성되는 과정은 Eclipse IDE의 Console창의 로그를 통해서 확인이 가능하다.

자 이번에는 위의 3개의 Data가 정말로 DB의 Products 테이블로 잘 생성되어는지를 Eclipse의  Plugin을 통해서 확인해 보자.

현재 사용하고 있는 IDE에 Database를 관리해 주는 Plugin View가 없다면, 이미 여러번 사요해본 단추키 "Alt+Shift+Q, Q"를 이용하여 "Show View"창을 아래와 같이 띄우고, 창의 상단에 "data"라고 입력한다. 이때 아래의 트리는 관련된 기능들을 보여주는데,여기서 아래와 같이 "databases" 를 선택한다. 


아래의 DatabasesView창의 상단 툴바 메뉴에서 "Add"버튼을 클릭한다.
(왼쪽에서 2번째 버튼, 마우스를 가져다 대면 툴팁이 나타난다.)


그러면 Database Connection을 추가 할 수 있도록 아래와 같이 창이 나타난다.
나는 여기서 "Connetion name"을 "hSqlServe"이라고 넣었다.



위 화면에서 "Next >"버튼을 눌러서 아래와 같이 Connection 정보를 설정하는 화면으로 이동을 한다. 이미 드라이버에 대한 정보가 있다면, Combobox에서 hsqlDriver를 선택하면 되지만, 만약 없다면 "Add..." 버튼을 눌러서 드라이버 정보를 추가해야 한다.


위와 같이 설정이 되면, "Test connection"버튼을 눌러서 Connection 테스트를 해본다. 성공했으면, "Finish"버튼을 눌러서 "Databases View"창에 추가한다.

성공적으로 완료가 되었다면 아래와 같이 Tree에 추가되어 나타날 것이다.
Ant를 이용해서 추가했던 Sample 데이터를 보기 위해서는 Tree에서 우리가 보기 원하는 "PRODUCTS" 테이블을 더블클릭해 주면 된다.


그러면 그 결과 테이블들이 다음과 같이 Eclipse IDE에 나타나게 된다.


Ant를 이용해서 생성했던 3개의 새로운 데이터가 성공적으로 추가된 것이 보인다.

지금까지 여러가지를 보아왔다. hsqldb에 대한 설명은 없었지만, 개념상으로 알아두면 된다. 그리고 이는 단지 hsql을 위한 기능이 아니라, 다른 Database에 대해서도 동일하게 적용이 가는하다. 단지 여기서 이를 두고 설명한 것은 가볍고, 설치가 용이하기 때문에 이를 예제로 사용한 것 뿐이다.

그리고, Ant build를 이용하여 개발에 반복적인 작업들을 처리하도록 하였는데, 사실 이부분은 개발뿐 만 아니라 자신이 만든 코드에 대한 Unit Test에도 상당히 도움이 된다. 테이블을 생성해서 데이터를 읽는 테스트 코드를 만들고 초기화 하는 부분을 반복적으로 사용한다면, 굉장히 도움이 많이 될것이다.

마지막으로 Eclipse의 IDE에 추가해서 사용했던 Plugin은 설명한 것 말고도 다른 유용한 것들이 있다. 그러나 이 역시 지금 추가해서 사용했던 것과 대동 소이 할 것이다.

마지막으로 여기에서 사용하였던, 예제로 사용한 파일 3개와 Build.xml 파일을 아래에 추가해 놓겠다. Eclipse Project의 "db/" 디렉토리에서 생성한 파일 들이다.

 




Posted by 행복상자
지난 번에는 hsqldb를 명령행에서 실행 시키는 것에 대해서 알아 보았다.
예제는 지난 번과 마찮가지로 Step-by-Step 에 있는 내용을 이용할 것이다. 왜냐하면, 개인적으로는 Spring Framework를 처음 시작하고나 Spring MVC에 대해서 알아가는 개발자에게 가장 추천할 만한 예제이다. 물론 이것이 Spring MVC의 전부를 말해주지는 않는다. 최근에 발표된 Spring Framework 3.0.0.M1 버전에선 Anotation과 REST를 지원할 수 있도록 많은 부분이 새로 추가되고 되었기 때문이다. 그러나 그 기본은 결코 변하지 않을 것이다.

Ant를 사용해본 사람들은 Ant의 기본 Build에 이용되는 파일이 Build.xml 파일이라는 것을 익히 잘알고 있을 것이다. Ant가 Build.xml File을 실행할 때, 중복된 상수 값들은 Text파일에 저정하여 사용하는데, 여기서는 "build.properties"라는 파일을 이용하여, 정의하고 이를 "Build.xml"에서 읽어 올 것이다.

아래는 "build.properties"파일에 저장된 내용이다. Database에 접속하기 위한 기본 정보들이 정의되어 있다. 여기서 정의된 내용들을 Ant의 빌드 파일에서 읽어들여 사용할 것이다.
hsqldb의 Driver와 필요한 항복들은 아래와 같고, passwork는 여기서는 사용하지 않는다.


아래는 위에서 정의한 "build.properties"파일의 내용을 Ant의 Build.xml 파일에서 읽어오기 위해서 아래와 같이 정의한다. 공용으로 사용할 항목들은 별도로 정의하는 것이 관리하기 편리한다. 그 아래는 Build를 위한 기본 Class path를 정의하여야 한다. 여기서는 "hsqldb.jar"가 "/WEB-INF/lib" 아래 이미 복사되어져 있다. (지난 번에 이를 설명하였다.)

위에서 Data Source를 정의하고 이를 읽는 것에 대해서 설명하였다.
아래에서는 정위한 Data Source의 내용을 이용하여 Table을 생성하는 스크립트를 실행하도록 "Build.xml"에 정의한 것이다. 여기서는 "src="db/create_products.sql" 파일을 읽고, 이 파일에 정의되어 있는 스크립트를 실행하는 Task이다.
그리고 그 아래는 생성된 Table을 삭제하는 스크립트를 실행하는 Task를 정의한 것이다.
(직접 SQL 문을 호출하여 Table을 DB에서 Drop시켰다.)

아래는 위에서 정의한 "src="db/create_products.sql" 파일에 정의된 Table 생성 구문이다.
(참고로 "db/"는 디렉토리를 의미한다. Eclipse의 Project의 임의의 디렉토리 아래 db를 관리하기 위해 만들어 놓은 디렉토리이다.)
SQL문을 사용해본 경험이 있다면, 이해하는데, 크게 어렵지 않을 거하 생각된다.

아래는 "db/load_data.sql"파일에 정의해야할 구문인데, 생성된 DB Table(Products Table) 에 생성한 테스트 데이터 들이다.

아래는 위에 정의한 "load_data.sql"파일을 이용하여 Test데이터를 생성하기 위한 "Build.xml" 파일에 정의된 Task이다. src="db/load_data.sql" 이라고 정의된 것이 보일 것이다.


다음에는 이렇게 정의되어 있는 Ant의 "Build.xml" 파일을 이용하여 Eclipse에서 실행하고, 생성된 Test 데이터를 읽는 방법에 대해서 설명하려고 한다.
Posted by 행복상자
Eclipse와 Spring Framework를 이용하여 웹 개발을 한다면,가장 사용하기 쉬운 Database는 아마도 hsql이지 않을까 쉽다. 그 이유는 아무래도, Spring Framework에 포함 되어 있는 hsql.jar 라이브러리이 때문이다.

기본 적인 사용 법에 대해서는 Springframework에서 제공하는 Step-by-Step 예제에 잘 나와 있는데, 이를 기준으로 해서 설명하겠다.
먼저, Eclipse에서 설정해서 사용하기 위해서는, Build Path를 라이브러리(hsqldb.jar)를 등록 시켜 주어야 한다. Spring Framework 2.5버전을 다운 받아서, PC에 설치하였다면, "/lib" 디렉토리 아래 "hsqldb" 디렉토리 아래에 있는 "hsqldb.jar" 파일을 자신의 Eclipse의 Build Path 또는 라이브러리 디렉토리로 옮겨 주면 된다.

아래는 내가 사용하는 Eclipse의 환경이다. 참고하기 바란다. Library 디렉토리는 "war/WEB_INF/lib" 가 있고, 그 아래에 hsqldb.jar 파일이 있다.


이의 사용은 우리는 실제 운영 서버보다는 개발을 위한 용도로 쓰기가 용이한데, 이를 위해서 서버를 구동하는 방법을 알아보자.

아래와 같이 bat파일을 만들거나, DOS의 명령행에서 실행을 시켜 주면 된다.
(물론 JAVA_HOME은 정의 되어 있어야 한다.)


그러면 아래와 같이 실행되는 로그들이 창위에 나타날 것이다.


위에서는 도스 상에서 서버를 실행하는 것을 보여 주었는데, 이는 Eclipse의 Class Path에 
hsqldb.ja를 포함시키는 것과는 상관이 없다.
 
그러므로, 다음 번에는
- Ant를 이용하여, DB 테이블을 생성하고, 테스트 데이터를 추가하는 것과
- Eclipse의 Ant Plug-in을 이용하여, DB Table을 생성, 삭제하는 방법
- Eclipse의 Plug-in을 이용하여 생성된 데이터를 볼 수 있는 방법
등에 대해 알아보도록 하겠다.
 
 
 
Posted by 행복상자