Gradle 이란 무엇이냐

SainTo·2022년 6월 29일
0

공부공부

목록 보기
1/1
post-thumbnail

아무래도 Spring 공부를 위해선 부가적인 공부도 확실히 필요한 것 같다.

Gradle이란?

  • 그루비(Grrovy)를 기반으로 한 Bulid 자동화, 개발 지원에 중점을 둔 Build 도구.
  • Ant와 Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개된 Build 도구

Ant

  • XML 기반으로 Build Script를 작성
  • 자유롭게 빌드단위를 지정 가능
  • 간단하고 사용하기 쉬움
  • 유연하지만 프로젝트가 방대해지는 경우 Sciprt 관리나 Build 과정이 복잡해짐
  • 생명주기를 갖지 않아 각각의 결과물에 대한 의존관계 등을 정의해야 함

Maven

  • XML을 기반으로 작성
  • 생명주기와 프로젝트 객체 모델(POM, Project Object Model)이란 개념이 도입
  • Ant의 Build Script를 개선
  • pom.,xml에 필요한 라이브러리를 선언하면 자동으로 해당 Project로 불러와 편리함
  • 상대적으로 학습 장벽이 높음
  • 라이브러리가 서로 의존하는 경우 복잡해짐

Gradle의 특징

  • Gradle은 Ant와 Maven의 장점을 모아서 만들었다. 의존성 관리를 위한 다양한 방법을 제공하고 Build Script를 XML언어가 아닌, JVM에서 동작하는 Sciprt 언어 DSL(Domain Specific Language)를 사용한다.

  • 그루비(Groovy)는 자바 문법과 유사해 자바 개발자가 쉽게 익힐 수 있는 장점이 있고, Gradle Wrapper를 이용하면 Gradle이 설치되지 않은 시스템에서도 프로젝트를 Build 할 수 있다.

  • Maven과 같은 구조화된 Build Framework (구조의 전환이 가능)

  • Multi Project Build 지원

  • 의존성 관리의 다양한 방법 제공

  • Build를 구성하기 위한 풍부한 도메인 모델 제공

    장점

    • Ant, Maven과 같은 기존의 Build Tool은 XML형식을 이용해 정적인 설정정보를 구성했음
      Gradle은 Groovy라는 언어를 이용해 코드로서 설정정보를 구성하기 때문에 구조적인 장점이 있음.
    • XML의 구조적인 틀을 벗어나 코딩에 의한 간결한 정의가 가능
    • Project를 설정주입방식으로 정의하기 때문에 Maven의 상속 구조보다 재사용에 용이

기본 구조

  • 모든 Gradle Script는 하나 이상의 Project로 구성되며, 모든 Project는 하나 이상의 Task로 구성된다.
    -> Project : 소스를 jar로 모으거나, 자바 Project를 Compile하거나, Test를 실행하고, Application을 배포하는 등의 업무로 구성
    -> Task : 작업의 최소단위, Task 간 의존관계 설정과 함께 흐름에 따른 구성이 가능하며, 동적인 Task의 생성도 가능.
  • Gradle은 자바6버전 이상의 VM환경에서 사용이 가능하며, 설치를 하거나 Gradle Wrapper를 이용하여 실행환경을 구성할 수 있다.

Build 3단계 (Gradle Build LiftCycle)

  1. 초기화(Initialization) : Build 대상 Project를 결정하고 각각에 대한 Project 객체를 생성. settings.gradle 파일에서 Project 구성 (Multi Project, Single Project 구분)
  2. 구성(Configuration) : Build 대상이 되는 모든 Project의 Build Script를 실행 (Project 객체 구성)
  3. 실행(Execution) : 구성 단계에서 생성하고 설정된 Project Task 중에 실행 대상 결정. Gradle 명령행에서 지정한 Task 이름 인자와 현재 디렉토리를 기반으로 Task를 결정하여 선택된 Task들을 실행

Build 설정 파일

  • settings.gradle : Project 구성 설정. (Single Project의 경우 생략 가능)
  • build.gradle : build에 대한 모든 기능 정의

사용 방법

  • build.gradle 파일에 빌드정보를 정의해 프로젝트에서 사용하는 환경 설정, 빌드방법, 라이브러리 정보 등을 기술함으로서 빌드 및 프로젝트의 관리환경을 구성한다.
    • Plugin 설정
      : Plugin은 미리 구성해놓은 task들의 그룹이며, 특정 빌드과정에 필요한 기본정보를 포함하고, 필요에따라 정보를 수정해 목적에 맞게 사용할 수 있다.
      ex)

      plugins {
      	id 'org.springframework.boot' version '2.3.12.RELEASE'
        id 'io.spring.dependency-management' version '1.0.11.RELEASE'
        id 'java'
        id 'war'
      }
      
      // project info
      group = 'com.example'
      // project version
      version = '0.1'
      // JDK version
      sourceCompatibility = '17.0'

      : Java 프로젝트를 위해 정의한 'JAVA Plugin'에서는 comileJava, classes, test, jar 등의 task를 제공한다.
      : Web 프로젝트를 위한 'WAR Plugin'에서는 Application 소스를 war파일로 묶어주는 war task를 제공한다.

    • 저장소 설정
      : Gradle은 Maven repository, JCenter repository, Ivy directory 등 다양한 저상소를 지원한다.
      ex)

      repositories {
      	mavenLocal() // maven local cash repository
        mavenCentral() // maven central repository
        maven { Url "http://repo.company.com/maven" } // maven remote repository
      }
    • 의존관계 설정
      : Gradle은 java의 의존성 관리를 위해 다양한 구성을 제공하고 있다. 7.0 버전으로 들어오면서 몇몇 부분의 명령어가 바뀌었으니 이에 주의

      • implementation : 프로젝트 컴파일 과정에서 필요한 라이브러리
      • providedCompile : compile 시에는 필요하지만, 배포 시에는 제외되는 dependency를 설정(war plugin일 경우만 사용 가능)
      • providedRuntime : runtime 시에만 필요하고, 실행 환경에서 제공되는 dependency를 설정(war plugin일 경우만 사용 가능)
      • testImplementation : test 시에 필요한 dependency 관리/
        ex)
      dependencies {
      	implementation 'org.springframework.boot:spring-boot-starter-web'
        providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
        testImplementation('org.springframework.boot:spring-boot-starter-test) {
        	exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
        }
      }
    • 테스팅
      : Gradle은 테스트 시 특정 테스트만 진행할 수 있으며, 테스트의 결과를 따로 받아볼 수도 있다. 테스트를 detection하고 그룹화 하여 테스트를 진행할 수 있도록 도움을 주고 있다.
      ex)

      test {
      	useJUnitPlatform()
      }

Gradle을 사용해 보면서 좀 더 Gradle에 대해서 알아가 보아야겠다.

사용해보면서 정리할 내용이 있다면, 여기에 추가하거나 새로 포스트를 쓰는 걸루.

참조
Gradle 이란?

profile
발전 하려는 개발자

0개의 댓글