Gradle 설치 및 사용하기
Gradle을 설치하고 사용하는 방법에 대해 정리한 내용입니다.
1. Gradle
Spring 프로젝트의 빌드 도구로는 Maven을 많이 사용하지만 XML 기반의 설정 파일인 pom.xml은 동적인 구성에 제약이 있었습니다. 이러한 Maven의 대안으로 나온 Gradle은 Groovy 기반의 스크립트 언어로 구성되어 있으며 변수 선언 및 조건문(if-else, for) 등을 사용하여 로직 구현이 가능합니다.
Gradle의 특징은 다음과 같습니다.
- Ant 빌드 도구와 Maven 의존성 라이브러리 관리 기능을 차용
- Maven에 비해 10~100배 정도 빠른 빌드 속도
- Maven의 상속 구조와는 다른 설정 주입(Configuration Injection)을 사용하여 유연한 빌드 환경 구성
- Groovy 기반의 스크립트를 사용하여 코딩에 의한 간결하고 동적인 설정 정보 구성
- Gradle 설치 없이도 Gradle Wrapper를 이용한 빌드 지원
- Maven, Ivy repository 지원
- 멀티 프로젝트 빌드를 지원
1.1. Gradle 설치하기
다음과 같이 homebrew를 이용하여 gradle을 설치해줍니다.
$ brew install gradle
Running `brew update --auto-update`...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
git-delete-merged-branches libeatmydata mesheryctl open62541 pkcs11-tools
==> New Casks
iqmol livebook
You have 10 outdated formulae installed.
You can upgrade them with brew upgrade
or list them with brew outdated.
==> Downloading https://ghcr.io/v2/homebrew/core/openjdk/manifests/18.0.2
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/openjdk/blobs/sha256:bbcf2194487d9beeaa1d5e08
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:bbcf2194487d9beeaa1d5e08?se=2022-07-31T10%3A25%3A00Z&sig=33D2JDj4dN2nRiWmKfnpnkqUTXMorwRb4Hx%2FetPHQWs%3D&sp=r&spr=https&sr=b&sv=2019-12-12
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/gradle/manifests/7.5
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/gradle/blobs/sha256:86b7fe4097ed2d3608afdcad057cc4871e
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:86b7fe4097ed2d3608afdcad057cc4871e?se=2022-07-31T10%3A25%3A00Z&sig=YrAgBI8QReFZCalmX34feAdasJU9FqgXlLqFU8Ex0uc%3D&sp=r&spr=https&sr=b&sv=2019-12-12
######################################################################## 100.0%
==> Installing dependencies for gradle: openjdk
==> Installing gradle dependency: openjdk
==> Pouring openjdk--18.0.2.arm64_monterey.bottle.tar.gz
🍺 /opt/homebrew/Cellar/openjdk/18.0.2: 642 files, 309MB
==> Installing gradle
==> Pouring gradle--7.5.all.bottle.tar.gz
🍺 /opt/homebrew/Cellar/gradle/7.5: 11,340 files, 276.1MB
==> Running `brew cleanup gradle`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
설치된 버전을 확인해줍니다.
$ gradle --version
------------------------------------------------------------
Gradle 7.5
------------------------------------------------------------
Build time: 2022-07-14 12:48:15 UTC
Revision: 123456789089ad2b0c1472b6fe663e6d654a5103
Kotlin: 1.6.21
Groovy: 3.0.10
Ant: Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM: 18.0.2 (Homebrew 18.0.2+0)
OS: Mac OS X 12.5 aarch64
1.2. Gradle Wrapper
Gradle Wrapper는 빌드 관련 설정을 프로젝트에 함께 포함하여 배포할 수 있도록 지원해줍니다. CI(Continuous Integration) 환경에서 빌드할 때 java 또는 gradle의 설치 없이 환경에 종속되지 않고 빌드가 가능하도록 해줍니다. Spring Initializr를 이용하여 프로젝트를 생성하면 Gradle이 자동으로 설치되는데 이것은 Gradle Wrapper를 통해 설치된 것 입니다.
설치된 Gradle의 기본 구조는 다음과 같습니다.
gradle
├── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
gradlew
gradlew.bat
build.gradle
settings.gradle
각 파일들의 용도는 다음과 같습니다.
- gradle/wrapper/gradle-wrapper.jar
실행 스크립트가 동작할 때 Wrapper에 맞는 환경을 로컬 캐시에 다운로드 받아 task를 실행. - gradle/wrapper/gradle-wrapper.properties
Gradle 버전 정보와 같은 설정 정보가 있는 프로퍼티 파일. - gradlew
유닉스, 리눅스 및 MacOS용 wrapper 실행 스크립트. - gradlew.bat
윈도우용 wrapper 실행 배치 스크립트. - build.gradle
빌드에 필요한 모든 설정을 정의하는 파일.
프로젝트 환경 설정, 빌드 방법, 라이브러리 정보 등을 작성하여 빌드 및 프로젝트의 관리 환경을 구성. - setting.gradle
프로젝트 구성을 설정할 때 작성하는 파일.
멀티 프로젝트를 구성할 때 사용.
또한 Gradle Wrapper를 이용하여 다음 명령어를 실행하면 버전을 수정 할 수 있습니다. 실행 이후에 gradle-wrapper.properties 파일의 distributionUrl 값을 확인해보면 수정한 버전을 확인할 수 있습니다.
$ gradle wrapper --gradle-version 7.5
1.3. build.gradle
build.gradle 파일은 프로젝트의 환경과 빌드 정보를 설정하는 파일입니다. Groovy 문법의 메서드와 프로퍼티로 설정을 정의할 수 있습니다.
다음은 Spring Initializr로 프로젝트 생성시 함께 만들어지는 build.gradle 파일입니다.
plugins {
id 'org.springframework.boot' version '2.7.2'
id 'io.spring.dependency-management' version '1.0.12.RELEASE'
id 'java'
}
group = 'com.freestrokes'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'junit:junit:4.13.2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
compileOnly 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
}
각 프로퍼티의 역할은 다음과 같습니다.
- plugins
프로젝트에서 환경 구성에 필요한 플러그인을 추가. - group
프로젝트 groupId - version
프로젝트 버전 - sourceCompatibility
프로젝트 자바 버전 - repositories
라이브러리를 다운로드 할 저장소.
jcenter 또는 maven 저장소를 사용 가능. - dependencies
의존성 라이브러리를 추가.
- api, compile
라이브러리를 추가
라이브러리 수정 시 해당 라이브러리에 의존하는 모든 라이브러리들을 빌드
compile의 경우 Gradle 3.0 부터는 사용하는 것을 권장하지 않음 - implementation
라이브러리를 추가
라이브러리 수정 시 해당 라이브러리에 직접 의존하는 라이브러리만 빌드 - testImplementation
테스트에 사용하는 라이브러리 추가 - annotationProcessor
어노테이션 기반 라이브러리를 컴파일러가 인식할 수 있도록 추가 (Lombok, QueryDSL, ConfigurationProperties 등) - compileOnly
compile 시점에만 필요한 라이브러리를 추가. - runtimeOnly
runtime 시점에만 필요한 라이브러리를 추가.
- api, compile
이상으로 Gradle 설치 및 사용 방법에 대해 알아봤습니다.
※ References
- docs.gradle.org, Gradle User Manual, https://docs.gradle.org/current/userguide/userguide.html
- kotlinworld.com, Mac에서 Gradle 설치하기, https://kotlinworld.com/312
- kotlinworld.com, [Gradle] build.gradle의 동작원리 한 번에 정리하기, https://kotlinworld.com/321
- dev-coco.tistory.com, 메이븐(Maven)과 그래들(Gradle)의 개념 및 비교, https://dev-coco.tistory.com/65
- jungseob86.tistory.com, Gradle Wrapper란?, https://jungseob86.tistory.com/21
- compogetters.tistory.com, Gradle Compile과 implementation의 차이점, https://compogetters.tistory.com/64
- 김영재 지음, 『처음 배우는 스프링 부트 2』, 한빛미디어 (2019), p44 ~ p46. CHAPTER 2 스프링 부트 환경 설정