본문 바로가기

IT

Gradle은 무엇이고 왜 사용하는 걸까요?

많은 분들이 프로그램 개발 시 빌드 툴로 gradle을 사용하실 겁니다.
근데 별 관심을 두지 않으면 그저 초반 세팅 시에만 조금 관심 가질 뿐 프로젝트를 진행하게 되면 별 신경을 쓰지 않게 됩니다.

오늘은 이 Gradle이 무엇이고 왜 사용하는지에 대해 조금 알아 볼까 합니다.

Gradle logo 이미지 입니다.

우선 Gradle 공식 문서에 정의된 설명을 보겠습니다.

 

Gradle은 거의 모든 유형의 소프트웨어를 빌드할 수 있을 만큼 유연한 오픈 소스 빌드 자동화 도구입니다.
Gradle은 빌드하려는 항목 또는 빌드 방법에 대해 거의 가정하지 않습니다. 
이것은 Gradle을 특히 유연하게 만듭니다라고 설명하고 있습니다.

설명에서 보듯 빌드 자동화 도구라는 설명이 되어있습니다.

보통 프로젝트 빌드시 사용한다고 이해하면 되겠습니다.

 

빌드 프로세스에는 코드 컴파일, 링크 및 패키징이 포함됩니다. 빌드 자동화 도구의 도움으로 프로세스의 일관성이 높아집니다.

Java , Scala , Android, C/C++ 및 Groovy 와 같은 언어로 자동화를 구축하는 기능으로 유명합니다 .

이 도구는 XML을 통해 Groovy 기반 도메인 특정 언어를 지원합니다.

 

Gradle은 여러 플랫폼에서 소프트웨어 빌드, 테스트 및 배포를 제공합니다.

 

근데 빌드 툴에는 Maven, Ant등 다른 빌드 툴들도 있는데 왜 Gradle을 사용할까요?

 

공식 문서에 따르면 

  • 고성능
  • JVM기반
  • 컨벤션
  • 확장성
  • IDE지원
  • 통찰력

으로 설계 되었다고 설명합니다. 그러니 이 설계가 Gradle을 사용하는 이유가 되겠습니다.

 

Gradle Maven

  • Groovy 기반 Domain Specific Language를 이용한 자동화 시스템 구축
  • 프로젝트 구성 선언에 XML 파일을 사용하지 않습니다.
  • 목표는 프로젝트에 기능을 추가하는 것입니다.
  • 작업 종속성 그래프를 기반으로 합니다.
  • 더 나은 성능을 제공하기 위해 변경된 작업에서만 작동합니다.
  • 고도로 사용자 정의 가능하여 광범위한 IDE 지원 빌드 제공

  • Java 프로젝트에 사용되는 소프트웨어 프로젝트 관리 시스템
  • 프로젝트 및 해당 종속성을 선언하기 위해 XML 파일을 사용합니다.
  • 목표는 프로젝트 단계와 관련이 있습니다.
  • 선형 및 고정 모델의 단계를 기반으로 합니다.
  • 빌드 캐시를 사용하지 않아 빌드 시간이 느려집니다.
  • 제한된 수의 매개변수 및 요구사항 제공

 

이전 Gradle 설정시 Groovy만 지원했었는데 최근에는 Kotlin DSL을 스크립트를 사용할 수 있게 되었고 가독성 또한 향상되었습니다.

Kotlin DSL사용시 컴파일시 에러를 잡아주고 자동완성및 문법을 강제시킴 (괄호를 포함해야함)으로 일관적으로 작성할 수 있는 장점이 있습니다.

 

사용예를 한번 살펴 보겠습니다.

 

안드로이드 프로젝트에 사용된 예

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

android {
    compileSdk 32

    defaultConfig {
        applicationId "com.gommi.testapp"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    
    ...
}

 

Kotlin SpringBoot 프로젝트에 사용된 예

import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "2.7.5"
    id("io.spring.dependency-management") version "1.0.15.RELEASE"
    id("idea")
    kotlin("jvm") version "1.7.20"
    kotlin("plugin.spring") version "1.7.20"
    kotlin("plugin.jpa") version "1.7.20"
    kotlin("plugin.allopen") version "1.7.20"
    kotlin("plugin.noarg") version "1.7.20"
    kotlin("kapt") version "1.7.20"
}

group = "com.gommi.linkeyserviceclone"
version = "0.0.1"
java.sourceCompatibility = JavaVersion.VERSION_11

allOpen {
    annotation("javax.persistence.Entity")
}

noArg {
    annotation("javax.persistence.Entity")
}

repositories {
    mavenCentral()
}

 

이상 Gradle이 무엇이고, 왜 사용하는지에 대해 알아 보았습니다.