/gradlew bootRun은 어떻게 동작하는가?
Spring Boot 애플리케이션을 실행할 때 흔히 사용하는 명령어가 있습니다.
./gradlew bootRun
Gradle을 사용한 Spring Boot 프로젝트라면 익숙한 명령어지만, 정확히 어떻게 동작하는지 알고 있나요?
이번 글에서는 ./gradlew bootRun
이 내부적으로 어떤 과정을 거치는지 알아보겠습니다.
1. ./gradlew
란?
먼저, ./gradlew
는 Gradle Wrapper의 실행 파일입니다. Gradle Wrapper를 사용하면 프로젝트마다 독립적인 Gradle 버전을 관리할 수 있으며, Gradle이 설치되지 않은 환경에서도 자동으로 다운로드하여 실행할 수 있습니다.
gradle
vsgradlew
차이점gradle
: 시스템에 설치된 Gradle을 사용gradlew
: 프로젝트에 설정된 Wrapper를 통해 특정 Gradle 버전 사용
즉, ./gradlew
는 프로젝트의 gradle/wrapper/gradle-wrapper.properties
에 정의된 버전의 Gradle을 실행하는 역할을 합니다.
2. bootRun
태스크의 역할
Spring Boot 애플리케이션을 실행하는 역할을 하는 bootRun
은 Gradle의 JavaExec 기반으로 동작하며, Application Plugin의 run
태스크와 개념적으로 유사합니다. bootRun
이 실행되면 다음과 같은 과정이 이루어집니다.
- 소스 코드 컴파일:
compileJava
및processResources
태스크 실행 - 클래스 파일 로딩:
build/classes/java/main/
경로의 클래스 파일을 JVM이 로드 - 애플리케이션 실행:
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
'IT 기술 > Spring boot' 카테고리의 다른 글
Controller에서 Request Body를 읽지 못하는 문제 해결 - Interceptor를 통한 RequestBody 로그 시도인 경우 (0) | 2025.04.06 |
---|---|
Spring vs Spring Boot: 차이점과 선택 기준 (1) | 2025.03.18 |
Spring Boot에서 Security 적용 시 H2 Console(/h2-console) 접근 불가 문제 해결 방법 (0) | 2025.03.05 |
Connection Pool과 @Transactional: 효율적인 데이터베이스 관리를 위한 핵심 개념 (0) | 2025.02.25 |