Web/Spring
Maven(메이븐)과 Gradle(그래들) 개념, 비교
소이리
2022. 2. 3. 23:32
Spring으로 개발을 하면서 maven과 gradle 둘 다 사용을 해보고 개념을 기반하여 본격적으로 비교를 해 보았다.
Maven 메이븐
개념
- 정식명칭은 Apache Maven(아파치메이븐)이며, 아파치 사에서 배포한 오픈소스 소프트웨어이다.
- Apache Ant 의 대안으로 등장했다.
Ant는 xml형식이고 빌드 스크립트가 복잡하며 외부 라이브러리 관리가 어려워 유지보수가 힘들다. - 자바 프로젝트를 진행하며 필요한 라이브러리, 빌드와 배포까지 관리해 주는 시스템이다.
특징
- 설정파일 : pom.xml
- 균일한 빌드 시스템(스크립트)을 제공한다. (POM)
- 쉽게 의존성 관리를 할 수 있다. (dependency)
- 플러그인이 다양하다.
- 멀티 프로젝트에 적용 시, 특정 설정을 다른 모듈에서 사용하려면 상속을 받아야만 한다.
- 프로젝트에 필요한 라이브러리가 늘어나면 빌드 스크립트가 길어지고 가독성이 떨어진다.
POM 이란 Project Object Model 을 의미하는 프로젝트 개체 모델이다.
프로젝트 내 pom.xml 파일의 상단에 프로젝트에 대한 정보, 자바 버전, 프레임워크 버전, 배포 시 파일형식, 모델버전 등이 명시되어 있다.
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.main</groupId> <!-- 프로젝트 조직ID -->
<artifactId>hello</artifactId> <!-- 프로젝트 식별ID -->
<name>projectsname</name>
<packaging>war</packaging> <!-- 배포형식 -->
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>1.8</java-version>
<org.springframework-version>4.3.14.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<!-- 라이브러리추가 부분. dependecy태그로 감싼 형태 -->
<dependencies>
<dependency>
<groupId>net.sf.sociaal</groupId>
<artifactId>xmlpull-xpp3</artifactId>
<version>3.0.0.20130526</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
maven 라이브러리를 관리하는 사이트가 있다. 이곳에서 필요한 라이브러리를 찾아 추가(의존성주입) 해준다.
Gradle 그래들
개념
- maven과 ant의 장점을 조합하여 Groovy 언어를 활용한 빌드 시스템
- 안드로이드 스튜디오의 공식 빌드 시스템
특징
- 설정파일 : build.gradle
- Java, C, C++, Python, Scala, kotlin 등을 지원함
- 캐싱을 하기 때문에 빌드 속도가 maven에 비해 훨씬 빠르다.
- 상속을 하지 않고 설정 주입 방식을 사용하므로 멀티프로젝트 빌드가 훨씬 수월하다.
Groovy 란?
- Java 가상머신에서 실행되는 스크립트 언어
- 소스 컴파일 할 필요 없고 소스코드 그대로 실행된다.
- Java 클래스 파일을 Groovy 클래스 파일로 활용할 수 있다.
- Groovy 를 Java의 방언이라고 생각하는 의견도 있을 정도로 Java와 문법적으로 유사하다.
- 정적인 xml과 달리 변수선언, if, else, for 등을 통해 동적인 로직을 구성할 수 있다.
build.gradle 기본예시
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
//라이브러리 적용
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}
test {
useJUnitPlatform()
}
1세대인 ant에 비하면 분명 maven도 빌드관리가 편한 것은 사실이다.
gradle 을 사용하면 코드 자체도 훨씬 간단하고 짧은데, 캐시까지 사용하기 때문에 maven과 실행속도 면에서 차이가 크다. 이 부분은 프로젝트 규모가 커질수록 더 크게 체감될 것이다.
무엇보다 java와 호환성도 좋고 컴파일도 없으니 사용하지 않을 이유는 없지않을까 싶다!
References
https://maven.apache.org/what-is-maven.html
https://docs.gradle.org/current/userguide/what_is_gradle.html
https://www.javatpoint.com/gradle-build