스프링 부트를 이용하여 프로젝트를 생성하려고 하다 보면, 가장 처음 맞딱들이게 되는 Maven vs Gradle?
각각 두개가 무엇인지, 차이가 무엇인지에 대해 간단히 정리해보자
Maven과 Gradle은
필요한 라이브러리를 땡겨서 오고, 빌드하는 라이프사이클까지 모두 관리해주는 툴이다.
예전에는 대부분 Maven 프로젝트로 작성되어져었다고 하지만,
요즘 최신 스프링 프로젝트들은 대부분 다 gradle 프로젝트로 작성되고 있으며,
심지어 스프링 라이브러리 자체도 gradle 프로젝트로 작성되어져 있다.
Why Gradle?
다음 링크는 gradle홈페이지에서 maven과 gradle의 차이에 대해 적어놓은 포스팅이다.
결론적으로 사람들이 gradle을 선택하는 이유는 아래와 같다.
- Flexibility
- 구글은 Gradle을 안드로이드를 위한 공식적인 build tool로 지정하였다.
이는 gradle이 가장 베이직하고 기본적인 방법으로 확장 가능한 방식으로 모델링 되었기 때문이다. - Maven과 Gradle 모두 configuration에 대한 규칙을 제공하지만, Maven은 매우 엄격하고 유연성 없는 모델을 제공하는 반면,
Gradle의 경우, 책임을 질 수 있고, 권한이 있는 유저가 사용한다고 가정하고 만들어 졌기에 유연성이 매우 뛰어나다.
- 구글은 Gradle을 안드로이드를 위한 공식적인 build tool로 지정하였다.
- Performance
- 그냥 Gradle은 Maven보다 빌드 속도가 훨씬 빠르며, Gradle이 Maven에 비해 가지게 되는 장점은 아래와 같다.
(최소 2배에서 최대 100배까지 차이 날 수 있다.)
- Incrementality:
- Gradle은 작업의 input, output을 추적하고, 필요한 항목만 실행하며 가능한 경우 변경된 파일만 처리하여 중복된 작업을 피한다.
- Build Cache
- Gradle은 같은 input으로 빌드된 모든 output을 재사용한다.
- Gradle Daemon
- A long-lived process that keeps build information "hot" in memory.
- Incrementality:
- 그냥 Gradle은 Maven보다 빌드 속도가 훨씬 빠르며, Gradle이 Maven에 비해 가지게 되는 장점은 아래와 같다.
- Build라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많다.
- 설정 내용이 길어지고 가독성 떨어짐
- 의존관계가 복잡한 프로젝트 설정하기에는 부적절
- 상속구조를 이용한 멀티 모듈 구현
- 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야함 (상속의 단점 생김)
- Gradle은 그루비를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
- Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버했다.
- 설정 주입시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다.
Conclusion
결론적으로, Gradle이 Maven보다 우월하며, Maven의 장점은 레거시 프로젝트를 진행하며 생긴 사람들의 익숙함 정도이다.
"Why not Gradle?"
'java,springboot' 카테고리의 다른 글
vscode에서 gradle로 springboot 개발환경 설정 (0) | 2023.03.01 |
---|---|
parameter 1 of constructor in required a bean of type that could not be found (0) | 2023.02.27 |
Ljava.lang.Object 읽을 수 있게 만들기(List 타입 콘솔 찍기) (0) | 2023.02.17 |
@Value 와 @ConfigurationProperties 이용해 여러 프로퍼티 파일(yml) 설정 (0) | 2023.02.13 |
Java - Objects, Classes, Interfaces, Packages and Inheritance (0) | 2023.01.17 |