BackEnd

Spring Initializr에서 Gradle-groovy와 -Kotlin의 차이

dog-pawwer 2024. 1. 18. 04:00
반응형

Gradle은 빌드 자동화 도구이며, Groovy와 Kotlin 두 가지 언어를 사용하여 빌드 스크립트를 작성할 수 있다.

이전에는 다음과 같이 Gradle과 Maven으로만 빌드 툴이 나누어져 있었다면,

최근에는

Groovy와 Kotlin으로 세분화 되어있는 것을 볼 수가 있다.

일단, Gradle과 Maven 모두 JAVA의 Build Tool이지만, 최근에는 Gradle이 더 많이 쓰이는 추세이다.
이유는 다음과 같다.

  • xml로 관리되는 Maven에 비해 짧고 간결한 문법
  • Maven에 비해 C/C++ 등 다른 언어에서도 사용가 능한 범용성과 호환성
  • 최소 2배에서 빌드 캐시를 사용하는 대규모 빌드의 경우 100배 정도의 성능차이

그렇다면, Gradle-Groovy(기존의 Gradle) 에서 Gradle-Kotlin이 파생된 이유는 무엇일까?

1. 차이점

  1. Groovy로 작성된 빌드 스크립트:
    • 초기에는 Gradle의 주요 빌드 스크립트 언어로 Groovy가 사용되었다.
    • Groovy는 Java와의 상호 운용성이 뛰어나며, 동적 타이핑, 간결한 문법, 그리고 강력한 메타프로그래밍 기능을 제공한다.
    • Groovy로 작성된 빌드 스크립트는 간단하게 읽히고 쓰기가 쉽다.
// Groovy-based build script example

plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'com.example:library:1.0'
    testImplementation 'junit:junit:4.12'
}
  1. Kotlin으로 작성된 빌드 스크립트:
    • Gradle 5.0 이후부터는 Kotlin DSL을 사용하여 빌드 스크립트를 작성하는 것이 공식적으로 지원된다.
    • Kotlin은 정적 타이핑, 안전성, 식(expression) 기반 문법 등의 특성을 제공하며, IntelliJ IDEA와 같은 Kotlin에 대한 강력한 지원을 받고 있다.
// Kotlin-based build script example
plugins {
    kotlin("jvm") version "1.5.0"
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("com.example:library:1.0")
    testImplementation("junit:junit:4.12")
}

 

Kotlin DSL은 정적 타이핑으로 인해 IDE에서 코드 완성 및 오류 감지가 강력하게 지원되는 장점이 있다.

예시를 보자.

구글이나 블로그에서 코드를 긁어오다 보면, 다음과 같이 종속성을 추가할 때, 형태를 달리해서 긁어올 때가 있을 수 있다.

dependencies {
    implementation("com.example:library:1.0")
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation("junit:junit:4.12")
}

Groovy는 해당 코드에 에러를 띄우지 않지만, Kotlin은 해당 코드에 에러를 띄우게 된다.

여러 사람들과 협업하여 진행하는 프로젝트는 일관된 규칙이 있어야 (컨벤션) 오류를 최소화할 수 있다.

그런 측면에서 Kotlin Gradle의 경우 ("") 구문만 사용하도록 강제하는 부분과, IDE의 지원으로 오류를 강조해주는 부분이 장점으로 작용할 수 있다.

(다만, IDE에서의 지원은 인텔리제이와 안드로이드 스튜디오에서만 한정된다.)

2. 단점??

그렇다면 Kotlin이 무조건적으로 좋냐??

그것은 아니다.

  • build cache가 Invalidation 되거나 clean build 시 Kotlin이 Groovy DSL 보다 느리다.
  • 새로운 라이브러리 버전의 Inspection 기능 미지원
  • Gradle 5.0, Java 8 부터 지원

해당 제약사항과 매우 미세한 빌드 속도 차이가 있다는 정도이다.

3. 선택

Gradle-Kotlin의 장점이 명확하다고 하나

아직 참고 문헌이나 검색량, 대중성 측면에서 보편적인 Gradle-Groovy이 압도적으로 많이 쓰이는 것을 알 수 있다.

실제로도 gradle 공식 홈페이지를 참고하더라도, groovy를 먼저 보여주고 kotlin을 선택사항 처럼 보여주기도 한다.

물론 groovy와 kotlin 둘 중 어느 것을 선택하더라도 호환성의 문제는 크게 되지 않는다.


결론은 취향차이!!

반응형