'War'에 해당하는 글 1건

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
손가락귀신
정신 못차리면, 벌 받는다.

,