SPRING FRAMEWORK 4.0 무엇이 달라졌나?

아래 내용은 spring.io에 설명된 내용을 번역한 것입니다. 기술적인 내용 중에는 저도 잘 모르는 부분이 있어, 명확하지는 않습니다. 그저, 어떤 것들이 3.0과 달라졌는 지를 훑어 보는 데에는 도움이 될 것입니다.

New Features and Enhancements in Sping Framework 4.0

Spring Framework은 2004년에 처음 release되었다. Spring 2.0은 XML namespace와 AspectJ support를 제공했고, Spring 2.5는 annotation 기반의 설정 방법을 포함하였다. Spring 3.0에서는 Java 5를 지원했고, Java-based @Configuration model을 지원했다.

Version 4.0은 Java 8의 모든 기능을 지원하는 첫 번째 Spring version이다. 그렇지만, 여전히 이전 버전의 Java version을 지원한다(최소 요구사항은 Java 6)

1. Improved Getting Started Experience

spring.io 웹사이트는 Spring을 익히기 위한 “Getting Started” guide의 전체 시리즈를 제공한다. 이 document에 있는 “Chapter 1, Getting Started With Spring” section에서 더 많은 것을 읽을 수 있다. 또한 이 사이트에서는 Spring umbrella 아래에서 배포된 많은 추가 프로젝트를 제공한다.

2. Removed Deprecated Packages and Methods

Deprecated된 모든 package와 method들이 이번 4.0 버전에서 삭제되었다.

추가/삭제/변경된 모든 package 정보들을 확인하고 싶다면, API Difference Report를 보면 된다.

Optional third-party dependency에 대해서는 2010년 말 이후에 release된 버전을 지원한다. 예외적으로 Hibernate Validator는 4.3 이상을, Jackson은 2.0 이상을 지원한다.

3. Java 8 (as well as 6 and 7)

Spring Framework 4.0은 Java 8을 지원한다. lambda expression을 사용할 수 있으며, Spring callback interface에 method 참조를 사용할 수 있다. 몇 가지 annotation은 “@Repeatable” 처럼 개조되었다. 

Spring 4는 JDK 6 update 18부터 지원을 하지만, 새로 시작하는 프로젝트는 JDK 7 또는 8로 개발할 것을 권장한다.

4. Java EE 6 and 7

Java EE 6 이상에서 JPA 2.0과 Servlet 3.0이 고려되어졌다. Goole App Engine과 더 오래된 application server들을 위해 Serlvet 2.5에 배포하는 것도 가능하다. 그러나, 테스트 환경을 위해서는 Servlet 3.0 이상을 사용할 것을 권장한다.

5. Groovy Bean Definition DSL

Groovy DSL을 사용하여 외부 bean 설정을 하는 것이 가능해 졌다. XML bean definition을 사용하는 것과 유사하다. 그러나, 좀 더 간결한 문장을 사용할 수 있다. Groovy를 사용하면, 개발 초기 단계에서 설정을 쉽게 embed하여 사용할 수 있도록 해 준다. 예를 들어,

def reader = new GroovyBeanDefinitionReader(myApplicationContext)
reader.beans {
    dataSource(BasicDataSource) {
        driverClassName = "org.hsqldb.jdbcDriver"
        url = "jdbc:hsqldb:mem:grailsDB"
        username = "sa"
        password = ""
        settings = [mynew:"setting"]
    }
    sessionFactory(SessionFactory) {
        dataSource = dataSource
    }
    myService(MyService) {
        nestedBean = { AnotherBean bean ->
            dataSource = dataSource
        }
    }
}

위와 같이, Datasource를 코드에서 쉡게 정의하여 사용할 수 있다.

6. Core Container Improvements

다음은 Core container의 몇 가지 향상된 점들이다.

  • Spring은 Bean을 injecting할 때, generic type을 다룰 수 있다. 예를 들어, Spring Data “Repository”를 사용할 때, 정의된 구현제를 쉽게 사용할 수 있다. more…
  • Spring의 meta-annotation을 사용한다면, Source annotation에서 attribute를 재정의하는 것이 가능하다.
  • Bean들은 list나 array에 autowired 될 때, 정렬이 될 수 있다. @Order 혹은 Ordered interface를 사용해서…
  • @Lazy annotation도 injection 시점에서 사용될 수 있다.
  • Java-based configuration을 사용하는 개발자들을 위해 @Description annotation이 추가되었다.
@Configuration
public class AppConfig {

    @Bean
    @Desciption("Provides a basic example of a bean")
    public Foo foo() {
        return new Foo();
    }

}
  • Conditionally filtering bean을 위한 generalized model은 “@Conditional” annotation을 통해 추가된다. 이것은 “@Profile”과 유사하지만, user-defined strategy가 programmatically하게 개발되는 것을 가능하게 한다.(무슨 말이야…)
  • CGLIB-based proxy classes는 더 이상 default constructor를 필요로 하지 않는다.
  • Time zone이 framework 전반에 걸쳐 관리되어 진다. (LocaleContext)

7. General Web Improvements

Servlet 2.5 server에 배포하는 것은 선택사항이다. 그러나, Spring 4.0은 Servlet 3.0이상의 환경에 배포하는 것에 초점이 맞추어져 있다. 만일, Spring MVC Test Framework을 사용한다면, 반드시 Servlet 3.0 환경이어야 한다.뒤에 언급될 WebSocket 지원 외에도, 다음 개선 사항들이 포함되어 있다.

  • @RestController annotation을 사용할 수 있다. @RequestMapping method에 @ResponseBody를 붙이지 않아도 된다.
  • AsyncRestTemplate class가 추가되었다. 이것은 REST client를 개발할 때, Non-blocking asynchronous를 지원한다. more…
  • Spring MVC application을 개발할 때, comprehensive timezone을 지원한다. more…

8. WebSocket, SockJS, and STOMP Messagin

spring-websocket은 웹애플리케이션에서 client와 server간의 WebSocket-based two-way communication을 지원한다. fully. (여기서 말하는 Two-way는 일반적인 TCP 통신을 의미함.) 또한 아직 WebSocket protocol을 지원하지 않는 브라우저를 위해 SockJS-based fallback option도 제공한다. 새로운 spring-messaging module은 STOMP에 대한 지원도 추가한다.

9. Testing Improvements

Spring 4.0은 몇 가지 새로운 기능을 추가했다.

  • spring-test에 있는 대부분의 annotation은 meta-annotation으로 사용될 수 있다.
  • Active bean definition profile은 programmatically하게 만들 수 있다. @ActiveProfiles의 resolver attribute을 통해.
  • spring-core에 SocketUtils가 추가되었다. 이것은 localhost에서 TCP와 UDP 서버 port를 scan할 수 있도록 해 준다.
  • org.springframework.mock.web에 있는 mock set들은 이제 Servlet 3.0 API를 기반으로 동작한다.


+ Recent posts