Think Deeply

gradle, 왜 쓰는가

S_N_Y 2024. 2. 1. 23:01

먼저 Gradle이란?

Gradle은 빌드 자동화 시스템이다

(CI/CD를 위해 아래 작업들을 자동화 시켜 주는 Groovy 기반의 오픈소스 빌드 도구)

+) 빌드 도구란?

소프트웨어 개발에 있어서 소스 코드를 실행 가능한 어플리케이션으로 만들어주는 도구

빌드 과정을 자동화하여 관리하는 기능을 하기 때문에 빌드 관리 도구 도는 빌드 자동화 도구라고 불리기도 한다

 

Gradle을 사용하면 간편하게 Java 소스 코드를 실행한 가능한 jar 파일로 만들어준다

그리고 우리가 작성한 Java 코드를 설정에 맞게 자동으로 Build해준다

- Build란 소스 코드를 실행 가능한 결과물로 만드는 일련의 과정을 뜻한다

- 우리가 개발을 하면서 필요로하는 외부 라이브러리들을 dependencies 부분에 작성하면 Gradle이 해당 라이브러리들을 Maven Repository(= 라이브러리를 모아둔 저장소) 와 같은 외부 저장소에서 자동으로 다운로드

Maven과 gradle의 차이점과 gradle이 선호되는 이유는 뭘까?

- Maven의 특징

불편함을 해결하고자 Ant이후에 나온 자바 빌드 도구로 자동으로 라이브러리와 의존성을 관리하는 기능이 있다

Ant와 마찬가지로 XML 스크립트를 기반으로 하며, pom.xml 파일로 의존성을 관리한다

Maven에서는 라이프 사이클 개념이 도입되어 빌드 순서 등을 정의 할 수 있다

- Gradle의 특징

가장 최근에 나온 자바 빌드 도구로 "Groovy (그루비)" 문법을 사용

build.gradle에 스크립트를 작성하며, 대규모 프로젝트에서 복잡해지는 경향이 있는 XML 기반 스크립트에 비해 관리가 편하다는 장점이 있다

 

gradle이 선호되는 이유

1. 설정파일 측면에서의 간결한 스크립트

Gradle 이전의 빌드 도구인 Ant와 Maven은 이런 식으로 XML 문법으로 스크립트를 작성하였다

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>maventTest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.9.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.0</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

</project>

하지만 XML은 태그 문법 때문에 복잡한 빌드 스크립트를 작성하기에는 까다로우며 가독성또한 떨어진다

반면, Gradle은 위에 첨부된 이미지와 같이 Groovy 문법으로 간결한 스크립트를 작성할 수 있다

2. 빌드 속도와 멀티 프로젝트 빌드

Gradle은 테스트를 실행할 때 1.7배 더 빠르고 빌드 캐시를 사용할 때 최대 30배 더 빠르게 빌드

성능 측면에서는 둘 다 다중 모듈 빌드를 병렬로 실행할 수 있지만, Gradle은 어떤 task가 업데이트되었고 안되었는지를 체크하기 때문에 incremental build를 허용

이미 업데이트된 테스크에 대해서는 작업이 실행되지 않으니 빌드 시간이 훨씬 단축된다

프로젝트 규모가 커지게 되면(빌드 설정 규모가 커지면 커질수록)빌드 속도 차이가 개발 생산성에 큰 영향을 미치게 된다

Gradle은 캐싱(caching)을 하기 때문에 Ant나 Maven같은 이전 빌드 도구보다 빌드 속도가 빠르다는 장점을 갖는다

그리고 대규모 자바 프로젝트는 대부분 하나의 프로젝트 안에 여러 모듈이 동시에 개발되고, 각 모듈이 공통으로 사용하는 모듈도 만들어지게 되는데

이렇게 여러 모듈이 동시에 개발되는 경우 각각 따로 빌드 작업을 하면 번거로울 뿐 아니라 실수가 발생할 수 도 있다고 한다

Gradle은 멀티 프로젝트 빌드 기능을 제공하기 때문에 이런 번거로움과 실수를 줄일 수 있다..!

 

 

gradle하면 편리하게 쓸 수 있는 부분들에 대해

build.gradle은 Gradle 기반의 빌드 스크립트이며 이 스크립트를 작성하면 소스 코드를 빌드하고 라이브러리들의 의존성을 쉽게 관리할 수 있다

groovy 혹은 kotlin 언어로 스크립트를 작성할 수도 있다

또한 다른 라이브러리들과의 의존성을 자동으로 관리해 주기 때문에 라이브러리들간의 충돌 걱정없이 개발에만 집중할 수 있다는 것이다

개발자들은 모든 기능을 전부 직접 구현하지 않고 미리 작성되어있는 라이브러리들을 사용하여 기능을 빠르고 쉽게 구현할 수 있다

 

알고나니 gradle을 왜 써야 하는지 알게 되어서 더 마음 편히 setting할 수 있겠다 :)