Gradle(1) - 오픈 소스 빌드 자동화 도구 Gradle

Gradle은 소프트웨어를 빌드하거나 의존성을 관리하는 데 사용되는 범용 오픈 소스 빌드 자동화 도구이다. 주로 스프링 부트 계열의 자바 프로젝트나 안드로이드 빌드 시스템으로 사용되지만, 그 외 다양한 플랫폼과 소프트웨어에서도 사용 가능하도록 유연하게 설계되어 있다.

gradle-dark-green-primary

Gradle은 빌드 캐시를 사용한 최적화나 핀포인트 태스크 실행 기능이 구현되어 있어 성능이 뛰어나며 확장성이 좋을 뿐만 아니라 안드로이드 스튜디오, IntelliJ IDEA, Eclipse 및 NetBeans 등 여러 주요 IDE에서 지원하고 있어 사용성도 훌륭하다. Gradle은 JVM에서 실행되므로 JVM 플랫폼을 사용하는 Java나 Kotlin, Groovy, Scalar 등의 언어 사용자에게 장점이 크다.

빌드 자동화 도구란?

소스 코드를 작성했다면, 이를 배포하기 위해스는 실행 가능한 독립된 소프트웨어로 변환하는 과정이 필요하다. 언어에 따라서 이 과정은 컴파일, 아카이빙, 패키징 등의 작업을 포함하기도 한다. 즉, 소스 코드를 컴파일하여 바이너리 파일로 변환하거나 또는 여러 개의 소스 코드를 묶어 하나의 독립된 프로그램으로 만들어내는 과정이 있어야 한다는 것이다. 이를 빌드(Build)라고 한다.

빌드의 결과물은 환경과 목적에 따라 다양하다. 윈도우라면 dll 또는 exe 파일로 만들어야 하고, 맥 OS라면 dmg, pkg 파일로 만들어야 한다. 만약 자바 애플리케이션이라면 jar나 war 파일이 만들어져야 한다.

프로젝트와 태스크

Gradle을 구성하는 요소는 프로젝트와 태스크이다.

모든 Gradle 빌드는 하나 이상의 프로젝트(Project)로 구성된다. 프로젝트가 의미하는 바는 무척 다양하며, Gradle로 어떤 작업을 수행하는가에 의해 결정된다. Jar 형태의 라이브러리나 웹 애플리케이션이 될 수도 있고, Jar 파일의 묶음 배포용 ZIP 파일이 될 수도 있다. 경우에 따라서는 스테이징이나 프로덕션 환경에 애플리케이션을 배포하는 과정처럼 결과물이 불분명한 작업이 프로젝트로 구성되기도 한다. 참고로 모든 Gradle 프로젝트의 루트 디렉토리에는 build.gradle 파일이 존재한다.

각 프로젝트는 하나 이상의 태스크(Task)로 구성된다. 클래스를 컴파일하거나 패키징하여 Jar를 생성하는 것, 또는 자바 파일을 읽어 Javadoc 문서를 생성하거나 아카이브된 파일을 저장소에 업로드하는 각각이 모두 태스크에 속한다. Gradle을 실행한다는 것은 곧, 태스크를 실행한다는 의미와 같다.

Gradle은 명령에 의해 지정된 태스크(Task)를 수행하는 프로그램이다.

Gradle 설치

1. JDK 설치하기

Gradle 시스템을 사용하기 위해서는 JDK(Java Development Kit)가 설치되어 있어야 한다. Gradle이 JVM에서 실행되기 때문이다. 다운로드 페이지를 통해 JDK를 다운받아 설치하자. JDK 설치 과정은 여기를 참고한다.

JDK 설치가 끝나면 터미널을 통해 java -version 커맨드를 실행한다. 정상적으로 설치되었다면 아래와 같이 출력될 것이다(선택한 버전에 따라 결과값이 조금 다를 수는 있으나 상관없다. 필자는 아직 JDK 1.8 버전을 즐겨 사용하고 있다).

$ java -version
java version "1.8.0_132"
Java(TM) SE Runtime Environment (build 1.8.0_132-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.132-b12, mixed mode)

2. Gradle 설치하기

2.1 패키지 관리자를 이용하여 자동으로 설치하기

맥(MacOS)을 사용하는 유저라면 Homebrew를 이용하여 간단하게 Gradle을 설치할 수 있다.

$ brew install gradle

SDKMAN, Scoop, Chcolatey, MacPorts 등 다른 방식으로도 설치가 가능하다. 다른 방법으로 설치하고자 한다면 여기를 참고하자.

2.2 수동으로 설치하기

패키지 관리자를 이용한 방법은 편리하지만 원하는 버전을 지정할 수 없는 등의 제약이 있다. 최신 버전 사용을 원하지 않는다면 Gradle을 수동으로 설치해 주어야 한다. 자동 설치보다는 조금 번거롭지만 그다지 어렵지는 않다.

STEP 1) Gradle 파일 내려받기

수동 설치를 위해서는 우선 원하는 버전의 Gradle을 내려받아야 한다. 아래 링크를 참고하여 버전을 선택하자.

✓ 다운로드 페이지

바이너리 파일만 내려받아도 되지만 좀더 자세히 공부해보고 싶다면 Complete 버전을 내려받아 보는 것도 괜챃다. 다만 Gradle 실습을 위해서는 바이너리 버전이면 충분하다.

STEP 2) 설치하기

설치라고는 해도 윈도우 프로그램 설치 과정처럼 복잡하지는 않다. 내려받은 ZIP 파일의 압축을 풀고 원하는 경로에 옮겨놓기만 하면 된다.

다음은 맥 환경에서 5.5.1 버전으로 내려받은 Gradle을 /opt/gradle경로에 설치하는 예이다.

$ mkdir /opt/gradle
$ unzip -d /opt/gradle gradle-5.5.1-bin.zip
$ ls /opt/gradle/gradle-5.5.1
LICENSE  NOTICE  bin  getting-started.html  init.d  lib  media

여러 가지 버전의 Gradle을 사용할 경우를 대비하여, 선택한 디렉토리 하위에 버전을 명시한 폴더 형식으로 관리하는 것을 추천한다.

윈도우의 경우도 크게 다르지 않다. 파일 탐색기로 원하는 디렉토리( 예: C:\Gradle)를 생성하고, 다운로드 받은 Gradle ZIP 파일의 압축을 해제하여 파일을 모두 드래그하면 된다.

STEP 3) 시스템 환경 구성하기

컴퓨터 내 어느 곳에서든 Gradle을 손쉽게 호출하려면 환경 변수를 설정해주어야 한다. 조금 전 압축을 푼 경로를 GRADLE_HOME 변수로 추가하고, GRADLE_HOME/bin 을 시스템 환경 변수에 등록하자. 임의의 변수명을 사용해도 되지만, 통일성을 위해서는 GRADLE_HOME 변수명을 사용하는 것을 권장한다. 다음은 맥 사용자를 위한 환경 변수 설정 과정이다.

$ export GRADLE_HOME=/opt/gradle/gradle-5.5.1
$ export PATH=$PATH:$GRADLE_HOME/bin

GRADLE_HOME 변수를 추가하기 싫다면 다음과 같이 한번에 등록해도 무방하다.

$ export PATH=$PATH:/opt/gradle/gradle-5.5.1/bin

윈도우 사용자의 경우에는 시스템 환경 변수 창을 열어, 선택한 디렉토리(예시 : C\Gradle\gradle-5.5.1\bin) 경로를 시스템 환경 변수 PATH에 등록해 주면 된다.

이미지

설치 확인

시스템 환경 설정까지 끝났다면 마지막으로 제대로 설치되었는지 체크하자. 콘솔창이나 터미널 창, 또는 파워쉘(윈도우일 경우)을 열고 다음과 같이 커맨드를 입력하여 결과를 확인한다.

$ gradle -v 

------------------------------------------------------------
Gradle 5.5.1
------------------------------------------------------------

Build time:   2019-07-10 20:38:12 UTC
Revision:     3245f748c7061472da4dc184991919810f7935a5

Kotlin:       1.3.31
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.14 compiled on March 12 2019
JVM:          12.0.1 (Oracle Corporation 12.0.1+12)
OS:           Mac OS X 10.15.6 x86_64

Gradle 내장 태스크

설치된 Gradle은 몇 가지 기본 테스크를 제공한다. 대부분 프로젝트를 세팅하거나 빌드, 컴파일하는 데 필요한 것들로, 이를 내장 태스크라고 한다. 잘 알려진 gradle build 또는 gradle wrapper 등은 모두 내장 태스크에 해당한다.

지원하는 내장 태스크 목록을 확인하려면 gradle tasks --all을 사용하면 된다.

$ gragle tasks --all -q 

------------------------------------------------------------
Tasks runnable from root project
------------------------------------------------------------

Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.

Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'GradlePractice'.
components - Displays the components produced by root project 'GradlePractice'. [incubating]
dependencies - Displays all dependencies declared in root project 'GradlePractice'.
dependencyInsight - Displays the insight into a specific dependency in root project 'GradlePractice'.
dependentComponents - Displays the dependent components of components in root project 'GradlePractice'. [incubating]
help - Displays a help message.
model - Displays the configuration model of root project 'GradlePractice'. [incubating]
projects - Displays the sub-projects of root project 'GradlePractice'.
properties - Displays the properties of root project 'GradlePractice'.
tasks - Displays the tasks runnable from root project 'GradlePractice'.

Other tasks
-----------
prepareKotlinBuildScriptModel

내장 태스크 중에서 중요한 몇 가지는 후속 포스팅에서 다룰 예정이다