본문 바로가기
Backend

Gradle에 대해서

by 가보자잇 2022. 2. 28.

이전 글에서는 Java 프로젝트에 Gradle을 적용해 보았고 설정 파일 등에 대해 간략하게 설명해뒀다. 

Gradle은 빌드 툴인 것만 어렴풋이 알고 정확한 개념은 알지 못했다. 회사 생활할 때는 Maven만 사용했고, Maven에 만 더 익숙했다. Gradle은 안드로이드 앱 빌드 할 때 사용했던 것으로 기억한다. Gradle에 대해 좀 더 깊게 알아보자.

 

Gradle

Gradle 그루비를 이용한 빌드 자동화 시스템이다. Groovy와 유사한 도메인 언어를 채용하였으며, 현재 안드로이드 앱을 만드는데 필요한 안드로이드 스튜디오의 공식 빌드 시스템이기도 하다. Java, C/C++, 파이썬 등과 같은 여러 가지 언어를 지원한다. (https://ko.wikipedia.org/wiki/Gradle)

 

위키피디아에 나와있는 Gradle에 대한 설명이다. 낯선 용어는 그루비, 빌드 자동화 시스템이나 이 키워드에 대해 알아보자. 그리고 Gradle은 안드로이드 스튜디오 빌드 시스템이라 익숙했던 것 같다.

 

그루비(Groovy)

그루비(Groovy)는 자바 파이썬, 루비, 스몰토크등의 특징을 더한 동적 객체 지향 프로그래밍 언어이다. (https://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_%EA%B7%B8%EB%A3%A8%EB%B9%84)

추가적으로 JVM에서 실행되는 스크립트 언어고 문법이 JAVA와 유사하며, JAVA와 호환이 가능해서 자바 클래스 파일을 그대로 Groovy 클래스로 사용할 수 있다고 한다.

 

빌드 자동화

빌드 자동화(build automation 또는 makemake)의 본질적 목적은 소프트웨어 개발자가 반복해서 하는 코딩을 잘 짜여진 프로세스를 통해 자동으로 실행하여, 믿을 수 있는 결과물도 생산해 낼 수 있는 일련의 작업방식 및 방법을 말한다.

(https://ko.wikipedia.org/wiki/%EB%B9%8C%EB%93%9C_%EC%9E%90%EB%8F%99%ED%99%94)

 

그리고 결국 Gradle은 빌드 관리 툴인데 빌드 관리 툴이란

1) 프로젝트에서 필요한 xml, properties, jar 파일등을 자동으로 인식하여 빌드해주는 도구이고
2) 소스 코드를 컴파일, 테스트, 정적분석 등을 하여 실행 가능한 앱으로 빌드해줌
3) 프로젝트 정보 관리, 테스트 빌드, 배포 등의 작업을 진행해줌
4) 외부 라이브러리를 참조하여 자동으로 다운로드 및 업데이트의 관리를 해주며
5) 대표적인 툴로는 Ant, Maven, Gradle

 

Gradle 특징

  • Ant처럼 매우 유연한 범용 빌드 도구.
  • Maven과 같은 구조화 된 build프레임워크 (구조의 전환이 가능).
  • Maven, Ivy등의 기존 저장소 인프라 또는 pom.xml 파일과 ivy.xml 파일에 대한 migration의 편이성 제공
  • 멀티 프로젝트 빌드 지원. (여러개의 하위 프로젝트 구성 가능)
  • 의존성 관리의 다양한 방법 제공
  • Build script를 xml이 아닌 Groovy 기반의 DSL(Domain Specific Language)을 사용
  • 기존 Build를 구성하기 위한 풍부한 도메인 모델 제공.
  • Gradle 설치 없이 Gradle Wrapper를 이용하여 빌드 지원

Gradle 장점

Ant, Maven과 같은 기존의 빌드툴은 xml형식을 이용하여 정적인 설정정보를 구성했다.
Gradle은 Groovy라는 언어를 이용하여 코드로서 설정정보를 구성하기 때문에 구조적인 장점이 있다.

  • xml의 구조적인 틀을 벗어나 코딩에 의한 간결한 정의가 가능하다.
  • 프로젝트를 설정주입방식으로 정의하기 때문에 maven의 상속 구조보다 재사용에 용이하다.

기본구조

  • 모든 Gradle script는 하나 이상의 project로 구성되며, 모든 프로젝트는 하나이상의 task로 구성된다.
    • Project : 소스를 jar로 모으거나, 자바 프로젝트를 컴파일하거나, 테스트를 실행하고, 어플리케이션을 배포하는 등의 업무로 구성된다.
    • Task : 작업의 최소단위이다.
      Task간 의존관계 설정과 함께 흐름에 따른 구성이 가능하며, 동적인 테스크의 생성도 가능하다. 
  • Gradle은 자바6버전 이상의 VM환경에서 사용이 가능하며, 설치를 하거나 gradle wrapper를 이용하여 실행환경을 구성할 수 있다.

Build Lifecycle

Build 3단계

  1. 초기화(Initialization) : 빌드 대상 프로젝트를 결정하고 각각에 대한 Project 객체를 생성.
    settings.gradle 파일에서 프로젝트 구성 (멀티프로젝트, 싱글프로젝트 구분)
  2. 구성(Configuration) : 빌드 대상이 되는 모든 프로젝트의 빌드 스크립트를 실행. (프로젝트 객체 구성)
    configured Task 실행
  3. 실행(Execution) : 구성 단계에서 생성하고 설정된 프로젝트의 태스크 중에 실행 대상 결정.
    gradle 명령행에서 지정한 태스크 이름 인자와 현재 디렉토리를 기반으로 태스크를 결정하여 선택된 Task들을 실행

주요 파일들

Gradle Wrapper란?

이미 존재하는 프로젝트를 새로운 환경에 설치할 때 별도의 설치나 설정과정 없이 곧 바로 빌드할 수 있게 하기 위해 사용한다.

 

gradlew/gradlw.bat : 각각 유닉스, 윈도우용 실행 스크립트

gradle-wrapper.jar : Wrapper 파일이며, gradlew나 gradlew.bat 파일이 프로젝트 내에 설치하는 이 파일을 사용하여 gradle task를 실행하기 때문에 로컬 환경의 영향을 받지 않는다.

gradle-wrapper.properties : Gradle Wrapper 설정 팡리이다. 이 파일의 wrapper 버전 등을 변경하면 task 실행시, 자동으로 새로운 Wrapper 파일을 로컬 캐시에 다운로드 받는다.

build.gradle ; 의존성이나 플러그인 설정 등을 위한 스크립트 파일.

settings.gradle : 프로젝트의 구성 정보를 기록하는 파일, 어떤 하위 프로젝트들이 어떤 관계로 구성되어 있는지를 기술.

 

어떻게 보니 여러 블로그를 정리한 글이 되었는데 gradle의 특징 및 설정에 대해 잘 이해하도록 할 수 있도록 해야겠고, 해당 내용들의 이해를 바탕으로 gradle을 다시 적용해 보면 도움이 많이 될 거 같다고 생각한다.

 

참고

https://www.egovframe.go.kr/wiki/doku.php?do=show&id=egovframework%3Adev3.6%3Adep%3Abuild_tool%3Agradle 

https://medium.com/@goinhacker/%EC%9A%B4%EC%98%81-%EC%9E%90%EB%8F%99%ED%99%94-1-%EB%B9%8C%EB%93%9C-%EC%9E%90%EB%8F%99%ED%99%94-by-gradle-7630c0993d09

'Backend' 카테고리의 다른 글

Spring Boot 적용  (0) 2022.03.29
JUnit  (0) 2022.03.22
자바 프로젝트에 Gradle 빌드 툴 적용  (0) 2022.02.28
자바 로깅(Java Logging)  (0) 2022.02.21
스프링 입문 - 스프링 빈과 의존관계  (0) 2021.08.24