티스토리 뷰

build/gradle

Gradle (그레이들)이란

055055 2022. 9. 2. 22:00
반응형

Gradle

Overview
Gradle is an open-source build automation tool that is designed to be flexible enough to build almost any type of software. The following is a high-level overview of some of its most important features:
High performance, JVM foundation, Conventions, Extensibility, IDE support... etc

그레이들은 빌드 자동화 툴로 주목받는 오픈 소스 제품이다. 

 

  • 간단하게 빌드 스크립트 작성
  • 기존 자원을 최대한 활용하며 단계적으로 그레이들 이전 가능
    • 앤트, 메이븐 같은 기존 툴의 기능과 시스템 활용 가능(앤트 테스크, 앤트 빌드 스크립트, 메이븐 저장소)

 

빌드툴이란?

소프트웨어 개발에서 대부분의 작업은 정형화되어 있다. 자바 애플리케이션 개발을 예로 들면 다음과 같은 일련의 작업이 필요하다.

 

  • 소스코드(.java)를 컴파일해서 클래스 파일(.class)을 생성
  • 코딩 규약에 맞게 작성했는지 확인
  • 코드를 정적으로 해석
  • 테스트를 하고 테스트 결과나 커버리지 측정 결과를 리포트로 출력
  • javadoc과 같은 문서 작성
  • 클래스 파일과 리소스 파일을 패키징해서 압축 파일 생성(.jar or .war)
  • 압축 파일을 테스트 환경이나 스테이징 환경에 배포
  • 압축 파일을 저장소에 등록

 

빌드 툴이란 이런 정형화된 작업을 자동화하기 위한 소프트웨어로 빌드 툴을 사용하지 않으면 아래와 같은 문제를 겪을 수 있다.

 

  • 수작업: 컴파일 > 테스트 > 패키징 > 배포를 수작업으로 진행하여 실수 및 시간과 수고가 많이 든다.
  • 변경 사항이 반영되지 않은 메뉴얼
  • 환경 의존(local/dev/prod)
  • 무한 라이브러리 지옥 - 라이브러리 의존 관계

 

Gradle 개요

그레이들 웹사이트에서는 그레이들을 Build Automation Evolved 즉 진화된 빌드 자동화라고 소개한다.

 

  • 그레이들은 빌드 자동화 뿐만 아니라 테스트 실행, 결과물 공개, 각종 소프트웨어 개발 태스크 자동화, 정적 웹 사이트 생성, 문서 생성과 같은 소프트웨어 개발 이외의 프로젝트 자동화에도 적용할 수 있다.
  • 그레이들은 앤트의 유연성, 메이븐의 의존관계 관리와 규칙 기반 등 기존 빌드 툴의 장점을 가져왔으며, 그루비 DSL을 도입해서 효율적인 빌드를 실현했다.

 

주요 특징

  • 확장 가능한 그레이들 빌드 언어(DSL) 제공
  • 빌드 분할이나 공통 컴포넌트 추출 등을 체계화 하기 쉬움
  • IDE와 연계해서 그레이들을 외부에서 제어할 수 있는 API 제공
  • 변경 내역 필드나 병렬 빌드와 같은 빌드 효율화
  • 멀티 프로젝트를 지원하는 유연성
  • 메이븐/아이비 저장소부터 로컬 파일 시스템까지 다양한 의존관계 관리 기법 대응
  • 앤트 태스크 뿐만 아니라 앤트 프로젝트 전체와 통합 가능
  • 빌드 스크립트 작성 언어로 그루비 이용
  • 그레이들 래퍼(wrapper)를 이용해서 그레이들이 설치되지 않은 환경에서도 빌드 가능
  • 호환성 배려

Gradle만의 장점 (왜 Gradle이어야만 하는지)

 

1. 빌드 스크립트 생산성이 높다.

  • 규칙 기반 필드 접근법 (규칙에 따라 프로젝트 구조를 만들면 빌드 스크립트 내용을 크게 줄일 수 있다.)
  • JVM 언어인 그루비 사용
  • 자체 DSL 제공
  • 크로스 플랫폼 대응 (특정 플랫폼에 종속적이지 않다.)

2. 빌드 순서를 제어하기 쉽다.

빌드 순서는 태스크(빌드 순서의 각 단계) 의존 관계에 따라 정해진다.

https://docs.gradle.org/current/userguide/what_is_gradle.html

  • 메이븐처럼 빌드 순서가 정해져 있지 않다.
  • 플러그인을 사용하여 태스크 의존관계의 기본 구성을 할 수 있다. (빌드 스크립트의 복잡성 해결)빌드 순서를 제어하기 쉽다.

3. 멀티 프로젝트에 대응한다. 

프로젝트 규모가 어느정도 커지면 한 프로젝트를 서브 프로젝트로 나눈다. 이때 서브 프로젝트로 구성된 전체 프로젝트의 빌드를 지원한다.

https://docs.gradle.org/current/userguide/intro_multi_project_builds.html

  • 멀티 프로젝트에 있는 서브 프로젝트를 정의하는 기능
  • 서브 프로젝트에 공통 빌드 스크립트를 집약하는 기능
  • 서브 프로젝트 간 의존관계를 정의하는 기능
  • 의존관계를 고려해서 변경 내역만 빌드하는 기능

4. 컴포넌트로 만들기 쉽다. 

플러그인을 개발하려면 어느 정도 지식과 노력이 필요하지만, 빌드 스크립트의 공통 처리를 추출해서 메서드나 클래스로 만드는 정도라면 그렇게 어렵지 않다. 그레이들의 장점은 이렇게 컴포넌트화 수준을 단계적으로 향상할 수 있다는 것이다.

  • 공통 기능을 컴포넌트로 만들어서 재사용하는데 비용이 적다 
    • 빌드 스크립트에서 메서드나 클래스 추출
    • 빌드 스크립트의 분할과 재사용(apply from이용)
    • 프로젝트에서만 사용할 수 있는 확장 모듈(buildSrc 프로젝트)
    • 여러 프로젝트에서 범용적으로 재사용할 수 있는 라이브러리

5. 별도로 설치할 필요가 없다.

  • 앤트나 메이븐 사용시 사용자 환경에 설치해야 하는 불편함으로 관리가 되지 않는 점이있다. 그레이들은 그레이들 래퍼(wrapper)라는 구조를 제공한다. 그레이들 래퍼는 프로젝트 안에 그레이들의 부트스트랩(bootstrap)을 심어서 지정한 버전의 그레이들을 자동으로 설치해주는 기능이다.
  • 그레이들 래퍼 태스크를 실행해서 부트스트랩을 생성하기만 하면된다. gradlew 명령을 실행하면 그레이들의 바이너리가 다운되며 빌드가 실행한다. 이를 통해 젠킨스 같은 CI 서버에서 빌드할 때 편리하게 사용할 수 있다.

6. 호환성을 최대한 배려 한다.(그레이들 방침) 

  • 기존 기능을 갑자기 사용할 수 없게 되는 변경은 하지 않는다.
  • 기능을 제거해야 한다면 장래에 폐지될 가능성이 있음을 명시하고 단계적 제거
  • 신기능은 피드백을 충분히 받아서 안정화한 후에 추가

 

 

출처

Gradle 철저 입문

그레이들 공식 사이트

 

반응형

'build > gradle' 카테고리의 다른 글

Gradle Wrapper  (0) 2022.09.03
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함