Skip to content

Gradle Script

English ID edited this page Mar 6, 2025 · 4 revisions

Background

Gradle에서 Kotlin을 Groovy 대신 기본 언어로 선택함에 따라, 팀에서도 build.gradle.kts 등을 선호했습니다.[1] Gradle blog


Gradle Script

  • settings.gradle.kts: 추가 작업 없음.
  • build.gradle.kts: 이 프로젝트에서는 이곳에만 추가 작업이 있습니다.
  • gradle.properties: 사용할 상황이 없었습니다.

Gradle Plugins

Java, 스프링부트는 설명을 생략합니다.

  • 의존성 관리자: 스프링 부트 버전에 호환되는 의존성 버전을 자동으로 설정해 줍니다. 이로써 우리는 주요 의존성 라이브러리를 추가할 때 버전을 생략할 수 있습니다.
    • id("io.spring.dependency-management")
  • 코틀린 관련: 테스트 코드에 코틀린을 사용하기 위해 추가했습니다.
    • kotlin("jvm")
    • kotlin("plugin.spring")

Java Version

  • 21 버전을 적용하고, 컴파일타임 및 런타임에 --enable-preview를 적용합니다. (21 Preview)
  • (IDE) Gradle JVM 또한 21 버전 JDK로 제공했습니다.
  • (IDE) Project 및 Module의 SDK 버전 또한 Project SDK를 따르도록 했습니다.
See Scripts
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
        sourceCompatibility = JavaVersion.VERSION_21
        targetCompatibility = JavaVersion.VERSION_21
    }
}

tasks.withType<JavaCompile> {
    options.compilerArgs.addAll(listOf(
        "--enable-preview",
        "-Amapstruct.defaultComponentModel=spring",
    ))
}

tasks.named<JavaExec>("bootRun") {
    jvmArgs("--enable-preview")
}

Key Dependencies

RDB Relatives

  • PostgreSQL JDBC Driver
    runtimeOnly("org.postgresql:postgresql:42.7.4")
  • Flyway Database PostgreSQL[2]
    implementation("org.flywaydb:flyway-database-postgresql")

    Flyway는 데이터베이스 스키마 통일을 위해 사용합니다. 즉, JPA 구현체의 DDL Auto 대신 Flyway로 모든 팀원이 동일한 테이블 구조를 자동으로 구축할 수 있습니다.

    • 자바 객체 중심적인 설계 대신 DB 테이블 중심적인 설계를 시도할 수 있습니다. (언뜻 보면 조삼모사지만, 협업 방식에 선택지가 추가됩니다.)
    • Flyway Schema History 테이블로 DDL 히스토리를 관리하고 필요 시 추적할 수 있습니다.
    • 적절한 파일 이름을 사용한다면 버전 순서대로 DDL이 자동으로 실행됩니다. (부트타임)
  • QueryDSL
    val bom = dependencyManagement.importedProperties
    
    // Spring Data JPA와 함께 사용 시 다음 두 항목만 추가하면 됩니다.
    implementation("com.querydsl:querydsl-jpa:${bom["querydsl.version"]}:jakarta")
    annotationProcessor("com.querydsl:querydsl-apt:${bom["querydsl.version"]}:jakarta")

Test Relatives 🏗

🏗 Working . . .

설명을 추가해 주세요.

// test
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("com.h2database:h2")

// test tool
testImplementation("io.kotest:kotest-runner-junit5:5.9.1")
testImplementation("io.mockk:mockk:1.13.12")
testImplementation(kotlin("script-runtime"))
testImplementation("io.kotest.extensions:kotest-extensions-spring:1.1.3")

Gradle Tasks 🏗

🏗 Working . . .

설명을 추가해 주세요.

Kotlin Source Sets

  • 코틀린 테스트 디렉터리를 classpath에 추가합니다.
kotlin {
    sourceSets {
        test {
            kotlin.srcDirs(listOf("src/test/kotlin"))
        }
    }
}

Kotlin Compile

  • JVM 타깃을 21 버전으로 설정합니다.

Test Task

  • 21 preview 기능을 활성화합니다.[3] (우리 코드에서는 테스트 시 실제로 활용하지 않았습니다.)

Java Compile

  • 21 preview 기능을 활성화합니다.[3]
  • MapStruct 기본 컴포넌트 모델을 spring으로 설정합니다. (매퍼가 빈으로 등록됩니다.)

Boot Run

  • 21 preview 기능을 활성화합니다.[3]


  • [1] Ref: "Kotlin DSL is Now the Default for New Gradle Builds", 2023. 4. 13, Gradle Blog
  • [2] Flyway는 2023년 10월 31일부터 PostgreSQL 관련 Flyway 라이브러리를 독립적으로 배포하였습니다. 최근 업데이트 기준으로 MySQL, PostgreSQL 데이터베이스에 대해서만 각각 flyway-mysql, flyway-database-postgresql 라이브러리를 사용하고, 그 외 데이터베이스에는 flyway-core 라이브러리를 사용하는 점에 유의해야 합니다.
  • [3] Gradle 호환을 함께 고려해야 합니다. 21 버전의 모든 preview 기능을 사용할 수 있는 것은 아닙니다.