Gradle

Woody·2024년 7월 31일
0

TIL

목록 보기
4/19

배경

멀티 모듈을 공부하기 위해 호기롭게 의존성 분리를 계획해서 모듈을 생성했지만 각 모듈 별 Gradle 관리를 어떻게 해야할지 도통 감이 오지 않았습니다.

프로젝트를 생성할 때, intellij에서 늘 자동으로 gradle을 설정해주고, dependency를 관리하는 역할로만 알았기 때문에 이번 기회에 Gradle에 대해 공부하기로 결정했습니다.

Gradle이란?

Gradle은 빌드 관리 도구 중 하나로 Groovy 기반의 빌드 스크립트인 build.gradle을 통해 의존성을 관리합니다.

빌드 관리 도구란?

우선 빌드란 소스 코드를 컴파일, 테스트, 정적분석 등을 실행하여 실행 가능한 애플리케이션으로 만들어주는 과정을 말하고, 이러한 빌드 과정을 자동화하여 관리하는 기능을 빌드 관리 도구라고 말합니다.

Gradle 프로젝트 구조

Gradle 프로젝트는 다음과 같은 구조를 가집니다.

project
├── gradle                              
│   ├── libs.versions.toml              
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew                             
├── gradlew.bat                         
├── settings.gradle(.kts)               
├── subproject-a
│   ├── build.gradle(.kts)              
│   └── src                             
└── subproject-b
    ├── build.gradle(.kts)              
    └── src                             
  • gradle
    • wrapper 파일을 저장하는 디렉토리
  • libs.versions.toml
    • 의존성 관리를 위한 Gradle 버전 카탈로그
  • gradlew , gradlew.bat
    • Gradle Wrapper
  • setting gradle
    • 루트 프로젝트 이름과 하위 프로젝트를 정의하는 Gradle 설정 파일
  • sub project의 build gradle
    • 하위 프로젝트의 Gradle 빌드 스크립트

Gradle Wrapper

Gradle Wrapper는 Gradle을 설치하지 않아도 빌드할 수 있도록 만들어주는 파일로 Gradle 버전을 호출하는 스크립트Gradle 빌드를 실행하는데 권장하는 방법입니다.

Gradle Wrapper를 사용하면 서로 다른 개발 환경에서 특정 Gradle 버전으로 표준화할 수 있기 때문에 다른 개발 환경의 사용자들 모두 동일한 Gradle 버전을 제공합니다.

Gradle Wrapper로는 gradlew , gradlew.bat 있습니다.

어떻게 Gradle 버전을 표준화할 수 있을까?

Gradle Build 과정을 보면 알 수 있다.

  1. Gradlew Wrapper 스크립트(gradlew,gradlew.bat)로 빌드를 실행할 때, 특정 Gradle 버전을 다운 받는다.
  2. 로컬에 해당 Gradle 버전을 저장한다.
  3. 해당 Gradle 버전을 사용하여 빌드를 실행한다.

이 때, 1번 과정에서 특정 Gradle 버전을 다운 받는 것을 볼 수 있는데, gradle/wrapper/gradle-wrapper.properties 파일을 보면 특정 Gradle 버전을 명시하며 Gradle 버전을 통일하는 것을 알 수 있다.

왜 Gradle을 사용할까?

빌드 관리 도구로 Maven도 있지만 왜 Gradle 사용을 추천하는 이유로는 대표적으로 성능 측면이 있습니다.

실제 Gradle Docs에서도 Gradle이 Maven보다 최소 2배 더 빠르고, 대규모 빌드의 경우 100배 더 빠르다고 나와있습니다.

Gradle이 Maven 보다 빌드 속도가 더 빠른 이유는 다음과 같습니다.

1. 점진적 빌드

빌드 실행 중 소스 코드가 변경되지 않았다면 최신 상태로 간주하고 빌드는 실행되지 않는다.

2. 빌드 캐시

두 개의 모듈이 동시에 실행되고 있을 때, 이 두 모듈이 하나의 모듈을 공유하고 있다면, 해당 모듈은 한번만 빌드되어 재사용이 가능하다.

3. 데몬 프로세스를 지원

데몬 프로세스는 사용자의 요청에 응답하기 위해 백그라운드에 실행되는 프로세스이다.

Gradle의 데몬 프로세스는 빌드 결과물을 메모리 상에 보관하여 다음 빌드 속도를 감소한다.

배운점

항상 Gradle Wrapper가 자동으로 생성되기 때문에 Gradle이 설치되어 있지 않아도 빌드가 되는 것이 당연하다고 생각했습니다. 이번 기회에 이러한 기능이 Gradle Wrapper를 통해 이루어진다는 것을 알게 되었습니다.

또한, Gradle이 Maven보다 빌드 속도가 빠르다는 것도 막연하게만 알고 있었지만, 이번에 어떤 방식으로 속도를 빠르게 만드는지 구체적으로 알 수 있었습니다.

참고

https://gradle.org/maven-vs-gradle/

https://www.youtube.com/watch?v=ntOH2bWLWQs

https://oya150.tistory.com/entry/gradle-wrapper-는-왜-필요-하나


0개의 댓글