

Spring boot로 프로젝트를 만들때 Maven 혹은 Gradle을 선택해서 프로젝트를 만들게 되는데,
옛날에는 Maven을 사용했다면 요즘은 Gradle을 사용한다고 강의해서 들었는데 무슨 차이일까.
Maven은 자바용 프로젝트 관리도구이다. 프로젝트를 만들다 보면 자주 사용하는 pom.xml 이곳에 사용하고 싶은 라이브러리를 긁어오면 프로젝트에서 라이브러리 기능을 사용 가능했다.
이런 라이브러리 기능을 가져와 주는 것을 빌드라고 하며, 자동으로 기능하게 해주니 빌드 툴 이라고 하기도 하나보다.
settings.xml
Maven 자체 설정을 담당하는 파일이다.
pom.xml
pom은 (Project Object Model) 프로젝트 내 빌드 옵션을 설정하는 부분이다.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.devkuma</groupId>
<artifactId>SampleMavenApp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SampleMavenApp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
살펴볼 부분은 dependency에 감싸아져 있는 부분이다.
groupId은 프로젝트를 고유하게 식별해주는 것
artifactId은 버전 정보를 생략한 jar 파일의 이름이다.
version 프로젝의 버전을 나타낸다.
scope 프로젝트의 범위를 test 실행시에만 사용되도록 해준다.
그룹 Id : junit
아티팩트 Id : junit
버전 : 3.8.1
범위 : test
라이브러리는 https://mvnrepository.com 필요한 프로젝트들을 복사해서 가져온다.

Gradle은 Groovy를 기반으로 만들어진 빌드 도구이다. Ant와 Maven 같은 빌드 도구의 단점을 보안하고 장점을 취합했다는 강점을 가지고 있다.
Groovy는 자바, 파이썬, 루비, 스몰토크 언어들의 특징을 더한 동적 객체 지향 프로그래밍 언어이이다. 자바와 비슷, 친화적인 언어이며 프로그래머들이 많은 학습 없이도 최신 프로그래밍 기법을 사용할 수 있다는 특징이 있다.(간편 표기법, 리스트, 맵, 정규식 구문 제공)
gradle의 설정 파일이다. 파일에서 Project 객체로, Project 인터페이스를 구현하고, Project 단위에서 필요한 모든 메서드와 프로퍼티를 모아놓아 작성할 때 편의하다. 파일 안에서 직접 플로그인 추가하고 각종 라이브러리를 관리할 수 있다.
Maven은 고정적이고 선형적인 단꼐의 모델을 기반으로 하나 Gradle은 작업 의존성 그래프를 기반으로 하는 차이점이 있다.
둘 다 다중 모듈 빌드를 병렬로 실행할 수 있지만, Gradle은 이미 업데이트된 task에 대해서는 작업을 실행하지 않는 incremental build를 허용해서 빌드 시간이 훨씬 단축 된다는 장점을 가지고 있다. Maven의 경우 멀티 프로젝트에서 특정 설정을 다른 모듈에 사용하려면 상속을 받아야 하지만 gradle은 설정 주입 방식을 제공한다. Gradle은 안전한 캐시를 허용해서 보안이 더 좋다는 장점과 빌드의 커스터마이징이 간편하다는 점이 있다.
예를 들어 아래 Maven에서 추가한 프로그인이
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.12.1</version>
<executions>
<execution>
<configuration>
<configLocation>config/checkstyle/checkstyle.xml</configLocation>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>2.5.4</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.1</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
위에 코드가 Gralde을 사용시 아래 처럼 간편해지고 가독성이 상승하는 걸 알 수 있다.
apply plugin:'java'
apply plugin:'checkstyle'
apply plugin:'findbugs'
apply plugin:'pmd'
version ='1.0'
repositories {
mavenCentral()
}
dependencies {
testCompile group:'junit', name:'junit', version:'4.11'
}
참고
https://hyojun123.github.io/2019/04/18/gradleAndMaven/
https://araikuma.tistory.com/463
https://jeong-pro.tistory.com/168
https://jisooo.tistory.com/entry/Spring-%EB%B9%8C%EB%93%9C-%EA%B4%80%EB%A6%AC-%EB%8F%84%EA%B5%AC-Maven%EA%B3%BC-Gradle-%EB%B9%84%EA%B5%90%ED%95%98%EA%B8%B0