Tag Archives: spring

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/

Spring Boot CLI 맥 환경에 설치하기

Spring Boot

스프링부트를 이용하면 스프링 기반인 프로덕션 수준의 어플리케이션과 서비스를 최소한의 복잡함으로 만들 수 있습니다. 스프링 플랫폼의 컨셉을 그대로 가지고 있으며 새로운 또는 기존의 유저들이 쉽게 접할 수 있습니다.

스프링부트를 이용하여 java -jar 를 사용하는 stand-alone 자바 어플리케이션을 구동할 수 있으며 기존의 전통적인 방식의 WAR 디플로이 방식또한 사용할 수 있습니다. 스프링 스크립트를 작동하기 위한 커맨드라인 툴도 제공합니다.

스프링부트의 주 목적은 다음과 같습니다.

  • 모든 스프링 개발을 위한 근본적으로 더 빠르고 폭넓은 시작 경험을 제공
  • 기존의 스프링의 특징을 고수하지만 요구사항의 변동에 빠르게 대응할 수 있도록 함
  • 큰 규모의 프로젝트에서 사용되는 비-기능적인 범위(임베디드 서버, 보안, 통계, 상태체크, 외부화된 설정)를 제공
  • 코드 생성과 XML 설정이 전혀 필요 없음

Spring Boot CLI

스프링부트 CLI는 스프링을 이용한 프로토타입을 빠르게 만들 수 있도록 해주는 커맨드라인 툴 입니다. 이 툴은 자바 문법과 유사한 Groovy 스크립트를 실행시킬 수 있습니다. 스프링부트를 사용함에 있어서 CLI는 필수사항은 아닙니다.

커맨드라인 툴을 이용하기 위해서는 1.6 버전 이상의 Java SDK가 필요합니다. (현재 openjdk 1.7.0_25에서 약간의 이슈가 있기에 그 이전버전이나 1.6을 권장함) 다음의 명령을 사용하여 현재 설치되어있는 Java의 버전을 확인하도록 합시다.

$ java -version

이 글에서는 Homebrew를 사용하는 OSX 환경에서의 설치를 가정하고 내용을 진행합니다. 당연히 Homebrew가 설치된 맥이 있어야 합니다. 다음의 명령을 사용하여 설치를 진행합니다.

$ brew update
$ brew tap pivotal/tap
$ brew install springboot

Homebrew는 spring을 /usr/local/bin 이하에 설치하게 됩니다. 테스트를 위해 정말 간단한 웹 어플리케이션을 작성해 보겠습니다. 파일이름은 app.groovy로 합니다.

@Controller
class ThisWillActuallyRun {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!"
    }

}

이제 다음과 같은 명령어로 실행을 합니다.

$ spring run app.groovy

이제 사용하시는 브라우저를 통해 http://localhost:8080으로 접속해 보시면 다음과 같은 내용을 확인할 수 있습니다.

Hello World!

참고 : https://github.com/spring-projects/spring-boot