Spring & SpringBoot
Spring Boot 프로젝트에서의 Gradle 사용법과 동작 원리
JinHxxxxKim
2025. 5. 4. 20:56
1. Gradle이 Spring Boot를 실행할 때 동작 방식
Spring Boot 애플리케이션을 Gradle로 실행할 때는 bootRun
태스크를 사용한다
단계별 동작
각 단계에 대한 실행과정은 ./gradlew
명령어에 --info
옵션을 붙여 ./gradlew build --info
, ./gradlew bootRun --info
명령어 또는 를 실행하면 자세하게 출력된다.
1️. 초기화 단계 (Initialization Phase)
settings.gradle
파일을 읽어 루트 프로젝트 및 멀티 프로젝트 구성을 확인- 프로젝트의 디렉터리 구조와 기본 정보(프로젝트 이름 등)를 파악
settings.gradle
rootProject.name = 'demo'
./gradlew bootRun --info
Initialized native services in: C:\Users\JinHxxxxKim\.gradle\native
Initialized jansi services in: C:\Users\JinHxxxxKim\.gradle\native
...
Starting Build
Settings evaluated using settings file 'C:\Users\JinHxxxxKim\prac\demo\settings.gradle'.
Projects loaded. Root project using build file 'C:\Users\JinHxxxxKim\prac\demo\build.gradle'.
Included projects: [root project 'demo']
로그를 보면, 초기화 단계에서는 프로젝트 구조를 잡고, 로드하는 등의 초기화 작업을 하는 것을 알 수 있다.
2️. 구성 단계 (Configuration Phase)
build.gradle
파일을 읽어 전체 빌드 스크립트를 구성한다.plugins
블록에 정의된 플러그인들이 적용되며, Spring Boot Gradle Plugin은 이 시점에bootRun
,bootJar
등의 태스크를 자동으로 등록.- 의존성 트리를 구성하고 Task 그래프를 준비.
./gradlew bootRun --info
> Configure project :
Evaluating root project 'demo' using build file 'C:\Users\JinHxxxxKim\prac\demo\build.gradle'.
Resolved plugin [id: 'java']
Resolved plugin [id: 'org.springframework.boot', version: '3.4.5']
Resolved plugin [id: 'io.spring.dependency-management', version: '1.1.7']
...
Tasks to be executed: [task ':compileJava', task ':processResources', task ':classes', task ':resolveMainClassName', task ':bootRun']
Tasks that were excluded: []
로그를 보면, 구성단계에서는 플러그인을 적용하고, 실행 및 제외되어야 할 Task들을 구별하는 것을 알 수 있다.
3️. 실행 단계 (Execution Phase)
bootRun
Task 실행 시 내부적으로:compileJava
: 자바 소스 컴파일processResources
: 리소스 파일 복사 및 처리classes
: 컴파일된 클래스 + 리소스 묶음bootRun
: 실행
./gradlew bootrun --info
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :resolveMainClassName UP-TO-DATE
> Task :bootRun
로그를 보면, ./gradlew bootrun
실행 시, 구성 단계에서 설정한 Task들에 대해 실행이 된 것을 알 수 있다.
2. Gradle 스크립트
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.5'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.4'
// https://mvnrepository.com/artifact/com.h2database/h2
implementation 'com.h2database:h2:2.2.224'
// swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.4'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
plugins
java
: Java 애플리케이션을 빌드하기 위한 표준 플러그인.- 컴파일, 테스트, JAR 패키징 등 기본 Task 제공
org.springframework.boot
: Spring Boot 전용 Gradle 플러그인으로,bootRun
,bootJar
등을 자동으로 추가io.spring.dependency-management
: 의존성 관리를 지원하며, 현재 사용 중인 SpringBoot 버전에서 Spring-boot-dependency bom을 가져옴
BOM(Bill Of Materials): 사용하는 여러 의존성 라이브러리의 버전이 명시되어 있음
java.toolchain
- Java 17 버전의 툴체인을 사용하도록 명시. 로컬 환경의 JDK 버전과 상관없이 Java 17로 빌드
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories
mavenCentral()
: 의존성을 가져올 원격 저장소로 Maven Central을 지정.
3. Gradle 태스크 실행 순서
Boot Run 시 (./gradlew bootRun
):
순서 | Task | 설명 |
---|---|---|
1 | compileJava |
메인 자바 코드 컴파일 |
2 | processResources |
resources/ 하위 파일 복사 및 처리 |
3 | classes |
컴파일+리소스 묶음 준비 |
4 | resolveMainClassName |
메인 클래스 찾기 |
5 | bootRun |
스프링 애플리케이션 실행 (JVM 구동) |
Build 시 (./gradlew build
):
순서 | Task | 설명 |
---|---|---|
1 | compileJava |
메인 자바 코드 컴파일 |
2 | processResources |
resources/ 하위 파일 복사 및 처리 |
3 | classes |
컴파일+리소스 묶음 준비 |
4 | resolveMainClassName |
메인 클래스 찾기 |
5 | bootJar |
실행 가능한 Spring Boot JAR 만들기 |
6 | jar |
표준 JAR 만들기 |
7 | assemble |
패키징 단계 정리 |
8 | compileTestJava |
테스트 코드 컴파일 |
9 | processTestResources |
테스트 리소스 복사 |
10 | testClasses |
테스트 클래스 준비 |
11 | test |
테스트 실행 |
12 | check |
테스트+검증 |
13 | build |
빌드의 최종 단계 (패키징+검증 종합) |
각 단계에 실행되는 Task들은 --dry-run
옵션을 통해 확인할 수 있다.
./gradlew bootRun --dry-run
./gradlew build --dry-run