본문 바로가기
스프링

[Gradle] Kotlin DSL 과 buildSrc 를 통한 버전 관리

by kdohyeon (김대니) 2023. 2. 20.
반응형

Gradle 빌드 스크립트를 작성할 때 Groovy 언어로 많이 작성을 했었는데, Kotlin 으로도 작성할 수 있다는 것을 알게 되어 관련 내용을 정리해보고자 한다. 그리고 buildSrc 모듈을 활용해서 버전 관리를 하는 방법에 대해서도 같이 정리하려고 한다.

Gradle 빌드 스크립트

  • Gradle 은 빌드 스크립트 작성을 위해 Groovy 기반 또는 Kotlin 기반의 DSL (Domain-Specific Language) 을 지원한다.
  • Gradle 5.0 버전부터 지원한다. (릴리즈 노트)
DSL 이란 "도메인 전용 언어"로써 특정 목적을 달성하기 위해 사용되며 코드의 내부 로직을 숨기고 재사용성을 높여주는 장점이 있다. 

Kotlin DSL vs. Groovy DSL 

Kotlin DSL 은 Groovy DSL 과 비교하여 더 나은 장점을 가지고 있다. 

  • Groovy 를 몰라도 Kotlin 을 알면 빌드 스크립트를 작성할 수 있다.
  • IDE 편집 기능을 활용할 수 있음 (코드 자동완성, 문법 오류에 대한 Syntax Highlighting 등 스크립트 작성하기가 좀 더 편리함)

단점은 Groovy DSL 보다 빌드 시간이 더 느리다는 것이다.

Groovy 언어가 학습하기 어려운 것인지, 프로젝트 초기에만 build.gradle 빌드 스크립트 파일을 관리해서 그런지는 몰라도 Groovy 언어가 항상 잘 안 와닿았는데, Kotlin DSL 이 지원되면서 좀 더 편리하게 빌드 파일을 작성할 수 있는 것 같아서 좋다. 개인적으로는 Kotlin DSL 이 좀 더 나은 가독성을 제공한다고도 생각한다. 그리고 빌드 시간이 좀 느리긴한데.. 여유를 가지고 커피 한잔 하자

Kotlin DSL 의 특징

  • .kts 확장자 명을 가지고 있음 (KotlinDSL: build.gradle.kts, GroovyDSL: build.gradle)
  • 모든 문자열 작성 시 큰 따옴표(" ")로 작성
  • 함수 호출 시 괄호 필수
  • 속성 할당 시 = 필수
// Groovy DSL
include ':app', ':sampleModule'

// Kotlin DSL
// 1. 쌍 따옴표의 활용
// 2. 괄호의 활용
include(":app", ":sampleModule")

buildSrc

라이브러리의 버전 관리를 좀 더 편리하게 하기 위해서 buildSrc 를 활용할 수 있다.

1. 먼저 root 디렉토리에 buildSrc 디렉토리를 생성한다.

buildSrc 디렉토리를 생성하고 (좌) build.gradle.kts 을 생성한다 (우)

2. buildSrc 디렉토리에 build.gradle.kts 파일을 생성하고, kotlin-dsl 을 연동한다.

3. src > main > kotlin 에 따라 디렉토리를 생성한다.

4. kotlin 디렉토리에 Versions.kt (또는 원하는 파일 이름으로) 파일을 생성한다.

5. 각 라이브러리의 버전을 추가해준다.

object Versions {
    const val springDependencyManagementPlugin = "1.0.11.RELEASE"
}

그리고 의존성을 관리하는 build.gradle.kts 에서는 아래처럼 버전을 관리할 수 있다.

plugins {
    id("io.spring.dependency-management") version Versions.springDependencyManagementPlugin apply false
}

buildSrc 를 왜 사용하나?

아래처럼 같은 버전에 대해서 여러 라이브러리를 불러와야 할 때, 편리하게 사용할 수 있다.

plugins {
    kotlin("jvm") version Versions.kotlin apply false
    kotlin("kapt") version Versions.kotlin apply false
    kotlin("plugin.spring") version Versions.kotlin apply false
    kotlin("plugin.jpa") version Versions.kotlin apply false
}

참고 자료

반응형

댓글