Maven 과 Gradle

5tr1ker·2023년 3월 19일
0
post-thumbnail

빌드 관리 도구란?

우리가 프로젝트에서 작성한 java 코드와 프로젝트 내에 필요한 각종 xml , properties, jar 파일들을 JVM 이나 WAS 가 인식할 수 있게 패키징 해주는 빌드 과정으로 이를 빌드 자동화 도구라고도 할 수 있습니다.
프로젝트 생성 , 테스트 빌드 , 배포 등의 작업을 위한 전용 프로그램이라 할 수 있는데 , 애플리케이션을 개발하면서 일반적으로 개발에 필요한 다양한 외부 라이브러리들을 다운로드하고 사용해야 하는데 이 때 빌드도구 설정파일에 필요한 라이브러리의 종류와 버전 , 종속성 정보를 명시하면 필요한 라이브러리들을 설정파일을 통해 자동으로 다운로드해주고 관리해주는 도구입니다.

Maven

Maven은 Java용 프로젝트 관리도구로 Apache의 Ant 대안으로 만들어졌습니다. 빌드 중인 프로젝트, 빌드 순서, 다양한 외부 라이브러리 종속성 관계를 pom.xml 파일에 명시하면 Maven은 외부 저장소에서 필요한 라이브러리와 플러그인들을 다운로드 하고, 로컬시스템의 캐시에 모두 저장하여 프로젝트를 진행하면서 수많은 라이브러리들을 관리해줍니다.

가장 큰 특징은 라이브러리들과 연관된 라이브러리들을 연결하여 관리하며 네트워크를 통해 해당 라이브러리와 연관된 다른 라이브러리를 함께 업데이트를 해줍니다. Maven은 프로젝트의 전체적인 라이프 사이클을 관리해주며, 많은 편리함과 이점이 있어 널리 사용되고 있습니다.

Maven은 컴파일과 빌드를 동시에 수행할 수 있으며, pom.xml 파일을 통해 관리하므로 개발 , 유지보수 측면에서 관리가 용이합니다. 하지만 불필요한 설정이 길어지고 중복이 많아지며 이는 가독성 저하가 발생하여 유지 보수성이 떨어지는 단점이 존재하는데 이를 위해 Gradle이 등장합니다.

MavenRepository 사이트에서 원하는 모듈을 검색하며 xml 파일에 추가하여 사용할 수 있습니다.

Gradle

Apache Maven과 Apache Ant에서 볼 수 있는 개념들을 사용하는 대안으로 나온 프로젝트 빌드 관리 툴인 오픈소스입니다. 설정 주입 방식 ( Configuration Injection ) 을 사용하며 Groovy 언어를 사용한 DSL ( Domain specific language ) 를 사용하는데 이는 xml 파일을 사용하는 Maven보다 코드가 훨씬 간결합니다. 또한 꽤 큰 규모로 예상되는 multi-project 빌드를 도울 수 있도록 디자인 되었습니다.
Gradle은 프로젝트에 어떤 부분이 업데이트가 이미 반영된 빌드의 부분을 재실행하지 않아 빌드 시간을 단축시킵니다.

Gradle은 빌드 , 프로젝트 구성 및 관리, 테스트 , 배포 도구로 사용되며 빌드 속도가 Maven보다 10배에서 100배 가량 빠릅니다. 또한 Java 뿐만 아니라 C , C++ , Python 등을 지원하죠. 빌드툴인 Ant Builder와 Groovy 스크립트 기반으로 만들어져 기본 Ant 역할과 배포 스크립트 기능을 모두 사용할 수 있습니다.

Gradle은 2007년에 처음 개발되었고, 2013년 구글에 의해 안드로이드 프로젝트의 빌드 시스템으로 채택되었습니다.

Groovy

Groovy는 JVM에서 실행되는 스크립트 언어로 JVM에서 동작하지만 Java와 달리 컴파일 할 필요가 없으며 소스 코드를 그대로 실행합니다. 또한 Java와 호환되기에 Java와 문법이 유사하며 Java 클래스 파일을 그대로 Groovy 클래스 파일로 사용할 수 있습니다.

Maven vs Gradle

  • 빌드 시간
    두 시스템이 빌드에 접근하는 방식에는 몇가지 근본적인 차이점이 있는데 Gradle은 작업 의존성 그래프를 기반으로 하며 , Maven은 고정적이고 선형적인 단계의 모델을 기반으로 합니다.
    성능 측면에서 둘 다 다중 모듈 빌드를 병렬로 실행할 수 있지만, Gradle은 어떤 task가 업데이트되었는지 체크하기 때문에 incremental build를 허용합니다. 이는 이미 업데이트된 task에 대해서 작업을 다시 실행하지 않으므로 빌드 시간이 훨씬 단축됩니다.

이는 빌드 설정 규모가 점점 커지면 빌드시간 차이도 Maven과 격차가 많이 벌어질 수 있습니다.

  • 가독성
    그리고 xml은 구조적인 장점이 있지만 규모가 커지면 빌드 스크립트도 길어져 가독성이 떨어지는데 Gradle은 적은 양으로 스크립트를 작성할 수 있어 간결한 정의가 가능합니다.

또한 사용자 정의된 빌드를 작성하기 위해서 커스터마이징이 간편한 Gradle을 사용하는게 낫습니다. ( 코드의 간결성과 가독성은 Gradle이 좋습니다. )

  • 설정 주입 방식 ( Configuration Injection )
    Maven의 경우 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속을 받아야 하지만 Gradle 은 설정 주입 방식( Configuration Injection )을 제공하므로 멀티 프로젝트에 적합하며 재사용에 용이합니다.

  • Cache
    그리고 Gradle은 concurrent에 안전한 캐시를 허용합니다. 이는 2개 이상의 프로젝트에서 동일한 캐시를 사용할 경우, 서로 overwrite 되지 않도록 checksum 기반의 캐시를 사용하고 캐시를 repository와 동기화시킬 수 있습니다.

이렇게 Gradle은 Maven보다 더 많은 장점을 가지고 있는데 기존 Maven을 사용한 개발자들은 xml에 익숙해져 있기에 Groovy 문법을 배우는 것에는 비용이 발생하기에 아직은 Maven을 사용하는 개발자가 많습니다..

Gradle 과 Maven : Performance Comparison

참고

참고 블로그 1 : 링크
참고 블로그 2 : 링크
참고 블로그 3 : https://dev-coco.tistory.com/65

profile
https://github.com/5tr1ker

0개의 댓글