Maven과 Gradle은 빌드 도구(Build tool)입니다.
라이프사이클도 관리해주고 관련 라이브러리들을 자동으로 가져오는 등 편리한 기능들을 제공하고 있습니다.
쉽게 표현하면 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 툴이라고 할 수 있습니다.
Maven과 Gradle이 어떤 점이 다른 지 살펴보도록 하겠습니다.
Maven
Maven은 Ant를 사용하던 개발자들의 불편함을 해소하고자 2004년에 출시했습니다.
pom.xml을 이용한 정형화된 빌드 시스템을 제공하고 있습니다.
Maven은 외부에서 필요한 라이브러리와 플러그인들을 받고 로컬에 저장합니다.
또한 간단한 설정을 통한 배포 관리가 가능합니다.
자세한 특징들은 링크로 대신하겠습니다.
maven.apache.org/maven-features.html
Gradle
Maven보다 나중인 2012년에 출시했습니다.
Android Studio에서 기본적으로 사용하는 툴입니다.
Groovy 언어를 사용한 DSL(Domain Specific Language)를 사용합니다.
따라서 XML의 형태인 Maven보다 코드가 간결해집니다.
이전에 빌드된 부분은 추가 실행하지 않는다고 합니다. 추가로 라이브러리 가져오거나 하는 일이 없을테고.. 따라서 빌드 시간이 단축될 수 있으려나요?? DAG (Directed Acyclic Graph)를 사용하여 작업 실행 순서를 정의합니다.
Maven vs Gradle
관련 주제를 구글에 검색하면 Gradle에서 공식적으로 비교한 문서가 나오더군요.
gradle.org/gradle-vs-maven-performance/
Maven과 Gradle로 동시에 빌드를 한 gif가 있는데, Gradle 쪽이 더 빨랐습니다.
유연하고 성능이 좋다는 점은 위 문서를 통해 확인해주세요.
아까도 언급했지만 Gradle 쪽은 코드도 간결하고 이해하기가 쉽습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
<?xml version="1.0" encoding="UTF-8"?>
<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.example</groupId>
<artifactId>demo-maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo-maven</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
buildscript {
ext {
springBootVersion = '1.5.4.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
|
cs |
확실히 눈에 띄게 가독성이 늘어났습니다.
요즘 추세도 Gradle로 많이들 넘어가셨다고 들어서 저라면 Gradle을 익혀두겠습니다.
버전이 확확 바뀌고 그에 따라 문법도 조금씩 변하는 느낌이지만 트렌드를 따라가야죠 암요.
'web > spring&spring boot' 카테고리의 다른 글
[spring boot] @SpringBootApplication 정리 (0) | 2021.03.24 |
---|---|
[spring boot] H2 Database "mem:testdb" not found 오류 해결법 (1) | 2021.02.24 |
[spring] @Controller와 @GetMapping (2) | 2021.02.22 |
[spring boot] 프로젝트 생성하기 (0) | 2021.02.17 |
Spring vs Spring boot 차이점 비교하기 (0) | 2021.02.06 |