[Spring Boot] Gradle

Hood·2025년 6월 17일

Spring Boot

목록 보기
11/15
post-thumbnail

✍ Back-End 지식을 늘리자!

백엔드 개발자를 준비하면서 생긴 궁금증을 정리한 포스트입니다.

들어가기 전

새로운 프로젝트를 시작할 때는 보통 다음과 같은 고민을 하게 됩니다.

  • 어떤 프로그래밍 언어를 사용할까?
  • 어떤 플랫폼에서 개발할까?
  • 어떤 빌드 도구를 사용할까?
  • 어떤 버전 관리 시스템을 사용할까?
  • 어떤 빌드·배포 시스템을 사용할까?

이 여러 고민 중에서도 개발하면서 자주 마주치고, 거의 매일 사용하게 되는 도구가 바로 빌드 도구입니다.
이번 포스트에서는 그중 하나인 Gradle에 대해 정리해보려고 합니다.

빌드 도구란?
소스코드를 컴파일하고, 필요한 의존성을 내려받고, 테스트를 실행하고,
최종적으로 실행 가능한 애플리케이션 형태로 만드는 과정을 자동화해주는 도구입니다.


Gradle이란?

Gradle은 오픈소스 빌드 자동화 도구입니다.
프로젝트의 빌드 스크립트를 바탕으로 소프트웨어의 컴파일, 테스트, 패키징, 실행, 배포 과정을 자동화할 수 있습니다.

또한 Gradle은 비교적 유연한 구조를 가지고 있어서,
프로젝트의 성격에 맞게 빌드 과정을 자유롭게 구성할 수 있다는 장점이 있습니다.

특히 Gradle은 Groovy DSLKotlin DSL을 모두 지원합니다.
그래서 프로젝트에 따라 build.gradle 또는 build.gradle.kts 파일을 사용하게 됩니다.


Spring Boot와의 관계

Spring Boot는 독립적으로 실행 가능한 스프링 기반 애플리케이션을 쉽게 만들 수 있도록 도와주는 프레임워크입니다.

그리고 Gradle은 Spring Boot 전용 플러그인을 지원합니다.
이 플러그인을 사용하면 다음과 같은 작업을 더 편하게 처리할 수 있습니다.

  • 애플리케이션 실행 (./gradlew bootRun)
  • 실행 가능한 JAR 파일 생성 (./gradlew bootJar)
  • 의존성 버전 관리
  • Spring Boot 프로젝트에 필요한 빌드 작업 자동화

즉, Spring Boot 프로젝트에서는
빌드 과정 자동화, 의존성 관리, 실행 편의성 등을 위해 Gradle을 자주 사용하게 됩니다.


용어 정리

Project

Gradle에서 빌드 대상이 되는 단위를 Project라고 합니다.

하나의 프로젝트에는 보통 빌드 스크립트가 포함되며,
이 스크립트는 일반적으로 루트 디렉터리의 build.gradle 또는 build.gradle.kts 파일에 작성합니다.

이 파일 안에는 프로젝트에 필요한 작업(Task), 의존성(Dependency), 플러그인(Plugin), 기타 설정이 들어갑니다.

또한 Gradle 빌드는 다음처럼 나눌 수 있습니다.

  • 단일 프로젝트 빌드 : 하나의 루트 프로젝트만 포함
  • 다중 프로젝트 빌드 : 하나의 루트 프로젝트와 여러 하위 프로젝트를 포함

Task

Task는 Gradle에서 실행할 수 있는 작업의 최소 단위입니다.

예를 들면 다음과 같은 작업이 Task가 될 수 있습니다.

  • 소스코드 컴파일
  • 테스트 실행
  • JAR 파일 생성
  • 애플리케이션 실행
  • 배포 작업 수행

즉, Gradle은 여러 Task를 조합해 전체 빌드 과정을 구성합니다.

Plugin

Plugin은 자주 사용하는 빌드 로직과 설정을 재사용할 수 있도록 도와주는 기능입니다.

예를 들어 Java 프로젝트, Kotlin 프로젝트, Spring Boot 프로젝트는
각각 반복적으로 필요한 설정이 존재하는데, 이를 플러그인으로 묶어 쉽게 적용할 수 있습니다.

플러그인을 사용하면 다음과 같은 장점이 있습니다.

  • 반복되는 설정을 줄일 수 있음
  • 여러 프로젝트에서 같은 빌드 로직을 재사용할 수 있음
  • 빌드 스크립트를 더 간결하게 관리할 수 있음

Gradle Project

Spring Initializr를 통해 Kotlin 프로젝트를 생성하면
기본적으로 build.gradle.kts 파일이 함께 생성됩니다.

이 파일은 프로젝트의 빌드 설정을 정의하는 파일입니다.

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "3.2.5"
    id("io.spring.dependency-management") version "1.1.4"
    kotlin("jvm") version "1.9.23"
    kotlin("plugin.spring") version "1.9.23"
}

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

java {
    sourceCompatibility = JavaVersion.VERSION_17
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs += "-Xjsr305=strict"
        jvmTarget = "17"
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

이 파일을 하나씩 살펴보면 다음과 같습니다.

  • plugins
    프로젝트 빌드에 필요한 플러그인을 적용하는 부분입니다.

  • group, version
    프로젝트의 그룹 ID와 버전을 지정하는 부분입니다.

  • java
    사용할 Java 버전을 지정하는 설정입니다.

  • repositories
    의존성 라이브러리를 내려받을 저장소를 등록하는 부분입니다.
    예제에서는 mavenCentral()을 사용하고 있습니다.

  • dependencies
    프로젝트에 필요한 라이브러리를 등록하는 부분입니다.
    보통 '그룹:이름:버전' 형식으로 작성합니다.

  • tasks.withType<KotlinCompile>
    Kotlin 컴파일 작업에 대한 옵션을 설정하는 부분입니다.

  • tasks.withType<Test>
    테스트 작업에 대한 설정을 정의하는 부분입니다.
    여기서는 JUnit Platform을 사용해 테스트를 실행하도록 지정하고 있습니다.


의존성 구성

dependency configuration의미
compileOnly컴파일할 때는 필요하지만 런타임에는 필요하지 않은 의존성
implementation컴파일과 런타임에 모두 사용되는 일반적인 의존성
runtimeOnly컴파일 시점에는 필요 없고, 런타임에만 필요한 의존성
testCompileOnly테스트 코드를 컴파일할 때만 필요한 의존성
testImplementation테스트 코드의 컴파일과 실행에 필요한 의존성
testRuntimeOnly테스트 실행 시점에만 필요한 의존성

📌 결론

이번 포스트에서는 프로젝트를 만들 때 자주 마주치지만,
막상 왜 사용하는지 헷갈릴 수 있는 Gradle에 대해 정리해보았습니다.

Gradle은 단순히 라이브러리를 추가하는 도구가 아니라,
프로젝트의 컴파일, 테스트, 실행, 패키징, 배포까지 포함한 전체 빌드 과정을 자동화해주는 도구입니다.

특히 Spring Boot와 함께 사용할 때는
플러그인을 통해 실행과 패키징, 의존성 관리까지 편리하게 처리할 수 있기 때문에
기본 개념을 잘 이해해두면 프로젝트를 훨씬 수월하게 관리할 수 있습니다.

참고

  • Gradle 공식 문서
  • Spring Boot Gradle Plugin 공식 문서
profile
달을 향해 쏴라, 빗나가도 별이 될 테니 👊

0개의 댓글