공부/Java

Gradle란?

JYJ 2022. 12. 20. 15:49

Gradle(그래들, 그래이들)

Build Tool

Gradle는 일종의 Build Tool(빌드 도구)임, Groovy(그루비)를 이용한 빌드 자동화 시스템임

Ant, Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개된 빌드 자동화 도구

라이브러리를 간편하게 추가, 관리 가능 버전도 효율적으로 동기화해서 개발자가 비즈니스 로직에 집중할 수 있도록 도와줌

빌드 도구 발전 순서 

Ant > Maven > Gradle

 

Gradle

Ant와 Maven이 가진 장점을 함께 가지고 있고, 의존성 관리를 위한 다양한 기능을 제공, 빌드 스크립트를 xml언어가 아닌 JVM에서 동작하는 스크립트 언어 그루비 기반의  DSL(Domain Specific Language)를 사용

그루비(Groovy)는 자바 문법과 유사해서 자바 개발자가 쉽게 익힐 수 있음 - 장점

Gradle Wrapper를 이용하면 Gradle이 설치되지 않은 시스템에서도 프로젝트를 빌드 할 수 있음

추가적으로 메이븐의 pom.xml을 gradle용으로 변환 할 수도 있으며 Maven의 중앙 저장소도 지원하기 때문에 라이브러리를 모두 그대로 가져다 사용할 수 있음.

 

build.gradle

gradle에서 빌드 작업에 필요한 기본 설정, 동작 등을 정의하는 파일. 빌드 스크립트라고 부름, 정확하게는 빌드 구성 스크립트(Build configuration script)라고 함

-plugins

프로젝트를 빌드하기 위해 여러가지 작업을 처리해 줘야함, 컴파일이나 jar파일의 생성같은 작업들임                                        이런 작업들을 해주는 플러그인들이 존재함, plugins 블록 안에 필요한 플러그인을 지정해주고 이런 플로그인들을 필요한 과정들을 task로 포함하고 있음, 필드시에는 필요한 모든 과정을 플러그인의 내부 task가 진행해 줌

repositories

repositories는 저장소 정보를 관리하는 프로퍼티, 소프트웨어를 등록하여 관리하는 장소를 가리킴                                          로컬 환경이나 네트워크에 라이브러리를 공개하고 그 주소를 저장소로 등록하면 저장소에 있는 라이브러리를 그레이들이 취득하여 이용할 수 있음. 저장소는 각종 라이브러리 등이 등록된 일종이 소프트웨어 보관장소라고 할수 있음, 저장소에는 각종 프로그램이 등록되어 있어 그레이들은 저장소로부터 필요에 따라 프로그램을 다운로드하여 이용할 수 있음, 또 다른 빌드 도구중 하나인 메이븐은 메이븐 중앙 저장소를 제공하여 그레이들에서도 이 메이븐 중앙 저장소에 접속해서 필요한 프로그램을 다운로드 할 수 있음                                                                                                                                                                                      만약 중앙 저장소에 공개되지 않았거나 공개하기 힘든 라이브러리가 있을 수도 있음, 예를 들어 사내에서만 사용하는 라이브러리라면 중앙 저장소에 공개하기는 힘듬, 이런 경우 로컬 저장소를 이용하면 됨

dependencies

의존성에 관한 설정을 관리하는 프로퍼티임. 여기에 필요한 라이브러리 등의 정보를 기술하면 그 라이브러리를 참조할 수 있음, implementation , testlmplementation 이라고 기술되어 있음, 컴파일 할 때는 implementation에 지정한 라이브러리에 그리고 테스트를 컴파일 할 때는 testlmplementation 에 지정한 라이브러리에 각각 접근할 수 있다는 의미                                     이외 compileOnly는 컴파일시에만, runtimeOnly는 런타임시에만 사용한다는 의미

implementation - 의존 라이브러리 수정시 본 모듈까지만 재빌드함

api - 의존 라이브러리 수정시 본 모듈을 의존하는 모듈들을 전부 재빌드함

compileOnly - compile 시에만 빌드하고 빌드 결과물에는 포함하지 않음

testlmplementation - 테스트 코드를 수행할 때만 적용

annotationProcessor - annotation processor 명시 

ext

ext블록 사용된 경우,  이 블록은 gradle의 모든 task에서 사용할 수 있는 일조의 전역 변수를 선언하는 블록

buildscript

buildscript 블록을 사용할 때, 빌드하는 동안 필요한 처리를 모아놓는 곳, 이 안에 dependnecies, repositories가 포함 가능

settings.gradle

멀티모튤 사용할 때 설정하는 곳, 멀티 모듈인 경우 새로운 블록 등장, allprojects는 전체프로젝트에, subpojects는 하위 프로젝트에, 프로젝트 이름을 사용한  project는 해당하는 프로젝트에만 동작하는 설정

task

gradle의 실행 작업 단위가 태스크(task)임, 사용자가 임의로 task를 작성해서 사용할 수 있음, task는 다양한 기능을 수행할 수 있고 다양한 문법을 가지고 있지만 신입 개발자가 실무에서 작성하는 경우는 극히 제한적임, 커맨들 라인에서 task[task 이름]으로 사용할 수 있음.

 

Ant 

-XML 기반으로 빌드 스크립트 작성, 자유롭게 빌드 단위 지정 가능, 쉽고 간단, 프로젝트가 커지면 스크립트 관리나 빌드 과정 복잡, 생명주기(Lifecycle)을 갖지 않아서 각각의Target에 대한 의존 관계를 명시해야함

 

Maven

-XML 기반으로 작성, 생명주기(Lifecycle)와 프로젝트 객체 모델(POM, Project Object Model)이란 개념이 도입됨, Ant의 장황한 빌드 스크립트를 개선함, pom.xml에 필요한 라이브러리를 선언하면 자동으로 해당 프로젝트로 불러옴, 학습 장벽이 높고, 라이브러리가 서로 의존하는 경우 복잡해질 수 있음.

 

Gradle이 Maven보다 좋은 점

maven의 경우 build를 xml로 정의하기에는 어려움 부분이 많음(설정이 길어지고 가독성이 떨어짐, 의존 관계가 복잡할 경우 풀어내기가 어려움)

Gradle에서는 그루비 기반의 DSL 사용(의존 관계가 복잡하더라도 가독성 좋게 풀어낼 수 있음, 동적인 Build를 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 됨(JAVA와 문법이 유사함)                                                                      Gradle 설치 없이 Gradle Wrapper를 이용해서 빌드 지원, 상속 구조를 활용해서 멀티 모듈을 구현할 수 있음, 빌드 속도가 Maven보다 10~100배 빠르다고 함, 기존의 빌드 스크립트를(ant, maven)을 간단하게 변환할 수 있음

 

 

'공부 > Java' 카테고리의 다른 글

빌드  (0) 2022.12.20
Dependency  (1) 2022.12.20