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
'기타' 카테고리의 다른 글
[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 |