IT 기술/Spring boot / / 2025. 2. 22. 13:43

/gradlew bootRun은 어떻게 동작하는가?

/gradlew bootRun은 어떻게 동작하는가?

Spring Boot 애플리케이션을 실행할 때 흔히 사용하는 명령어가 있습니다.

./gradlew bootRun

Gradle을 사용한 Spring Boot 프로젝트라면 익숙한 명령어지만, 정확히 어떻게 동작하는지 알고 있나요?

이번 글에서는 ./gradlew bootRun이 내부적으로 어떤 과정을 거치는지 알아보겠습니다.


1. ./gradlew란?

먼저, ./gradlewGradle Wrapper의 실행 파일입니다. Gradle Wrapper를 사용하면 프로젝트마다 독립적인 Gradle 버전을 관리할 수 있으며, Gradle이 설치되지 않은 환경에서도 자동으로 다운로드하여 실행할 수 있습니다.

  • gradle vs gradlew 차이점
    • gradle : 시스템에 설치된 Gradle을 사용
    • gradlew : 프로젝트에 설정된 Wrapper를 통해 특정 Gradle 버전 사용

즉, ./gradlew는 프로젝트의 gradle/wrapper/gradle-wrapper.properties에 정의된 버전의 Gradle을 실행하는 역할을 합니다.


2. bootRun 태스크의 역할

Spring Boot 애플리케이션을 실행하는 역할을 하는 bootRun은 Gradle의 JavaExec 기반으로 동작하며, Application Pluginrun 태스크와 개념적으로 유사합니다. bootRun이 실행되면 다음과 같은 과정이 이루어집니다.

  1. 소스 코드 컴파일: compileJavaprocessResources 태스크 실행
  2. 클래스 파일 로딩: build/classes/java/main/ 경로의 클래스 파일을 JVM이 로드
  3. 애플리케이션 실행: SpringApplication.run()이 포함된 main 메서드 실행

Gradle 내부적으로는 org.springframework.boot.gradle.tasks.run.BootRun 클래스를 사용하여 애플리케이션을 실행합니다.


3. bootRun 실행 과정 자세히 살펴보기

./gradlew bootRun --info 명령어를 실행하면 내부적으로 어떤 일이 일어나는지 확인할 수 있습니다.

$ ./gradlew bootRun --info

실행하면 다음과 같은 로그를 볼 수 있습니다.

Starting process 'command '/Library/Java/JavaVirtualMachines/jdk-17/bin/java''. Working directory: /Users/example/project Command: /Library/Java/JavaVirtualMachines/jdk-17/bin/java ...
Starting BootRun with arguments: []
Task :compileJava
Task :processResources
Task :classes
Task :bootRun

이를 통해 bootRun이 실행되기 전 compileJava, processResources, classes 등의 태스크가 실행됨을 알 수 있습니다.

 


4. bootRun 실행 옵션 커스터마이징

bootRun 실행 시 다양한 옵션을 추가할 수 있습니다. build.gradle.kts에서 bootRun 설정을 변경해 보겠습니다.

// build.gradle.kts
import org.springframework.boot.gradle.tasks.run.BootRun

tasks.named<BootRun>("bootRun") {
    args = listOf("--server.port=8081", "--spring.profiles.active=dev")
    jvmArgs = listOf("-Xmx1024m")
}

위와 같이 설정하면 ./gradlew bootRun 실행 시:

  • --server.port=8081: 애플리케이션이 8081 포트에서 실행됨
  • --spring.profiles.active=dev: dev 프로파일이 활성화됨
  • -Xmx1024m: JVM의 최대 힙 메모리가 1024MB로 설정됨

이 외에도 bootRun 태스크를 활용하여 환경 변수 설정, 특정 클래스 로딩, 로깅 설정 등 다양한 커스터마이징이 가능합니다.

 

build.gradle  파일 예시

Gradle Groovy DSL을 사용하는 경우 build.gradle 파일은 다음과 같이 작성할 수 있습니다.

plugins {
    id 'org.springframework.boot' version '3.1.0'
    id 'io.spring.dependency-management' version '1.1.0'
    id 'java'
}

group = 'com.example'
version = '1.0.0'
sourceCompatibility = '17'

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('bootRun') {
    args = ['--server.port=8081', '--spring.profiles.active=dev']
    jvmArgs = ['-Xmx1024m']
}

5. bootRun vs ./gradlew build vs java -jar build/libs/app.jar

Spring Boot 애플리케이션을 실행하는 방법은 여러 가지가 있습니다.

실행 방식 특징
./gradlew bootRun 개발용 실행. Spring DevTools 등을 통해 소스 코드 변경 시 자동 반영 가능
./gradlew build 애플리케이션을 빌드하여 build/libs에 JAR 파일 생성
java -jar build/libs/app.jar 운영 환경 실행, JAR 패키징 후 실행

즉, bootRun은 개발 중 빠르게 실행할 때 유용하고, ./gradlew build는 JAR 파일을 생성하는 용도로 사용됩니다. java -jar는 이렇게 빌드된 JAR을 실행하는 방식입니다.


마무리

./gradlew bootRun은 단순히 애플리케이션을 실행하는 것 같지만, 내부적으로는 Gradle Wrapper 실행 → bootRun 태스크 실행 → 소스 코드 컴파일 → JVM 실행 등의 과정이 포함되어 있습니다.

실행 과정과 옵션을 잘 이해하고 있으면 개발 환경에서 더 효율적으로 Gradle 프로젝트를 실행할 수 있습니다.

References

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유