본문 바로가기

기타

[Gradle] Gradle 이란?

반응형

Springboot 프로젝트를 생성할 때에 project 종류로 maven 과 gradle 을 선택할 수 있다. 프로젝트를 생성해서 개발을 할때 주로 gradle 을 사용하는데, dependencies 등을 설정하고 빌드할 때 gradle 을 사용하지만 자세한 용도와 내용을 잘모르고 사용하고 있다. 그래서 Gradle 에 대한 내용을 정리해본다.

 

아래의 내용은 Gradle User Manual 의 What is Gradle? 페이지의 내용을 정리한 것이다.

1. Gradle 이란?

Gradle 은 오픈소스 빌드 자동화 툴로 거의 모든 종류의 소프트웨어를 빌드할 수 있는 유연성을 가지고 있다. Gradle 은 빌드하려는 대상이나 빌드 방식에 대한 가정, 제한을 거의 하지않는데, 이러한 성질이 Gradle 을 유연하게 만든다.

- Design

Gradle 은 다음과 같은 설계 특징을 가지고 있다.

1) High performance

Gradle 은 입력이나 출력의 변화로 인해 동작이 필요한 작업만 수행하도록 한다. Gradle 은 이전의 빌드 내용들을 재사용하기 위해 다양한 캐쉬를 사용한다. 빌드 캐쉬의 공유를 통해서 다른 장비에서 빌드된 결과물도 재사용할 수 있다.

2) JVM foundation

Gradle 은 JVM 위에서 실행된다. 빌드 로직이 Java API 를 사용할 수 있기 때문에 Java 에 익숙한 사용자들은 쉽게 사용할 수 있다. 또한 JVM 만 있으면 다양한 플랫폼에서 Gradle 을 쉽게 실행할 수 있다.

3) Conventions

Gradle 은 컨벤션을 통해서 일반적인 타입의 프로젝트를 쉽게 빌드할 수 있게한다. 플러그인은 빌드 스크립트를 최소한으로 유지하기 위하여 합리적인 디폴트 값을 설정한다. 그렇다고 이러한 컨벤션에 종속되어 사용이 제한되지는 않는다. 사용자는 직접 빌드의 설정을 구성하고 커스터마이징한 사용자 설정을 적요할 수 있다.

4) Extensibility

대부분의 빌드는 사용자 설정 빌드 로직을 사용해야 하는 경우가 존재한다. Gradle 을 사용하면 사용자 설정 작업이나 플러그인을 통한 빌드 로직을 제공할 수 있다.

5) IDE support

Androit Studio, IntelliJ, Eclipse, VS code, NetBeans 와 같은 메이저 IDE 들은 Gradle 빌드와 연동 기능들을 제공한다. 또한 Visual Studio 의 프로젝트를 로드하기 위한 solution 파일들도 Gradle 을 사용하여 생성할 수 있다.

6) Insight

Build Scan 을 사용하여 다양한 문제를 식별할 수 있는 빌드 관련 정보들을 얻을 수 있습니다. Build Scan 을 통해서 빌드 성능 관련 문제를 식별하거나 디버깅에 필요한 정보로 공유할 수 있다.

Build Scan 과 관련된 내용은 아래의 링크에서 확인할 수 있다.

- https://scans.gradle.com/?_ga=2.151529210.212292899.1673530719-661674771.1672933639

- Terminology

Gradle 을 이해하는데 도움이 될 수 있는 관련 용어들의 설명이다.

1) Projects

Project 는 Gradle 이 빌드하는 것들을 의미한다. Project 는 일반적으로 project 의 root 디렉토리에 위치한 build.gradle 또는 build.gradle.kts 라는 이름의 빌드 스크립트를 포함하고 있다. 빌드 스크립트는 작업들과 dependencies, plugins, 그리고 다른 기타 project  관련 설정들을 정의해놓은 파일이다. 단일 빌드는 하나 이상의 project 를 포함할 수 있으며, 각각의 프로젝트 또한 각각의 subproject 들을 가질 수 있다.

2) Tasks

Task 는 코드 컴파일이나 테스트 실행, 소프트웨어 배포와 같은 작업들의 실행 로직을 포함하고 있다. 대부분의 경우에는 직접 구현하지 않고 이미 존재하는 task 들을 사용하면 된다. Gradle Java Test task 와 같이 대부분의 일반적인 빌드 시스템의 필요 내용들을 이미 구현한 task 들을 제공한다. Plugin 은 더 많은 종류의 task 들도 제공한다.

 

Task 는 다음의 내용들로 구성되어진다.

 

- Actions: 파일 복사나 소스코드 컴파일과 같이 수행할 작업 내용
- Inputs: actions 에서 사용되거나 운영에 필요한 디렉토리나 파일 또는 특정 입력값 정보
- Outputs: actions 에 의해서 수정되거나 생성되는 파일이나 디렉토리 정보

3) Plugins

플러그인을 사용하면 작업, 파일 및 종속성 구성 등을 넘어서 빌드에 새로운 개념을 적용할 수 있다. 예를 들어, 대부분의 언어 플러그인들은 source sets 개념을 빌드에 추가한다.

 

플러그인은 여러 프로젝트의 로직과 설정을 재사용할 수 있도록 해준다. 플러그인을 사용하면 한번 작성한 작업을 여러 빌드에서 사용할 수 있다. 또는 로깅이나 종속성, 버전 고나리와 같은 일반적인 설정들을 저장할 수 있다. 이를 통해서 빌드 스크립트의 중복을 줄일 수 있다. 플러그인으로 빌드 프로세스를 적절하게 모델링하면 편의성과 효율성을 크게 향상시킬 수 있다.

 

※ source sets

source sets 의 핵심 개념은 소스코드와 리소스들이 논리적으로 묶여있는 것이다. application code, unit test, integration test 와 같이 용도에 맞게 각 타입의 그룹으로 묶는 것이다. 각 그룹들은 각각 종속성이나 클래스패스와 같은 파일들을 가지게 된다. 이때 source set 에 묶이는 파일들이 꼭 같은 디렉토리에 있을 필요는 없다.

 

Gradle 은 이렇게 정의된 source set 에 대하여 compile task 와 resousce 관련 task 등을 생성한다. 자세한 내용은 아래 링크에서 확인할 수 있다.

 

- https://docs.gradle.org/current/userguide/building_java_projects.html#sec:java_source_sets

4) Build Phases

Gradle 은 다음의 3가지 빌드 라이프사이클 과정에 따라서 빌드 스크립트를 평가하고 실행한다.

 

- Initialization: 빌드 환경을 설정하고 어떤 프로젝트가 빌드에 포함될지 결정한다.
- Configuration: 빌드를 위한 task 그래프를 구성하고 설정한다. 빌드에서 실행될 task 들과 순서 등을 결정한다.
- Execution: Configuration 과정에서 구성된 task 들을 실행한다.

5) Builds

빌드는 Gradle 프로젝트의 task 집합을 실행하는 것이다. CLI 나 IDE 를 사용하여 task 를 선택하여 빌드를 수행할 수 있다. Gradle 은 요청된 task 와 dependencies 에 따라 최소의 빌드 세트를 구성하여 실행한다.

[Reference]

- https://docs.gradle.org/current/userguide/what_is_gradle.html

 

What is Gradle?

Gradle bases its design on the following fundamentals: High performance Gradle avoids unnecessary work by only running tasks that need to do work because inputs or outputs have changed. Gradle uses various caches to reuse outputs from previous builds. With

docs.gradle.org

 

반응형

'기타' 카테고리의 다른 글

[MongoDB] Aggregation  (0) 2023.05.02
[Gradle] Gradle 사용법 - 설치, 초기화 및  (1) 2023.01.17
[기타] Sync - Async / Blocking - Non-Blocking  (0) 2022.04.05
[Kafka] Kafka Consumer 예제  (0) 2022.03.22
[Kafka] Kafka Producer 예제  (0) 2022.03.21