What is Gradle?

appti·2021년 11월 2일
0

Gradle

목록 보기
1/5

해당 내용은 Gradle 공식 홈페이지의 내용을 정리한 내용입니다.

What is Gradle?

Gradle은 유연한 오픈 소스 빌드 자동화 도구입니다.

빌드 자동화라는 의미는 소스 코드 컴파일, 패키징, 테스크 실행 등 일련의 작업을 통해 빌드 생성을 자동화하는 기술을 의미합니다.

Overview

Gradle의 특징은 다음과 같습니다.

  • 고성능(High performance)

    • Gradle은 변경 사항으로 인해 다시 실행해야 할 작업들만 실행하여 불필요한 작업을 방지합니다.
    • 빌드 캐시를 사용하여 이전 실행 또는 다른 시스템(공유 빌드 캐시 사용)의 작업 출력을 재사용할 수 있습니다.
  • JVM(JVM foundation)

    • Gradle은 JVM에서 실행되므로 JDK(Java Development Kit)가 설치되어 있어야 합니다.
    • 다양한 플랫폼에서 Gradle을 실행할 수 있습니다.
  • 관례(Conventions)

    • Maven의 규칙 일부를 가져오고 이를 구현하여 Java 프로젝트와 같은 일반적인 유형의 프로젝트를 쉽게 구축할 수 있습니다.
    • Gradle에서 기본으로 제공하는 플러그인을 사용하면 간단하게 빌드 스크립트를 작성할 수 있고, 필요하다면 사용자 정의 플러그인을 생성하는 것 또한 가능합니다.
  • 확장성(Extensibility)

    • Gradle을 확장하여 고유한 작업 유형을 제공하거나 모델을 빌드할 수 있습니다.
      • Android 빌드 지원 참조
  • IDE 지원

    • Android Studio, IntelliJ IDEA, Eclipse 및 NetBeans와 같은 여러 주요 IDE를 사용하여 Gradle 빌드를 가져와 상호 작용할 수 있습니다.
  • 통찰력(Insight)

    • Build scan을 통해 빌드 문제를 식별하는 데 사용할 수 있는 빌드 실행에 대한 광범위한 정보를 제공합니다.
    • 빌드 성능과 관련된 문제를 식별하는 데 유용하며, 다른 사람과 공유도 가능합니다.

Five things you need to know about Gradle

Gradle is a general-purpose build tool

범용 빌드 도구이기 때문에 빌드하려는 대상이나 수행 방법에 대해 거의 가정하지 않기 때문에 모든 소프트웨어를 빌드할 수 있지만, 빌드하려는 대상을 구체화하는 단계가 필요하다는 의미입니다.

그렇기 때문에 Gradle의 프로젝트도 Gradle로 수행하는 작업에 따라 다르다는 상당히 모호한 특징을 갖게 됩니다.

이 경우 Gradle의 빌드 별 관례(build-by-convention)에 의해 프로젝트가 구체적으로 정의할 수 있습니다.

종속성 관리의 경우 Maven 및 lvy 호환 리포지토리와 파일 시스템만 지원합니다.

The core model is based on task

Gradle은 빌드는 태스크(작업 단위)의 방향성 비순환 그래프(DAG)로 모델링합니다.
이는 빌드가 기본적으로 작업 세트를 구성하고 종속성을 기반으로 함께 연결하여 해당 DAG를 생성한다는 것입니다.
작업 그래프가 생성되면 Gradle은 어떤 태스크를 어떤 순서로 실행해야 하는지 결졍한 다음 빌드를 진행합니다.

좌측은 추상적인 그래프이고 우측은 구체적(Java Plugin)인 그래프입니다.
모든 빌드 프로세스는 이러한 방식으로 작업 그래프로 모델링할 수 있으며, 이것이 Gradle이 유연한 이유입니다.
이러한 작업 그래프는 작업 종속성 메커니즘(dependsOn)을 통해 연결된 태스크와 함께 플러그인이나 자체 빌드 스크립트로 정의할 수 있습니다.

태스크는 다음과 같이 구성됩니다.

  • Actions : 파일 복사나 소스 컴파일 같은 실행해야 할 모든 코드를 의미(작업을 수행하는 부분)
  • Inputs : Actio이 사용하거나 운영하는데 필요한 값이나 파일 및 디렉토리를 의미
  • Outputs : Action이 수정하거나 생성하는 파일 및 디렉토리

물론 모든 태스크가 Action을 가지고 있는 것은 아닙니다.
표준 수명 주기 작업과 같은 일부 작업에는 Action이 존재하지 않습니다.

Gradle has several fixed build phases

세 가지 고정 빌드 단계가 존재합니다.

  1. 초기화(Initialization)
  • 빌드를 위한 환경을 설정하고 사용할 프로젝트를 결정합니다.
  1. 구성(Configuration)
  • 빌드에 대한 태스크 그래프를 구성하여 사용자가 실행하려는 태스크의 순서를 결정합니다.
  1. 실행(Execution)
  • 구성 단계가 종료된 이후 태스크를 실행합니다.

구성 단계의 경우 빌드가 실행될 때마다 모든 태스크가 프로젝트에 포함되기 때문에 구성 단계에서 비용이 많이 드는 태스크는 사용하지 않는 편이 좋습니다.

Gradle is extensible in more ways than one

Gradle의 경우 빌드할 때 사용자 지정 빌드 논리를 추가해야 하는 요구 사항이 존재합니다.

Gradle은 다음과 같이 확장할 수 있는 몇 가지 메커니즘을 제공합니다.

  • 사용자 정의 태스크 유형(Custom task types)
    • 기존 태스크가 할 수 없는 작동을 하기 위해서는 고유한 태스크 유형을 작성하면 됩니다.
      일반적으로 사용자 정의 작업 유형에 대한 소스 파일은 buildSrc 디렉토리 또는 패키지된 플러그인 안에 추가합니다.
  • 사용자 정의 태스크 Action(Custom task actions)
    • Task.doFirst()Task.doLast() 메소드를 통해 태스크 전후에 실행되는 사용자 지정 빌드 로직을 연결할 수 있습니다.
  • 프로젝트 및 태스크에 대한 추가 속성(Extra properties on projects and tasks)
    • 프로젝트 또는 태스크에 고유한 속성을 추가한 다음 고유한 사용자 지정 작업 또는 기타 빌드 로직에서 사용할 수 있습니다.
  • 사용자 지정 관례(Custom conventions)
    • 관례는 사용자가 더 쉽게 이해하고 사용할 수 있도록 빌드를 단순화하는 강력한 방법입니다.
      Java builds와 같은 표준 프로젝트 구조 및 명명 규칙을 사용하는 빌드에서 볼 수 있습니다.
      규칙을 제공하는 자체 플러그인을 작성할 수 있으며, 빌드의 관련 측면에 대한 기본 값을 구성하기만 하면 됩니다.
  • 커스텀 모델(A custom model)
    • Gradle을 사용하면 태스크, 파일 및 종속성 구성을 넘어 새로운 개념을 빌드에 도입할 수 있습니다.
      빌드에 소스 세트(Source sets)라는 개념을 추가할 수 있습니다.

Build scripts operate against an API

Gradle을 단순히 빌드 스크립트를 실행 가능한 코드로 보는 것이 아니라, 구현하기 위한 세부 정보는 사용자 정의 태스크 유형 및 플러그인에 대한 태스크가 필요합니다.

그러나 빌드 스크립트를 실행 가능한 코드로 보는 시점이 유용한 한 가지 영역이 있는데, 이는 빌드 스크립트의 구문이 Gradle API에 매핑되는 방식을 이해하는 것입니다.
Groovy DSL Reference와 Javadocs로 구성된 API를 통해 메소드의 속성을 나열하고 클로저와 태스크를 참조할 수 있습니다.

profile
안녕하세요

0개의 댓글