이번 포스팅은 스프링 4.0에 대한 것이다. 다양한 프레임워크가 각광을 받고 있지만, 엔터프라이즈급 어플리케이션을 안정적으로 실행해야 한다면 스프링을 선택하게 될것같다... 자바를 놓지 않는 한 스프링과는 땔수 없는 관계가 될듯하다. 

현재는 4.0 버전의 스프링이 나와있고, 올해 안으로 스프링 4.1 버젼이 릴리즈 된다고 한다.(8~9월)




Srping 4.0  Overview


Biggest changes :

. JAVA 8 지원 => Lamda , Date and Time API, Repeatable annotation등 자바8 을 지원한다. 

. JAVA 7 EE APIs 지원 => RestTemplate을 위한 비동기 API 지원, Bean Validation, EL3.0 JMS 2.0, Servelet 3.1                                             등을 지원

. WebSocket 지원 

. 메시지기반 프로그램 아키텍쳐 제공 => 웹소켓 프로토콜을 이용하여 메세지 기반 아키텍쳐 구성할수 있다.                                                                                        (STOMP)


Smaller changes : 

.@javax.transaction.Transactional  

. New @Conditional annotation

. New @RestController annotation

. AsyncRestTemplate

. Autowiring of generic types

. Groovy based config


자바가 자바8 버젼에서 많은 기능의 변화를 주었다면 스프링도 거기에 맞춰서 여러가지 변화를 주었다.  세상의 변화에

어쩔수 없이 따라가는 느낌이 있긴하지만... 

그중에 가장 관심 있는 부분이 WebSocket을 지원하는 것이다. 스프링 자체 웹소캣을 지원하면서, Low Level 웹소캣이

갖는 단점을 보완하였다. 아직 직접 써보진 않았지만 곧, 스프링4.0 의 웹소캣을 활용한 샘플 프로그램을 작성해 포스팅

하겠다. 개인적으로 작은 변화중에는 Groovy를 상요한 DSL 정의가 가능하다는 점이다. Gradle 뿐만 아니라 Spring 4.0 

에서도 Groovy를 사용하는걸 보면, Groovy 의 활용도는 점점 높아질듯하다. 

     Groovy DSL 관련 내용 (http://spring.io/blog/2012/11/06/a-groovy-dsl-for-spring-integration)




Srping 4.0  프로젝트 설정


spring4.0 .zip  <= 완성 프로젝트


스프링 4.0을 이용해서 간단한 RestService를 제공하는 프로젝트를 구성했다. 이를 구성하고 있는 요소별로 간략히 설명하겠다.

최종 완성된 기능은 다음과 같이 특정, URL 을 호출하고 Path Variable로 값을 넘기면, 그값을 다시 Json 형태로 출력해주는 서비스를 구성할것이다.


Servlet & Spring Configuration 

=> 서블릿 및 스프링 컨텍스트 관련 설정은 XML이 아닌 Class 기반으로 설정하였다.(새로운것에 익숙해지자)


WebInitializer.java 는 web.xml  에서 설정하던 Servlet 관련 설정을 대신한 것이다. 

서블릿에 Annotation 기반 환경설정을 할 ServerConfig.class를 설정하고, Front Controller를 추가 한다. 

다음엔 스프링 관련 설정이 들어갈 ServerConfig.class를 살펴보자



@Configuration 은 이 빈이 스프링 설정과 관련되어 있음을 알려준다. 

@ComponentScan 은 해당 패키지를 기준으로 Annotation을 읽어 들어오겠단 것입니다. 이번 프로젝트의 경우에는 milo 패키지안에 @RestController 어노테이션을 달고 있는 컨트롤러가 등장한다.

@EnableWebMvc는 자바소스기반으로 스프링 MVC를 설정함을 나타낸다.

클래스 내용을 보면 일반적인 XML 기반의 설정과 같다고 보면 될거 같다. 여기서는 단순히 ViewResolver 만 설정해 주었지만, XML에서 injection을 받는 부분은 @Autowired 어노테이션을 이용하여 가지고 와서 각 Bean에 셋팅해주는 작업들을 진행하면 된다.



마지막으로 Json 형태로 데이터를 리턴시킬 Controller 를 살펴 보자. 

@RestController 라는 어노테이션이 보이는데, 기존에 @Controller + @ResponseBody 를 대신해준다. 

pathVariable을 이용해서 URL로부터 값들을 받아서 Object에 저장후 값을 리턴시킨다.




맺음말

요즘 내공을 쌓는답시고... 너무 잡다하게 벌려 놓는거 같지만... 그래도 나름 잼있게 공부하는중. 

다음 스프링관련 포스팅은 소캣을 활용한 Vote 프로그램 2 버젼이 될거 같다.


Posted by 마일로
: