본문 바로가기
Language/Kotlin

Gradle, Spring, Kotlin 환경에서의 build.gradle.kts 내 tasks 이해하기

by 시니성 2023. 9. 13.

Gradle는 안드로이드 앱부터 Spring Boot 애플리케이션까지 다양한 프로젝트의 빌드 및 배포 자동화 도구로 널리 사용되고 있습니다. 특히, Kotlin DSL(build.gradle.kts)을 사용하면 더욱 표현력 있고 타입 안전한 빌드 스크립트를 작성할 수 있습니다.

본문에서는 tasks 블록과 tasks.register() 함수에 대해 깊게 다룰 것입니다.

1. tasks 블록이란?

tasks는 Gradle 빌드 스크립트에서 사용할 수 있는 빌드 작업들을 정의하는 곳입니다. 각 작업은 프로젝트 빌드의 특정 단계나 기능을 나타냅니다. 예를 들면, 프로젝트를 컴파일하거나 테스트를 실행하거나 애플리케이션을 실행하는 것과 같은 작업을 정의할 수 있습니다.

2. tasks.register() 함수

tasks.register(taskName: String) 함수는 새로운 작업을 등록하는데 사용됩니다. 여기서 taskName은 등록하려는 작업의 이름입니다.

tasks.register("customTask") {
    // 작업에 대한 로직
}

이 함수의 주요 장점은 작업을 "지연 등록(lazy registration)"한다는 것입니다. 즉, 작업이 실제로 필요할 때까지는 초기화되지 않습니다. 이로 인해 빌드 성능이 향상될 수 있습니다.

3. 가상 시나리오 및 예제 코드

시나리오: Spring Boot 애플리케이션을 개발 중이며, 로컬 환경에서 DB 마이그레이션을 테스트하고 싶습니다. Flyway라는 도구를 사용하여 DB 마이그레이션을 관리하고 있습니다.

// build.gradle.kts

// 필요한 플러그인 및 의존성 설정
plugins {
    kotlin("jvm") version "1.5.20"
    id("org.springframework.boot") version "2.5.2"
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
}

dependencies {
    implementation("org.flywaydb:flyway-core:7.8.1")
    // ... 기타 의존성들
}

// customTask를 사용하여 Flyway 마이그레이션을 실행하는 작업을 정의
tasks.register("migrateLocalDb") {
    group = "database" // 작업 그룹 지정
    description = "Migrate local database using Flyway" // 작업에 대한 설명

    doLast {
        // 여기에 마이그레이션 로직 작성
        println("Migrating local database...")
    }
}

// 다른 작업들을 정의할 수 있습니다. 예: tests, compileKotlin 등

이 코드에서 migrateLocalDb라는 새로운 작업을 정의했습니다. ./gradlew migrateLocalDb를 실행하면 로컬 DB에 대한 마이그레이션을 테스트할 수 있습니다.

결론

Gradle은 프로젝트의 빌드 및 배포를 위한 강력한 도구입니다. tasks 블록과 tasks.register() 함수를 사용하여 필요한 빌드 작업을 쉽게 추가하고 관리할 수 있습니다. Kotlin DSL을 사용하면 더욱 표현력 있고 읽기 쉬운 빌드 스크립트를 작성할 수 있습니다.