사전 준비 사항: 아래 글을 읽었거나, 준비가 된 상태.
(준비) Gradle 설치하기 – Spring4
(준비) STS 및 Gradle Support plugin 설치
STS와 Spring4를 이용해 console에 “Hello World”라고 출력하는 간단한 프로그램을 만들어 보자. 이번에는 STS의 도움을 받지 않고, 수작업으로 해 보도록 하겠다. 처음 부터 자동으로 하게 되면, 뭐가 어찌 어찌 된 건지 알기 어렵기 때문이다.
1. Project 생성
“File > New > Other”를 클릭한다.
“General – Project”를 선택하고 (Next) click
Project name에 “demo1″이라고 입력하고, (Finish) 버튼 click한다. 그러면, 아래와 같이 일반 프로젝트가 텅빈 상태로 생성된다.
이제, 프로젝트 위에 마우스를 올려 놓고, 오른 마우스를 click하여 팝업메뉴가 나타나면, “New > Configure > Convert to Gradle Project” 를 클릭한다. 그러면, Console에 “BUILD SUCCESSFUL”이라는 메시지가 나타나고, 프로젝트 아이콘이 “G”가 붙은 폴더 아이콘으로 변경될 것이다.
2. 코드 작성
이제 코드를 작성해 보자. 먼저 demo1 Project를 선택하고, 오른 마우스를 클릭하여 나타나는 팝업 메뉴에서 “Property” 메뉴를 선택하자.
위와 같은 화면이 나타날 것이며, 왼쪽 리스트에서 “Java Build path”를 선택하여 나타난 오늘쪽 화면에서 “Source” tab를 선택하고, 다시 (Add folder) 버튼을 클릭한다. 새로운 팝업화면이 나타나고, 입력박스에 “src/main/java”를 입력한 후 (Finish) 버튼을 클릭한다. 그러면, 아래와 같은 화면으로 바뀔 것이다.
이번에는 gradle의 설정 파일인 build.gradle을 project folder에 아래와 같이 생성한다.
apply plugin: 'application'
mainClassName = 'demo.Application'
repositories {
mavenCentral()
}
dependencies {
compile("org.springframework:spring-context:4.1.2.RELEASE")
}
이 설정을 잠깐 살펴보면,
mainClassName이 ‘demo.Application’으로 되어 있으니, gradle로 실행을 하면, demo package의 Application이라는 class가 실행될 것이다.(아직 작성하지 않았다)
repositories에 mavenCentral()이 적혀 있으니, maven의 공식 repository를 사용한다는 뜻이고,
dependencies에 compile(‘org.springframework:spring-context:4.1.2.RELEASE’)라고 적혀 있으니, maven으로 보자면, 아래 모듈이 포함될 것이다.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.2.RELEASE</version>
</dependency>
build.gradle의 변경 정보를 반영하기 위해, demo 프로젝트를 선택하고, 오른 마우스를 클릭하여 나타난 팝업메뉴에서 “Gradle > Refresh Dependencies” 메뉴를 클릭한다. 그러면, 아래와 같이 바뀔 것이다.
Maven project에서와 유사한 화면이다. 이제, 코드를 작성할 차례다. “src/main/java” folder에 demo라는 package를 만들고 아래와 같이 3개의 파일을 작성하자.
MessageService.java
package demo;
public interface MessageService {
public String getMessage();
}
HelloWorldMessage.java
package demo;
public class HelloWorldMessage implements MessageService {
public String getMessage() {
return "Hello World";
}
}
Application.java
package demo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
public class Application {
@Bean
MessageService helloWorldMessageService() {
return new HelloWorldMessage();
}
public static void main(String[] args) {
ApplicationContext context =
new AnnotationConfigApplicationContext(Application.class);
MessageService service = context.getBean(MessageService.class);
System.out.println(service.getMessage());
}
}
파일들의 관계를 살펴보면, 이렇다.
MessageService.java는 interface이고, 이를 구현한 구현체는 HelloWorldMessage.java이다. 여기까지는 그 동안 보아왔던 일반적인 구조다. Application.java를 살펴보자. 눈에 띄는 것은 “@Bean”. 이것은 그동안 Spring XML 설정에서 작성해 왔던 <bean>과 같은 기능을 하는 Annotation이다. 이 덕분에, 아래 코드가 MessageService 대신, HelloWorldMessage class를 사용하게 된다.
MessageService service = context.getBean(MessageService.class);
context.getBean()에 넘겨진 MessageService.class를, spring은 구현체를 return하려고 하는데, return type이 MessageService인 설정(@Bean)을 찾아서 있으면 그것을 return하게 되는 것이다. @Bean의 영향은 잠시 뒤에 알아보도록 하자.
이제, 실행을 해볼 차례다.
demo 프로젝트를 마우스로 선택하고, 오른 마우스 버튼을 클릭 하여 나타나는 팝업 메뉴에서 “Run as > Gradle build” 메뉴를 클릭하면, 아래 화면이 나타난다. 다만, 앞으로 하게될 설정을 하고, 실행을 하게 되면, 이 화면은 나타나지 않는다. 다시 나타나게 하려면, “Run as > Gradle build…”를 선택하면 된다.
위 화면에 “run”을 입력하고 (Run) 버튼을 클릭하면, 실행이 된다. 결과는 console화면에서 확인할 수 있다. 아래와 같은 결과를 볼 수 있다면, 정상적으로 실행된 것이다.
[sts] -----------------------------------------------------
[sts] Starting Gradle build for the following tasks:
[sts] run
[sts] -----------------------------------------------------
:compileJava
:processResources UP-TO-DATE
:classes
:run11월 22, 2014 12:49:18 오전 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
정보: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@5e9f23b4: startup date [Sat Nov 22 00:49:18 KST 2014]; root of context hierarchy
Hello World
BUILD SUCCESSFUL
Total time: 0.567 secs
[sts] -----------------------------------------------------
[sts] Build finished succesfully!
[sts] Time taken: 0 min, 0 sec
[sts] -----------------------------------------------------
이제, @Bean의 역할을 체험할 차례다. Application.java에서 “@Bean”을 삭제하고 실행해 보라. 아래와 같은 어마무시한 에러 문자를 확인할 수 있을 것이다.
끝~