Gradle놀이(1) - 개요

정윤성·2022년 6월 30일

Gradle놀이

목록 보기
1/4

배경

내가 프로그래밍을 처음 시작 했을 때는 보통 IDE들을 통해 컴파일을 했다 그리고 필요로하면 jar파일같은걸 추출해서 직접 shell script를 통해 실행하곤 했다
즉 이렇게 하나의 프로젝트를 바이트코드로 변환하고 배포하고 실행하는 작업을 우리는 빌드 라고한다

Gradle은 이런 빌드자동화 툴로서 컴파일, 테스트, 배포, 의존성 관리 등과 같은 필수적인 요소들을 쉽게 구조화하여 다룰 수 있게 도와준다

Gradle

Gradle은 크게 3가지로 나눌 수 있다

  1. 생명주기
  2. 확장성
  3. 캐시 및 점진적 빌드

이 외에 JVM기반 구조라던가, 여러 IDE에서 지원한다는 점이 있다

1.생명주기

Gradle에서의 생명주기는 Maven보다는 느슨한 관계이다 Maven은 생명주기가 하나의 빌드이며 선형적 구조이기에 이를 확장하거나 재구성하기는 어렵지만 Gradle의 빌드작업은 비선형 구조에 각 작업을 Task에게 위임하여 처리되기 때문에 유연한 빌드가 가능해져 보다 느슨한관계를 유지한다

빌드단계

빌드는 크게 3단계로 나뉜다

  1. 초기화
    빌드에 참여할 프로젝트 들을 찾아내고 org.gradle.api.Project인스턴스를 생성한다 이때 settings.gradle을 통해 프로젝트가 단일인지 다중인지도 판단하게 된다
  2. 구성
    Plugin, Task와 같은 작업들이 그래프로 구성되고 AllProject의 빌드스크립트가 실행되는 단계이다
  3. 실행
    모든 하위 프로젝트들이 위의 Task그래프를 순차적으로 실행하는 단계이다

설정파일

setting.gradle은 여러 모듈들을 조율하는 설정파일이다

하위 프로젝트에서는 상위 프로젝트에 setting.gradle을 참조한다
만약 존재하지 않는다면 계속 상위 프로젝트를 참조한다 이 작업을 통해 단일 구성인지도 확인할 수 있다

자바

자바 Compile과정은 기본으로 등록되어있는 build task에 위와같은 구조로 등록되어 있다

실제 log에서도 위와같은 순서로 출력되고있는걸 볼 수 있다

2.확장성

Task

Gradle은 다음과같이 Task들의 실행순서를 정할 수 있다 그러나 이는 비선형구조로 되어있다

Task는 크게 Task, Input, Output으로 나뉜다
Input을 받아들여 Action을 한뒤 Output을 내보낸다는 의미이다

Plugin

Task들을 사전에 정의해둔 곳으로 사용자는 따로 Task를 추가하지 않아도 사용할 수 있다

사용자 정의

build script에 직접적으로 Task를 추가할 수 도 있으나 Gradle 공식 홈페이지에서는 Gradle의 역할을 완전히 분리 및 구조화 시키는 buildSrc디렉토리에 생성하는걸 추천한다

3.캐시

점진적 빌드

한마디로 요약하면 Git이다. 즉 최신화된 내용만 반영하는 빌드방식이다

소스파일이 변경된점이 없을경우 컴파일단계는 건너뛰며 소스파일이 수정될 경우 해당부분만 재빌드하여 빌드내용을 최신화한다

정리

  1. 빌드의 생명주기를 알고 있으면 최적화를 함에있어 중요한 포인트가 어디인지 알 수 있다
  2. DDL과같은 내용들을 Task를 통해 마이그레이션할 수 있다 ( flyway )
  3. 증분빌드와 캐시를 통해 빌드의 속도가 엄청 빨라졌다 ( Maven과 비교해서 체감이 됨 )

0개의 댓글