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