Spring Boot | Spring Boot 이란? | Hello World


Hello World 생성하기

Gradle 프로젝트를 생성한다.

디렉토리 spring-boot-hello-world를 생성하고, Gradle 프로젝트를 초기화한다.

$ mkdir spring-boot-hello-world
$ cd spring-boot-hello-world

Gradle 프로젝트를 초기화한다.

$ gradle init

BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed

소스 코드 자바 디렉토리를 만든다.

$ mkdir -p src/main/java/sample/springboot

소스 코드를 작성한다.

build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.6.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
}

jar.baseName = 'spring-boot-hello-world'

src/main/java/sample/springboot/Main.java

package sample.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Main {

    public static void main(String[] args) {
        try (ConfigurableApplicationContext ctx = SpringApplication.run(Main.class, args)) {
            Main m = ctx.getBean(Main.class);
            m.hello();
        }
    }

    public void hello() {
        System.out.println("Hello Spring Boot!!");
    }
}

디렉토리 구조

$ tree
.
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    └── main
        └── java
            └── sample
                └── springboot
                    └── Main.java

어플리케이션 실행

Gradle로 실행

$ gradle bootRun
 

> Task :bootRun

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.6.RELEASE)

(생략)
Hello Spring Boot!!
(생략)

BUILD SUCCESSFUL in 20s
3 actionable tasks: 3 executed

빌드 실행

$ gradle build
$ java -jar build/libs/spring-boot-hello-world.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.6.RELEASE)

(생략)
Hello Spring Boot!!
(생략)

설명

build.gradle 설정 Spring Boot 용 Gradle 플러그인이 포함되어 있기 때문에 처음에 이를 로드한다.

build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.6.RELEASE")
    }
}

apply plugin: 'org.springframework.boot'

그리고 일반적인 Java 프로그램을 만들 뿐이라면, spring-boot-starter에 종속(dependencies)되도록 추가한다.

build.gradle

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter'
}

Spring Boot 기동

Spring Boot의 기동은 SpringApplication 클래스를 사용한다. 가장 간단한 방법은 SpringApplication#run (Object, String …)을 사용하는 것이다.

Main.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Main {

    public static void main(String[] args) {
        try (ConfigurableApplicationContext ctx = SpringApplication.run(Main.class, args)) {
            Main m = ctx.getBean(Main.class);
            m.hello();
        }
    }

    public void hello() {
        System.out.println("Hello Spring Boot!!");
    }
}
  • run () 메소드의 첫번째 인수는 @EnableAutoConfiguration으로 어노테이션 클래스의 Class 객체를 건네 준다.
    • Main 클래스는 @SpringBootApplication 어노테이션되어 있지만, 이것은 @Configuration, @EnableAutoConfiguration, @ComponentScan 3개의 클래스를 어노테이션 설정한 것과 동일하다.
    • @Configuration은 Spring의 다양한 설정을 Java 코드상에서 할 수 있도록 한 어노테이션이다.
      • 예전 Spring은 XML으로 설정을 썼지만, 지금은 Java 코드에서 설정하는 것이 주류를 이루고 있다 같다.
    • @EnableAutoConfiguration는 Spring 설정을 자동화하기 위한 어노테이션이다.
      • 이 종속성을 추가하는 것만으로 Spring MVC 등의 라이브러리를 설정 기입없이 사용할 수있게 된다.
    • @ComponentScan는 DI 컨테이너가 관리하는 Bean을 자동 등록하는 어노테이션이다.
      • 이제 주석 된 클래스를 기점으로 부하의 패키지를 재귀적으로 검색하여 @Component 어노테이션이 부여 된 클래스를 Bean으로 컨테이너에 등록한다.
    • 이 3 개의 어노테이션은 대체로 함께 사용하는 경우이 많기 때문에, @SpringBootApplication를 사용하면 조금 편해진다.
  • 두 번째 인수는 커멘드 라인의 인수를 전달한다.

Gradle에서 실행 빌드

어플리케이션의 기동은 spring-boot-gradle-plugin이 제공하는 bootRun 테스크를 사용한다.
jar 생성은, 보통의 build 테스크로 가능하다.
생성된 jar는 일반적으로 jar -jar <jar 파일>에서 실행할 수 있다.

소스 코드