본문 바로가기
Engineering WIKI/Docs

Gradle 개념

by wonos 2023. 5. 29.

Gradle 개념

Chatgpt 설명

  • Gradle 개념
    1. 빌드 스크립트 (Build Script): 빌드 스크립트는 Gradle의 핵심입니다. 일반적으로 Groovy 또는 Kotlin으로 작성되며 프로젝트의 빌드 구성, 작업 및 종속성을 정의하는 데 사용됩니다. 빌드 스크립트는 빌드해야 하는 항목과 빌드 방법을 지정하는 역할을 합니다.
    2. 작업 (Tasks): 작업은 Gradle이 수행하는 작업 단위입니다. 작업은 소스 코드 컴파일, 테스트 실행, 문서 생성 또는 JAR 파일 생성과 같은 개별 작업을 나타냅니다. Gradle은 다양한 기본 제공 작업을 제공하며 프로젝트의 특정 요구에 맞게 사용자 지정 작업을 정의할 수도 있습니다.
    3. 프로젝트: 프로젝트는 구축 중인 소프트웨어 프로젝트를 나타냅니다. 작업, 종속성 및 기타 프로젝트 관련 구성에 대한 컨테이너 역할을 합니다. 프로젝트 개체는 프로젝트별 설정을 정의하기 위해 빌드 스크립트에서 액세스할 수 있는 다양한 속성과 메서드를 제공합니다.
    4. 플러그인: 플러그인은 Gradle의 기능을 확장하고 특정 프로젝트 유형 또는 프레임워크에 대한 사전 정의된 빌드 논리 및 규칙을 제공합니다. Gradle에는 빌드 프로세스를 향상하고 다양한 기술과 통합하는 데 적용할 수 있는 방대한 플러그인 생태계가 있습니다. 플러그인은 추가 작업, 종속성 및 구성을 정의할 수 있습니다.
    5. 종속성: Gradle은 프로젝트에 필요한 외부 라이브러리 또는 모듈인 프로젝트 종속성을 관리합니다. 종속성 표기법을 사용하여 빌드 스크립트에서 종속성을 선언할 수 있습니다. Gradle은 Maven Central 또는 JCenter와 같은 리포지토리에서 종속성을 자동으로 해결하고 다운로드할 수 있습니다.
    6. 빌드 수명 주기: 빌드 수명 주기는 빌드 중에 실행되는 작업의 순서를 정의합니다. Gradle은 초기화, 구성 및 실행과 같은 다양한 단계를 정의합니다. 구성 단계에서 Gradle은 빌드 스크립트 및 프로젝트 설정에 따라 실행할 작업을 결정합니다. 실행 단계에서 작업은 지정된 순서대로 실행됩니다.
    7. 빌드 유형: Gradle은 개발, 테스트 및 프로덕션과 같은 다양한 빌드 유형을 지원합니다. 빌드 유형을 사용하면 각 빌드 환경에 특정한 다양한 구성, 종속성 및 설정을 정의할 수 있습니다. Gradle을 사용하면 다양한 요구 사항에 따라 빌드의 변형을 쉽게 만들 수 있습니다.
    8. 다중 프로젝트 빌드: Gradle은 단일 빌드의 일부로 여러 프로젝트 빌드를 지원합니다. 이는 대규모 프로젝트나 복잡한 상호 종속성이 있는 프로젝트에 유용합니다. Gradle을 사용하면 프로젝트 계층을 정의하고 프로젝트 간의 관계 및 종속성을 지정할 수 있습니다.
    9. Gradle Wrapper: Gradle Wrapper는 전역적으로 설치된 Gradle 배포 없이도 Gradle 빌드를 실행할 수 있도록 프로젝트와 함께 번들로 제공되는 스크립트입니다. 프로젝트에서 작업하는 모든 사람이 동일한 버전의 Gradle을 사용하도록 하여 빌드를 재현 가능하게 만들고 버전 충돌을 방지합니다.

Blog

  • Gradle은 앞서 살펴본 Ant와 Maven이 가진 장점을 모아 만들었다. 의존성 관리를 위한 다양한 방법을 제공하고 빌드 스크립트를 XML 언어가 아닌 JVM에서 동작하는 스크립트 언어 ‘그루비’ 기반의 DSL(Domain Specific Language)를 사용한다.
  • 그루비(Groovy)는 자바 문법과 유사하여 자바 개발자가 쉽게 익힐 수 있는 장점이 있으며 Gradle Wrapper를 이용하면 Gradle이 설치되지 않은 시스템에서도 프로젝트를 빌드할 수 있다. 심지어 메이븐(Maven)의 pom.xml을 Gradle 용으로 변환할 수도 있으며 Maven의 중앙 저장소도 지원하기 때문에 라이브러리를 모두 그대로 가져다 사용할 수 있다.

Gradle 설치

MacOS 기준으로 간단하게 brew를 이용하면 간편하다. 주의할 것은 설치된 JDK 또는 JRE 버전이 8 이상이어야 한다.

$ brew install gradle

build.gradle

설치가 완료되면 빌드 파일인 build.gradle 파일을 생성해보자. build.gradle 파일은 빌드 스크립트라고 하며 엄밀히 말하면 빌드 구성 스크립트(Build Configuration Script)라고 한다.

의존성이나 플러그인 설정 등과 같은 빌드에 필요한 설정을 하게 된다.

 

task 작성

그럼 지금부터 Gradle의 실행 작업 단위인 태스크(task)를 사용해보자. Gradle은 기본적으로 태스크를 구성하여 실행하며, 태스크를 구성하고 작성하는 것이 빌드 스크립트를 작성하는 과정이다.

task는 아래와 같은 구조를 작성하면 된다.

task 태스크이름 {
    ... 작업들
}

문자열을 출력하는 간단한 태스크를 작성해보자. build.gradle 파일에 아래와 같이 작성해주면 된다.

task sayHello {
    println 'Hello Taeng'
}

task 실행

실행은 터미널에서 gradle 태스크이름으로 형태로 입력하면 된다. gradle 명령어를 사용하면 현재 위치한 경로에서 build.gradle 파일을 찾는다. 실행할 때 -q(quiet) 옵션을 주면 오류에 대한 로그만 출력한다.

$ gradle sayHello

gradle sayHello

> Configure project :
Hello Taeng

BUILD SUCCESSFUL in 609ms


# -q 옵션을 준 경우
$ gradle -q sayHello
Hello Taeng

더 자세한 task 활용법

doFirst, doLast

태스크 내부에서 순서를 지정하고 싶을 때 사용한다. doFirst는 가장 처음 수행하는 액션이고 doLast는 가장 마지막에 수행하는 액션이다. 태스크는 구성된 액션을 순서대로 실행한다.

task greeting {
    doFirst {
        println 'hello'
    }

    doLast {
        println 'bye'
    }
}

실행결과

$ gradle greeting

> Task :greeting
hello
bye
BUILD SUCCESSFUL in 598ms
1 actionable task: 1 executed

Gradle 하는 일

  • Compile
  • Test
  • Packaging
  • Deploy & Run

 

  • Compile : Kotlin, Java 파일을 바이트 코드로 변환해주는 작업
  • Test : 어플리케이션이 제대로 동작할지에 대한 Test(유닛 테스트, UI 테스트 등) 지원
  • Packaging : 코드를 패키징해 jar 파일이나, war 파일로 만들어주는 것을 뜻한다.
  • Deploy & Run : 만들어진 스프링을 돌려 서버를 실행해주는 것을 뜻한다.

build.gradle 파일에 빌드 정보를 정의하여 프로젝트에서 사용하는 환경 설정, 빌드 방법, 라이브러리 정보 등을 기술함으로써 목적에 맞게 사용할 수 있다.

 

 

plugin 설정

plugin은 미리 구성해 놓은 task들의 그룹이며, 특정 빌드 과정에서 필요한 기본정보를 포함하고, 필요에 따라 정보를 수정하여 목적에 맞게 사용할 수 있다.

 

의존관계 설정

Gradle은 java의 의존성 관리를 위해 다양한 ‘구성’을 제공하고 있다.

  • implementation : 프로젝트 컴파일 과정에서 필요한 라이브러리
  • providedCompile : compile시에는 필요하지만, 배포시에는 제외될 dependency를 설정 (web plugin이 설정된 경우에만 사용 가능하다)
  • providedRuntime : runtime시에만 필요하고, 실행환경에서 제공되는 dependency를 설정(web plugin이 설정된 경우에만 사용 가능하다)
  • testImplementation : test시에 필요한 dependency 관리

 

Gradle wrapper란?

  • 사용자가 Gradle을 설치하지 않았어도 Gradle tasks를 실행할 수 있도록 도움
  • 프로젝트 생성자와 사용자가 동일한 버전의 Gradle 사용할 수 있음
  • gradle wrapper 줄여서 gradlew 는 새로운 환경에서 프로젝트를 설정할 때 java나 gradle을 설치하지 않고 바로 빌드할 수 있게 해주는 역할을 한다. (환경에 종속되지 않는다는 이야기다.)

 

gradlew

프로젝트 폴더에서 다음과 같이 gradle wrapper 명령을 실행하면 gradlew 파일이 생성된다.

gradle build를 사용하면 컴퓨터에 설치된 gradle과 java를 기준으로 build 하고, 
./gradlew build를 실행하면 build.gradle 파일에 정의한 내용을 기준으로 build된다.

 

  • gradle 과 gradlew(gradle.bat) 차이
    • Gradle 프로젝트를 빌드하고 실행하기 위해서는, 로컬 컴퓨터에 해당 프로젝트와 동일한 버전이 동일해야 합니다. 만약 이들이 일치하지 않는다면, 당연하게도 오류가 발생합니다.
    • 따라서, 항상 사용하려는 프로그램의 Gradle 버전과 동일하게 Gradle을 설치해주어야 하는데 이는 굉장히 귀찮고 비효율적인 방법입니다.
    • Gradle Wrapper(이하 Wrapper)는 이러한 문제를 해결해줍니다.
    • gradlew는 맥과 리눅스용 스크립트이며, gradle.bat은 윈도우용 스크립트입니다.

Gradle 장점

  • 증분 빌드: Gradle은 증분 빌드를 기본적으로 지원합니다. 즉, 소스 코드의 변경 사항을 기반으로 필요한 작업만 실행합니다. 이 기능은 영향을 받는 부분만 다시 컴파일하고 처리하므로 특히 소스 파일이 많은 대규모 프로젝트에서 빌드 시간을 크게 줄입니다.
  • 성능: Gradle은 Maven보다 성능이 향상된 것으로 알려져 있습니다. 증분 빌드 지원 및 효율적인 작업 실행 모델을 통해 Gradle은 특히 대규모 프로젝트나 복잡한 빌드 구성이 있는 프로젝트에서 더 빠른 빌드 시간을 제공할 수 있습니다.
  • Maven에서 마이그레이션: Gradle은 Maven에서 Gradle로 쉽게 마이그레이션할 수 있는 도구와 플러그인을 제공합니다. Maven의 POM(Project Object Model)을 Gradle의 빌드 스크립트로 변환할 수 있는 자동 빌드 스크립트 변환 기능을 제공하여 전환 프로세스를 보다 원활하게 합니다

 

 

 

참고 블로그 : https://madplay.github.io/post/what-is-gradle