Spring Boot
Spring Boot 는 production 급의 독립형 Spring 어플리케이션을 쉽게 만들 수 있으며, spring 설정이 거의 필요없다.(고 하지만 이거슨 거짓말! ㅜ)
아래는 간략한 Spring Boot 의 특징이다.
- 독립 실행형 Spring 어플리케이션 생성.
- Tomcat, Jetty, Undertow 등의 WAS 포함. (WAR 파일 배포 불필요)
- 자동으로 Spring 설정.
- 상태 확인, 측정 및 외부 구성과 같은 production 기능을 제공.
- 코드를 생성하거나, XML 설정 파일이 불필요.
Spring Boot Gradle Plugin
Spring Boot 2.0 이상에서 gradle 로 시작하려 할 때, Spring Boot Gradle Plugin 을 사용하려면 Gradle 4.0 이상이 필요하며 다음과 같은 잇점이 있다.
- Spring-boot-dependencies 가 제공하는 종속성 관리 가능
- 실행 가능한 jar 또는 war 아카이브를 패키지화
- Spring Boot 어플리케이션 실행
1. Spring-boot-gradle-plugin 시작
Spring Boot Gradle Plugin 은 간단하게 plugins 블럭을 사용하여 프로젝트에 적용할 수 있다.
plugins { id 'org.springframework.boot' version '2.0.6.RELEASE' } | cs |
buildscript 블럭을 사용할 경우 다음과 같이 사용한다.
buildscript { repositories { maven {
url "https://plugins.gradle.org/m2/"
} } dependencies { classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.0.6.RELEASE' } } apply plugin: 'org.springframework.boot' | cs |
2. Spring-boot-dependencies 가 제공하는 종속성 관리
dependency-management 플러그인을 사용하면 특정 Spring boot 버전에 호환되는 종속성을 자동으로 가져오며 각 버전을 관리해 주기 때문에, 종속성 마다 버전을 기입할 필요가 없다. 아래처럼 최소한의 플러그인을 적용한다.
apply plugin: 'java' apply plugin: 'io.spring.dependency-management' dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' } | cs |
implementation 에는 종속성만 기입할 뿐 버전을 정의하지 않았다.
종속성의 다른 버전을 사용하고 싶은 경우 properties 를 지정하여 사용자 정의할 수 있으며, 호환성 문제를 꼭 체크하도록 한다.
ext['slf4j.version'] = '1.7.20' | cs |
3. 실행 가능한 jar 또는 war 아카이브 패키지화
Spring Boot Gradle Plugin 은 어플리케이션의 모든 종속성을 포함하는 실행 가능한 jar / war 파일을 생성하고 실행할 수 있다.
- 실행 가능한 jar : java 플러그인이 적용될 때 bootJar task 가 생성되며 이를 사용하여 jar 파일을 빌드할 수 있다. build task 를 실행하면 bootJar task 도 실행된다.
- 실행 가능한 war : war 플러그인이 적용될 때 bootWar task 가 생성되며 이를 사용하여 war 파일을 빌드할 수 있다. build task 를 실행하면 bootWar task 도 실행된다.
BootJar / BootWar task 는 Jar / War task 의 하위 클래스이다.
외부 컨테이너에서 java -jar 를 사용하여 war 파일을 실행하고 배포할 수 있도록 패키지화 하려면 서블릿 컨테이너 종속성을 providedRuntime 에 추가해야 한다.
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' } | cs |
기본적으로 bootJar / bootWar task 가 구성되면, jar / war task 는 비활성화 되는데 이를 활성화 시켜 실행 가능한 아카이브와 일반 아카이브를 동시에 빌드하도록 구성할 수 있다. 두 아카이브가 겹치지 않도록 둘 중 하나의 분류자(classfier) 를 구성할 수 있다.
jar { enabled = true } bootJar { classifier = 'boot' } | cs |
실행 가능한 아카이브의 main 클래스는 task 의 classpath 에서 public static void main(String[]) 메소드를 가진 클래스를 찾아 자동으로 구성되는데 mainClassName 속성을 사용하여 명시적으로 구성할 수도 있다.
bootJar { mainClassName = 'com.example.ExampleApplication' } | cs |
처음에 아카이브를 빌드하지 않고도 bootRun task 를 사용하여 어플리케이션을 실행할 수 있다.
bootRun { main = 'com.example.ExampleApplication' } | cs |
또는 Spring Boot DSL 의 mainClassName 속성을 사용하여 프로젝트 전체에서 기본 클래스 이름을 구성할 수도 있다.
springBoot { mainClassName = 'com.example.ExampleApplication' } | cs |
application 플러그인이 적용된 경우 mainClassName 프로젝트 속성을 사용하여 동일한 목적으로 사용할 수도 있다.
mainClassName = 'com.example.ExampleApplication' | cs |
task 의 manifest 에 Start-Class 속성을 구성할 수 있다.
bootJar { manifest { attributes 'Start-Class': 'com.example.ExampleApplication' } } | cs |
Spring Boot 프로젝트에 java plugin 이 함께 쓰이면, Spring boot plugin 은 다음과 같이 동작한다.
- bootJar task 생성. jar 파일은 main 소스셑의 런타임 클래스패스 상의 모든 소스를 포함하며, 클래스는 BOOT-INF/classes 에 패키징되고 jar 파일들은 BOOT-INF/lib 에 패키징 됨.
- jar task 비활성화.
- 어플리케이션을 실행하는 bootRun task 생성.
- bootJar task 에 의해 생성된 아티팩트를 포함하도록 bootArchives 를 생성.
- JavaCompile task 가 UTF-8 을 사용하도록 구성.
- JavaCompile task 가 파라미터(-parameters) 를 사용하도록 구성.
Spring Boot 프로젝트에 war plugin 이 함께 쓰이면, Spring boot plugin 은 다음과 같이 동작한다.
- bootWar task 생성. 표준 구성에 더하여 providedRuntime 구성이 WEB-INF/lib-provided 에 패키징 됨
- war task 비활성화.
- bootArchives 구성에 bootWar task 에 의해 생성된 아티팩트를 포함하도록 구성.
Spring Boot 프로젝트에 application plugin 이 함께 쓰이면, Spring boot plugin 은 다음과 같이 동작한다.
- main 속성 규칙으로 mainClassName 속성을 사용하도록 booRun task 구성.
- manifest 의 Start-Class 규칙으로 mainClassName 속성을 사용하도록 bootJar / bootWar task 구성.
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.