Spring Boot

[Spring] Gradle 핵심 정리

kittity 2025. 3. 27. 23:05

목차

  1. Gradle의 등장 배경과 핵심 개념
  2. Spring 프로젝트에 Gradle 설정하기
  3. Maven vs Gradle
  4. Gradle 관련 명령어

 

1. Gradle의 등장 배경과 핵심 개념

Java 빌드 도구 역사에서 Ant와 Maven에 이어 2012년 Gradle이 등장했다. Maven의 XML 기반 선언적 접근은 복잡한 빌드 로직 구현에 한계가 있었고, 이를 해결하기 위해 Gradle이 만들어졌다. Gradle의 특징은 다음과 같다.

 

1) Groovy 기반 DSL

Gradle은 XML 대신 Groovy(또는 Kotlin) 기반의 DSL을 사용해 가독성이 높고 유연한 빌드 스크립트를 작성할 수 있다.

 

2) 태스크 기반 빌드 모델

모든 빌드 과정을 태스크 단위로 나누어 관리하며, 태스크 간 의존성 설정이 가능하다.

task hello {
    doLast {
        println 'Hello, Gradle!'
    }
}

 

3) 의존성 관리 Maven보다 더 유연한 의존성 관리가 가능하다.

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

 

4) 플러그인 시스템 플러그인을 통해 기능을 쉽게 확장할 수 있다.

plugins {
    id 'org.springframework.boot' version '2.7.0'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

 

2. Spring 프로젝트에 Gradle 설정하기

Spring 프로젝트에서 Gradle을 설정하는 방법을 알아보자.

2.1 기본 설정

Spring Boot 프로젝트의 build.gradle 파일 기본 구조는 다음과 같다.

plugins {
    id 'org.springframework.boot' version '2.7.0'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.example'              // 프로젝트 그룹 ID
version = '0.0.1-SNAPSHOT'         // 프로젝트 버전
sourceCompatibility = '11'         // Java 버전 호환성

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'
}

test {
    useJUnitPlatform()             // JUnit 5 사용 설정
}

 

2.2 의존성 타입별 설명

Gradle은 다양한 의존성 타입을 제공한다.

  • implementation: 구현 의존성으로, 컴파일과 런타임에 필요하지만 이 의존성을 사용하는 다른 모듈에는 노출되지 않는다. 대부분의 라이브러리에 사용된다.
  • api: 구현과 API 의존성으로, 컴파일과 런타임에 필요하며 이 의존성을 사용하는 다른 모듈에도 노출된다. 공개 API의 일부인 라이브러리에 사용된다.
  • compileOnly: 컴파일 시에만 필요하고 런타임에는 필요하지 않은 의존성. 주로 Lombok과 같은 애노테이션 프로세서에 사용된다.
  • runtimeOnly: 컴파일에는 필요하지 않고 런타임에만 필요한 의존성. 주로 JDBC 드라이버와 같은 라이브러리에 사용된다.
  • testImplementation: 테스트 컴파일과 실행에만 필요한 의존성이다.
  • testRuntimeOnly: 테스트 실행에만 필요한 의존성이다.
  • developmentOnly: 개발 시에만 필요한 의존성으로 주로 Spring Boot DevTools와 같은 개발 도구에 사용된다.

 

2.3 주요 Gradle 설정 요소

  • plugins: 프로젝트에 적용할 Gradle 플러그인을 정의한다.
    • org.springframework.boot: Spring Boot 애플리케이션 빌드를 지원한다.
    • io.spring.dependency-management: Spring Boot 의존성 버전을 자동으로 관리한다.
    • java: Java 애플리케이션 빌드를 위한 기본 플러그인이다.
  • repositories: 의존성을 가져올 저장소를 정의한다.
    • mavenCentral(): Maven 중앙 저장소를 사용한다.
    • jcenter(): JCenter 저장소를 사용한다.
    • google(): Google의 Maven 저장소를 사용한다.
  • dependencies: 프로젝트에 필요한 라이브러리를 정의한다.
  • tasks: 빌드 프로세스 중에 실행할 작업을 정의한다.

 

3. Maven vs Gradle

Maven과 Gradle의 주요 차이점을 다음과 같이 정리해보았다.

비교 항목 Maven  Gradle
기반 언어 XML Groovy, Kotlin
문법 장황하고 가독성 낮음 간결하고 표현력 높음
성능 상대적으로 느림 증분 빌드, 캐싱으로 빠름
유연성 고정된 빌드 라이프사이클 태스크 기반으로 유연함
의존성 관리 scope 개념 제한적 다양한 의존성 타입 제공
학습 곡선 상대적으로 쉬움 상대적으로 가파름
커뮤니티 오래되어 자료 풍부 성장 중
멀티 프로젝트 다소 복잡함 효율적인 관리 가

 

코드로 비교해보면 다음과 같다.

 

Maven 의존성 선언 (pom.xml):

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.7.0</version>
    </dependency>
</dependencies>

 

Gradle 의존성 선언 (build.gradle):

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

 

Maven 플러그인 설정 (pom.xml):

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.7.0</version>
        </plugin>
    </plugins>
</build>

 

Gradle 플러그인 설정 (build.gradle):

plugins {
    id 'org.springframework.boot' version '2.7.0'
}

 

4. Gradle 관련 명령어

Gradle을 사용할 때 알아두면 유용한 명령어들이다:

# 애플리케이션 실행
./gradlew bootRun

# JAR 파일 생성
./gradlew bootJar

# 특정 프로파일로 실행
./gradlew bootRun --args='--spring.profiles.active=dev'

# 테스트 실행
./gradlew test

# 의존성 트리 확인
./gradlew dependencies

# 프로젝트 빌드 (컴파일, 테스트, JAR 생성)
./gradlew build

# 빌드 캐시 정리
./gradlew clean

 

 

 

Gradle은 Spring 프로젝트에서 강력하고 유연한 빌드 도구로 자리매김했다. Maven에 비해 간결한 문법, 뛰어난 성능, 그리고 다양한 확장 기능을 제공하여 프로젝트 관리를 효율적으로 만들어준다.

 

Spring과 Gradle을 함께 사용하면 개발 생산성을 향상시킬 수 있으며, 특히 Spring Boot 프로젝트에서는 더욱 효과적이다. Gradle의 기능을 활용하여 Spring 프로젝트를 더 효율적으로 관리해보자.

 

728x90