Groovy 기반의 오픈소스 빌드 도구. 거의 모든 타입의 소프트웨어를 빌드할 수 있는 빌드 자동화 시스템이다.
빌드
: 소스 코드를 컴파일, 테스트, 정적 분석 등을 실행하여 실행 가능한 애플리케이션으로 만드는 과정
그러나 다양한 라이브러리의 등장으로
등의 문제를 해결하기 위한 것이 빌드도구이다.
다양해지는 라이브러리를 자동 추가 및 관리
프로젝트를 진행하며 라이브러리의 버전을 쉽게 동기화
빌드 도구들
Ant
XML 기반으로 빌드 스크립트를 작성한다.
자유롭게 빌드 단위를 지정할 수 있다.
간단하고 사용하기 쉽다.
유연하지만 프로젝트가 방대해지는 경우 스크립트 관리나 빌드 과정이 복잡해진다.
생명주기(Lifecycle)을 갖지 않아 각각의 결과물에 대한 의존관계 등을 정의해야 한다.
Maven
XML 기반으로 작성한다.
생명주기(Lifecycle)와 프로젝트 객체 모델(POM, Project Object Model)이란 개념이 도입됐다.
Ant의 장황한 빌드 스크립트를 개선했다.
pom.xml에 필요한 라이브러리를 선언하면 자동으로 해당 프로젝트로 불러와 편리하다.
상대적으로 학습 장벽이 높다.
라이브러리가 서로 의존하는 경우 복잡해질 수 있다.
Gradle은 앞서 살펴본 Ant와 Maven이 가진 장점을 모아 만들었다. 의존성 관리를 위한 다양한 방법을 제공하고 빌드 스크립트를 XML 언어가 아닌 JVM에서 동작하는 스크립트 언어 ‘그루비’ 기반의 DSL(Domain Specific Language)를 사용한다.
그루비는 JVM상에서 실행되는 스크립트 언어로, 자바 문법과 유사하여 자바 개발자가 쉽게 익힐 수 있는 장점이 있으며 Gradle Wrapper를 이용하면 Gradle이 설치되지 않은 시스템에서도 프로젝트를 빌드할 수 있다
심지어 메이븐(Maven)의 pom.xml을 Gradle 용으로 변환할 수도 있으며 Maven의 중앙 저장소도 지원하기 때문에 라이브러리를 모두 그대로 가져다 사용할 수 있다.
그래들 장점 :
프로젝트를 설정 주입방식의로 정의
마븐의 상속 구조보다 재사용에 용이
프로젝트의 조건을 체크할 수 있어서 프로젝트 별로 주입되는 설정을 다르게 할 수 있다.
멀티 프로젝트 빌드
하나의 레포지토리 내에 여러개의 하위 프로젝트를 구성할 수 있다.
(관리자와 사용자의 서버 분리하는 경우, 하나의 모듈을 쓰는 대신 그래들로 중복을 피할 수 있다.)
빌드 속도가 빠름
점진적 빌드 : 그래들은 빌드 실행 중 마지막 빌드 호출 이후에 task의 입력, 출력 혹은 구현이 변경되었는지 확인한다. 최신상태로 간주하지 않는다면 빌드는 실행되지 않는다.
빌드 캐시 : 두개 이상의 빌드가 돌아갈때, 중복이 있다면 하나의 빌드의 결과물을 다른 빌드에서 사용할수있다.
Daemon process :서비스의 요청에 응답하기 위해 오랜 시간 살아있는 프로세스. 그래들의 데몬 프로세스는 메모리 상에 빌드 결과물을 보관한다. 이로 인해 한번 빌드 된 프로젝트는 다음 빌드에서 매우 적은 시간만 소요된다.
참고
https://madplay.github.io/post/what-is-gradle
https://kotlinworld.com/311