Gradle

설치 방법

SDKMAN을 통한 설치 (권장)

sdk install gradle

macOS에서 설치

brew install gradle

Windows에서 설치

choco install gradle
scoop install gradle

수동 설치

  1. Gradle 다운로드 페이지에서 최신 버전 다운로드
  2. 압축 해제 후 환경 변수 PATH에 bin 디렉토리 추가

기본 명령어

# 프로젝트 빌드
gradle build

# 테스트 건너뛰고 빌드
gradle build -x test

# Spring Boot 애플리케이션 실행
gradle bootRun

# Gradle Wrapper 사용 (권장)
./gradlew build
./gradlew bootRun

프로젝트 시작하기

새 프로젝트 초기화 (권장)

# 새 디렉토리 생성
mkdir my-project
cd my-project

# Gradle 초기화 (대화형)
gradle init

수동으로 시작하기

mkdir basic-demo
cd basic-demo
touch build.gradle

Gradle 태스크 확인

# 모든 태스크 보기
gradle tasks --all

# 기본 태스크 보기
gradle tasks

의존성 범위 (Dependency Scope)

build.gradle 예제

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

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '17'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'com.h2database:h2'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

커스텀 태스크 정의

// 파일 복사 태스크
task copy(type: Copy) {
    from 'src'
    into 'dest'
}

// ZIP 파일 생성 태스크
task zip(type: Zip) {
    from 'src'
    archiveFileName = 'archive.zip'
}

Gradle Daemon

데몬 상태 확인

# 현재 실행 중인 모든 Gradle 데몬 상태 확인
gradle --status

데몬 중지 방법

# 모든 Gradle 데몬 중지
gradle --stop

# 특정 프로세스 ID로 데몬 중지 (Linux/macOS)
kill -9 <PID>

# 실행 중인 Gradle 데몬 찾기 (Linux/macOS)
ps -ef | grep gradle

# 실행 중인 Gradle 데몬 찾기 (Windows)
tasklist | findstr gradle

데몬 설정

gradle.properties 파일에 다음 설정 추가:

# 데몬 비활성화 (항상 새 프로세스에서 빌드 실행)
org.gradle.daemon=false

# 데몬 JVM 메모리 설정
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError

데몬 자동 종료

# 데몬 유휴 시간 설정 (밀리초 단위, 예: 1시간)
org.gradle.daemon.idletimeout=3600000

데몬 문제 해결

Gradle Wrapper (권장)

gradle wrapper
gradle wrapper --gradle-version=8.7
./gradlew build  # Linux/macOS
gradlew.bat build  # Windows

커스텀 리포지토리 설정

repositories {
    mavenCentral()

    maven {
        url 'https://repo.mycompany.com/maven2'
        credentials {
            username = 'username'
            password = 'password'
        }
    }

    // JCenter는 더 이상 권장되지 않음
    // jcenter()
}

명령줄 인자 전달

# Spring Boot 애플리케이션에 인자 전달
./gradlew bootRun --args='--server.port=9090 --spring.profiles.active=dev'

멀티 프로젝트 구성

// settings.gradle
rootProject.name = 'my-project'
include 'app', 'library'

// root build.gradle
allprojects {
    repositories {
        mavenCentral()
    }
}

subprojects {
    apply plugin: 'java'

    dependencies {
        testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2'
    }
}

Gradle vs Maven 비교

특성 Gradle Maven
빌드 스크립트 Groovy 또는 Kotlin DSL (간결하고 유연함) XML (상대적으로 장황하고 경직됨)
성능 증분 빌드, 빌드 캐시, 병렬 실행으로 더 빠름 상대적으로 느림
의존성 관리 동적 버전, 전이적 의존성 제외, 세밀한 제어 중앙 저장소, 전이적 의존성 관리
커스터마이징 매우 유연하고 확장 가능한 플러그인 시스템 플러그인 시스템이 있지만 덜 유연함
학습 곡선 더 가파른 학습 곡선 (유연성으로 인해) 상대적으로 배우기 쉬움
IDE 지원 주요 IDE에서 지원 주요 IDE에서 광범위하게 지원
커뮤니티 성장 중이지만 Maven보다 작음 오랜 역사와 큰 커뮤니티
적합한 프로젝트 복잡하고 대규모 프로젝트, 커스텀 빌드 로직 표준적인 빌드 프로세스를 가진 프로젝트

Gradle의 장점

Maven의 장점

전환 고려사항

Maven에서 Gradle로 전환을 고려한다면:

참고 자료

What Else?
inflearn react api server buy me a coffee