
백엔드 개발자를 준비하면서 생긴 궁금증을 정리한 포스트입니다.
새로운 프로젝트를 시작할 때는 보통 다음과 같은 고민을 하게 됩니다.
이 여러 고민 중에서도 개발하면서 자주 마주치고, 거의 매일 사용하게 되는 도구가 바로 빌드 도구입니다.
이번 포스트에서는 그중 하나인 Gradle에 대해 정리해보려고 합니다.
빌드 도구란?
소스코드를 컴파일하고, 필요한 의존성을 내려받고, 테스트를 실행하고,
최종적으로 실행 가능한 애플리케이션 형태로 만드는 과정을 자동화해주는 도구입니다.

Gradle은 오픈소스 빌드 자동화 도구입니다.
프로젝트의 빌드 스크립트를 바탕으로 소프트웨어의 컴파일, 테스트, 패키징, 실행, 배포 과정을 자동화할 수 있습니다.
또한 Gradle은 비교적 유연한 구조를 가지고 있어서,
프로젝트의 성격에 맞게 빌드 과정을 자유롭게 구성할 수 있다는 장점이 있습니다.
특히 Gradle은 Groovy DSL과 Kotlin DSL을 모두 지원합니다.
그래서 프로젝트에 따라 build.gradle 또는 build.gradle.kts 파일을 사용하게 됩니다.
Spring Boot는 독립적으로 실행 가능한 스프링 기반 애플리케이션을 쉽게 만들 수 있도록 도와주는 프레임워크입니다.
그리고 Gradle은 Spring Boot 전용 플러그인을 지원합니다.
이 플러그인을 사용하면 다음과 같은 작업을 더 편하게 처리할 수 있습니다.
./gradlew bootRun)./gradlew bootJar)즉, Spring Boot 프로젝트에서는
빌드 과정 자동화, 의존성 관리, 실행 편의성 등을 위해 Gradle을 자주 사용하게 됩니다.
Gradle에서 빌드 대상이 되는 단위를 Project라고 합니다.
하나의 프로젝트에는 보통 빌드 스크립트가 포함되며,
이 스크립트는 일반적으로 루트 디렉터리의 build.gradle 또는 build.gradle.kts 파일에 작성합니다.
이 파일 안에는 프로젝트에 필요한 작업(Task), 의존성(Dependency), 플러그인(Plugin), 기타 설정이 들어갑니다.
또한 Gradle 빌드는 다음처럼 나눌 수 있습니다.
Task는 Gradle에서 실행할 수 있는 작업의 최소 단위입니다.
예를 들면 다음과 같은 작업이 Task가 될 수 있습니다.
즉, Gradle은 여러 Task를 조합해 전체 빌드 과정을 구성합니다.
Plugin은 자주 사용하는 빌드 로직과 설정을 재사용할 수 있도록 도와주는 기능입니다.
예를 들어 Java 프로젝트, Kotlin 프로젝트, Spring Boot 프로젝트는
각각 반복적으로 필요한 설정이 존재하는데, 이를 플러그인으로 묶어 쉽게 적용할 수 있습니다.
플러그인을 사용하면 다음과 같은 장점이 있습니다.
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와 함께 사용할 때는
플러그인을 통해 실행과 패키징, 의존성 관리까지 편리하게 처리할 수 있기 때문에
기본 개념을 잘 이해해두면 프로젝트를 훨씬 수월하게 관리할 수 있습니다.