스프링 부트를 처음 시작하게 되면 https://start.spring.io/ 사이트를 들어가서 프로젝트를 생성하게 된다. 나같은 초보는 시작부터 물음표가 생기는데

예전에 입문 강의를 보면서 저 사이트를 통해 gradle project를 만들어보긴 했었다. 어치피 회사에서 주로 사용하는게 maven project라 잊고 지냈는데 이번에 사용해보게 되었으니 (더 늦기 전에 간단하게라도) 정리하는 시간을 갖기로 했다.
기존에 알고있던 maven과 gradle 차이는 설정파일 형태가 다르다는 점이다.
maven은 pom.xml을 활용해서 의존성 관리를 하고, gradle은 build.gradle을 사용한다. maven이 먼저고 gradle이 나중에 나온 것으로 알고 있다.
Maven은 Apache Software Foundation에서 개발한 자바 프로젝트의 빌드, 의존성 관리 등을 자동화하기 위한 도구이다. 기존에는 Ant를 주로 사용했는데, Maven과 동일하게 xml 기반의 설정파일을 사용하지만, 프로젝트가 복잡해질 경우 빌드 과정을 이해하기 어려운 점 등의 단점을 가지고 있었다.
Maven은 프로젝트의 라이프사이클을 정의하고 이를 실행하는 방식이다. 플러그인 기반의 아키텍처로, 미리 정의된 플러그인을 사용할 수 있고 사용자 정의 플러그인을 작성하여 빌드 과정 확장도 가능하다.
pom.xml은 프로젝트의 구조와 빌드 설정을 정의하는 파일이다.
프로젝트의 정보(프로젝트 이름, 라이센스 등)와 빌드 설정(소스, 리소스, 플러그인 등 빌드와 관련된 설정), 빌드 환경 등의 정보를 담고 있다.
Maven은 미리 정의된 라이프사이클을 가지고 있다.
이 외에도 더 많은 종류의 라이프 사이클이 존재한다. 각각 라이프사이클마다 순서를 갖는 단계(Phase), 단계별 실행되는 플러그인 골(Goal)이 지정되어 있다.
Maven이 제공하는 표준 구조로, 표준 구조를 따르지 않으면 기능이 제대로 동작하지 않을 수 있다. (강제성을 띈다.)
이전 세대 빌드 도구(ant, maven 등)의 단점을 보완하고 장점을 취합하여 만든 오픈소스 빌드 도구로, Groovy 또는 Kotlin 기반의 DSL(Domain Specific Language)을 사용한다.
Gradle도 maven처럼 라이프사이클을 가지고 있다.
프로젝트 구조는 Maven과 유사하지만, 자유롭게 변경이 가능하다.
DSL(Domain Specific Language)을 사용하여 빌드 스크립트를 작성한다.
Java뿐만 아니라 C/C++, Python 등을 지원한다.
멀티 프로젝트를 위해 설계된 빌드 관리 도구.
Gradle은 Maven의 플러그인 컨셉과는 다르게 태스크(task)중심으로 구성되어있고, 사용자는 태스크를 조합하여 원하는 빌드흐름을 만들 수 있다.
Gradle은 DSL을 이용해서 XML 기반의 Maven POM 파일보다 훨씬 가독성이 뛰어나고 간결해서 작성이 유리하다. 특히 빌드 속도가 Maven에 비해 최대 100배 빠르다. 캐시를 사용하기 때문에 테스트를 반복할수록 더 빨라진다.
직접 설치를 하지 않아도 gradle wrapper를 이용하여 사용할 수도 있고, 설정 주입 방식으로 재사용에도 유리하다.
회사에서 주로 사용하는 프로젝트가 maven이라 그나마 눈에 익숙하긴 했는데, 이번에 좀 더 깊이있게 공부하게 된 것 같다. 왜 사람들이 다들 gradle 사용하는지 이번 기회에 많이 공부하게 됬다. 처음 gradle을 사용하면서 pom.xml보다가 build.gradle보면 확실히 좀 더 눈에 더 잘 들어오는 것 같다.
https://hyojun123.github.io/2019/04/18/gradleAndMaven/
https://velog.io/@leesomyoung/Maven%EA%B3%BC-Gradle%EC%9D%98-%EC%B0%A8%EC%9D%B4-%EB%B0%8F-%EB%B9%84%EA%B5%90
https://gradle.org/gradle-vs-maven-performance/