Categories
JAVA

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

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

687474703a2f2f626c6f672e737072696e67736f757263652e6f72672f77702d636f6e74656e742f75706c6f6164732f323031332f30382f737072696e672e706e67

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

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

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

프로젝트가 생성되면 위와 같은 형태의 프로젝트 구조를 확인할 수 있습니다. 기존의 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가 자동으로 필요한 라이브러리를 다운받고 의존성 문제를 해결해 줍니다. 하지만 곧바로 적용하고 싶으실 경우 다음과 같은 방법을 사용하시면 됩니다.

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

이제 부터 위와 같이 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 설정등)의 구성 작업도 하지 않았습니다.

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

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

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

Categories
JAVA

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

Exit mobile version