Tag Archives: 부트

Gradle 기반 Spring Boot 프로젝트 구축하기

Spring Boot는 기존의 복잡한 Spring 프레임워크를 활용한 개발을 매우 간단하게 활용할 수 있도록 만들어진 프레임워크입니다. Groovy기반의 Rails의 느낌이 날 정도의 개발 환경을 구축할 수 있지만 여기서는 Java 기반의 프로젝트 개발을 설명합니다. IntelliJ에서 진행되었으며 Eclipse도 크게 다르지 않을것이라 생각합니다.

687474703a2f2f626c6f672e737072696e67736f757263652e6f72672f77702d636f6e74656e742f75706c6f6164732f323031332f30382f737072696e672e706e67

잠깐밖에 다루어보지 않았지만 Spring Boot의 가장 큰 장점은 설정 파일이 사실상 전무하게 프로젝트를 당장 구동할 수 있다는 점인것 같습니다. 모든것을 어노테이션만으로 구성할 수 있습니다. 이미 Spring이 많은부분 이렇게 진화해왔지만 아예 시작부터 운영까지 단순화하는것이 목적으로 보여집니다. Spring의 경량화 버전이라기 보다는 그림과 같은 손쉽게 사용할 수 있는 인터페이스를 제공하고 있다고 보는것이 옳은것 같습니다.

2

IntelliJ를 실행한 뒤 Quick Start에서 Create New Project를 선택합니다. 위와 같은 화면이 뜨는데 Gradle를 선택해 줍니다.

3-2

이후에 Gradle 설정 화면이 나옵니다. 여기서 위와 같이 2개를 체크합니다. 위와 같은 옵션은 기본적으로 Gradle을 위한 프로젝트의 기본 형태를 자동으로 생성해 줍니다.

4

프로젝트가 생성되면 위와 같은 형태의 프로젝트 구조를 확인할 수 있습니다. 기존의 Eclipse 환경에 익숙한 저에게는 매우 특이한 디렉토리 구조라고 느껴집니다. 위는 Maven 프로젝트의 기본 구조이며 다음과 같은 의미를 가지고 있습니다.

디렉토리 설명
src/main/java 어플리케이션, 라이브러리 소스
src/main/resources 어플리케이션, 라이브러리 리소스
src/main/filters 리소스 필터 파일
src/main/assembly 어셈블리 디스크립터
src/main/config 설정 파일
src/main/scripts 어플리케이션, 라이브러리 스크립트
src/main/webapp 웹 어플리케이션 소스
src/test/java 테스트 소스
src/test/resources 테스트 리소스
src/test/filters 테스트 리소스 필터 파일
src/site 사이트
LICENSE.txt 프로젝트의 라이센스
NOTICE.txt 프로젝트 라이브러리에서 필요로 하는 주의사항 특징
README.txt 프로젝트의 리드미
buildscript {
    repositories {
        maven { url "http://repo.spring.io/libs-snapshot" }
        mavenLocal()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.0.0.RC1")
    }
}

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'spring-boot'

sourceCompatibility = 1.7
version = '1.0'

repositories {
    mavenCentral()
    maven { url "http://repo.spring.io/libs-snapshot" }
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.0.0.RC1")
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

build.gradle 파일을 위와같이 수정해 줍니다. build.gradle 파일이 한번 수정되면 IntelliJ가 자동으로 필요한 라이브러리를 다운받고 의존성 문제를 해결해 줍니다. 하지만 곧바로 적용하고 싶으실 경우 다음과 같은 방법을 사용하시면 됩니다.

5

보시면 Gradle 탭이 존재합니다. 눌러 보시면 실행가능한 Task 리스트가 나옵니다. 탭의 왼쪽 상단을 보시면 강제 리프레시 버튼이 존재하는데 저걸 눌러주면 의존성 문제를 강제로 해결해 줍니다.

6

이제 부터 위와 같이 hello 패키지를 만들고 그안에 두개의 클래스를 추가할 것입니다. 먼서 HelloController부터 만들어보겠습니다.

package hello;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class HelloController {

    @RequestMapping("/")
    public String index() {
        return "Greetings from Spring Boot!";
    }

}

스프링 개발을 기존에 해오신 분들이라면 위의 의미를 바로 아실것입니다. 한가지만 짚고 넘어가자면 @RestController는 @Controller와 @ResponseBody를 합친 기능을 합니다. 그러므로 곧바로 렌더링할 스트링을 바로 반환하는것을 볼 수 있습니다. 이번에는 Application을 만들어 보겠습니다.

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        System.out.println("Spring Boot Started.");
    }

}

이제 끝났습니다. 예상이 되시겠지만 위에서 보여지는것들을 몇가지 정리해보자면 다음과 같습니다.

  • @Configuration 태그는 현재의 클래스가 Spring의 설정파일임을 어플리케이션 컨텍스트에게 알려주는 역할을 합니다.
  • @EnableAutoConfiguration 은 Spring Boot가 클래스패스 세팅, 다른 Bean들, 다양한 설정들에 의해 Bean을 추가하도록 합니다.
  • 일반적으로 기존의 Spring MVC 어플리케이션에서는 @EnableWebMvc 태그를 사용했지만 Spring Boot는 클래스패스에서 spring-webmvc를 발견할 경우 자동으로 추가합니다. 이러한 플래그는 DispatcherServlet을 세팅하는것과 같은 개발중인 어플리케이션을 웹어플리케이션으로 활성화 하는 핵심 키가 됩니다.
  • @ComponentScan 은 Spring에게 hello 패키지 안에서 다른 컴포넌트, 설정, 서비스를 찾도록 합니다. 이 설정을 통해 HelloController를 찾는것이 가능해집니다.

여기서 main() 메소드는 Spring Boot의 SpringApplication.run() 메소드를 실행함으로써 어플리케이션을 시작하게 됩니다. 여기까지 단 한줄의 XML 코드도 볼수 없었습니다. 심지어 web.xml도 보이지 않습니다. 이 어플리케이션은 100% 순수한 Java 어플리케이션이고 이 프로젝트를 구동하기 위한 어떤 인프라(WAS 설정등)의 구성 작업도 하지 않았습니다.

7

이제 어플리케이션을 구동해보겠습니다. Application 클래스에서 마우스 오른쪽 버튼이나 Ctrl + Shift + R을 눌러 실행합니다.

8

위와 같이 어렵지 않게 서비스가 구동됩니다. 8080포트로 구동이 되었네요. http://localhost:8080/으로 접속해서 확인해 보면 HelloController.index()가 실행된것을 확인할 수 있습니다. 지금까지 제작한 예제를 첨부해두겠습니다. [HelloSpringBoot]

참고 : https://spring.io/guides/gs/spring-boot/