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를 기반으로 동작한다.

– 끝 –

Maven Tomcat plugin 설정

Apache Tomcat을 maven으로 실행하기 위한 pom.xml 설정

<build>
    <plugins>
    :
        <!-- tomcat -->
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <charset>UTF-8</charset>
                <uriEncoding>UTF-8</uriEncoding>
                <path>${tomcat.path}</path>
                <port>${tomcat.port}</port>
                <url>${tomcat.url}</url>
                <username>${tomcat.username}</username>
                <password>${tomcat.password}</password>
            </configuration>
        </plugin>
    </plugins>
    :
</build>

Tomcat을 실행하기 위한 maven 명령

mvn clean install tomcat7:run

맥북 한영 전환 키 변경 방법

Mac은 한영 전환을 <Command + Space>를 클릭으로 전화하고, 한자는 <Option + Return>으로 변환할 수 있다. 이것을 다음과 같이 바꾸는 과정을 알아 보도록 한다.

한영 전환: <Shift + Space> or <오른쪽 Command>
한자: <오른쪽 Option>

지금 알아볼 방법은, 기존 입력방식을 바꾸는 것이 아니라, 새로운 방식을 추가하는 것이다. 다시말해, 위와 같이 설정하더라도,<Command + Space>와 <Option + Return>은 그대로 동작한다는 것이다.

자, 이제 방법을 알아보자.
우선, 프로그램을 하나 설치해야 한다. 아래 사이트로 가서 프로그램을 다운받아 설치하자.

https://pqrs.org/osx/karabiner/

Karabiner

설치가 끝났다면, Launchpad에 추가된 것을 확인할 수 있다.

Launchpad_2014-11-07_18-09-55

Karabiner를 실행하면, 아래와 같은 화면이 나타나며, <Change Key> tab에서 [For Korean – Items for backwards compatibillity]를 찾는다.

Karabiner_2014-11-07_18-54-45

[Make Command_R, Option_R as HanEng, Hanja keys(except virtual machine, RDC)] 항목을 찾아, 그 밑에 있는 3개의 항목을 모두 선택하면, 끝이다.

끝으로,  이 프로그램은 맥의 설정을 변경하는 것이 아니기 때문에, 프로그램이 항상 실행되어 있어야 한다.

[ERD Tool] Eclipse ERMaster plug-in 설치

DB 설계를 하기 위해서는 ERD를 그려야 하는데, ERMaster는 Freeware인데다가, Eclipse plug-in이기 때문에 Eclipse 안에서 코딩과 ERD를 함께 작업할 수 있어서 편리하다. 게다가 기본적인 기능은 모두 갖추고 있으며, XML로 저장되기 때문에 버전관리에도 용이하다.

1. 설치하기

설치 방법은 다른 Plug-in과 마찬가지로 simple하다. 먼저 Eclipse 상단의 아래 메뉴를 클릭하자.
Help > Install New Software…
그러면, 아래와 같은 화면이 나타날 것이다.

ermaster-1

위 화면의 “Work with”에 아래 주소를 입력하고 (Enter) key를 입력한다.
http://ermaster.sourceforge.net/update-site/
그리고, List에서 모든 항목을 선택한 후, (Next) 버튼을 click하면 된다. 나머지는 다른 Plug-in 설치할 때와 마찬가지로 진행하면 된다.

2. 사용하기

Eclipse를 restart한 후, “File > New > Other…” 메뉴를 클릭하거나 Hot key <Ctrl + N>을 click한다.

ermaster-2

위 화면에서, 입력박스에 ermaster라고 입력하면, List에 ERMaster라는 항목이 나타난다. 이것을 선택하고 (Next)버튼을 click한다. 아래 화면이 나타나며, ERD 파일을 생성할 폴더를 선택하고, 파일명을 입력한 다음 (Next) 버튼을 클릭한다.

ermaster-3

그러면, 아래 그림과 같이 데이터베이스를 선택하는 화면이 나타나고, 원하는 데이터베이스를 선택한 다음 (Finish)버튼을 click한다.

ermaster-4

그러면, Editor 화면에 아래 처럼 ERD를 그릴 수 있는 화면이 나타난다.

ermaster-5

Eclipse에 SVN 설치하기

Eclipse에 SVN을 설치하기 위해서는 2가지를 설치해야 한다.
하나는 Subversive plug-in이고,
또 하나는 SVN에 연결하기 위한 SVN Connector를 설치해야 한다.
다음 설명들은 Eclipse Luna에 SVN을 설치하는 내용이다.

1. Subversive plug-in 설치

Eclipse Menu click
Help > Eclipse Marketplace…
Find에 “subversive”를 입력하여 조회한 후, (Install) click

Eclipse_Marketplace_2014-11-07_12-10-35

아래 화면이 나타나면, Checkbox를 모두 선택한 후, (Confirm) click

Eclipse_Marketplace_2014-11-07_13-04-27

나머지 화면에서는 일반적인 Plug-in 설치할 때 처럼 진행한다.
설치가 완료되면, Eclipse를 restart해야 한다는 메시지가 나타나고,
Eclipse를 restart하면 설치가 완료된다.

2. Subversive SVN connector 설치

Subversive 설치가 끝나고, Eclipse가 restart되었다면, 아래 메뉴를 클릭한다.

Help > Install new software

아래 화면이 나타나면, “Work with” 입력창에 아래 주소를 입력하고 (Enter) 입력.

http://community.polarion.com/projects/subversive/download/eclipse/4.0/luna-site/

Install_2014-11-07_13-18-28

위 화면에서와 같이 “Subversive SVN Connectors”만을 선택하고, (Next) 버튼 click.
역시, 다른 plug-in 설치하는 방식으로 진행하고, eclipse restart.

3. SVN Perspective 열기

아래와 같이 “Open perspective” 버튼을 클릭하면, Perspective를 선택할 수 있는 팝업 화면이 나타나며

Java_-_Eclipse_-_Userspatrickdevprojectkogasworkspace_2014-11-07_13-33-39.png_2014-11-07_13-35-41

그 중, SVN Repository Exploring을 선택하고, (OK)버튼을 클릭하면  아래 그리과 같이, SVN 버튼이 추가되고, Repository를 관리할 수 있는 화면으로 바뀐다.

SVN_Repository_Exploring_-_Eclipse_-_Userspatrickdevprojectkogasworkspace_2014-11-07_13-39-12

이제, Repository를 등록하여 사용하면 된다.