Maven / Gradle 개념 및 비교

Yoon·2022년 12월 25일
0

1. 메이븐(Maven)

Maven 이란?

  • 아파치 메이븐은 자바용 프로젝트 관리 도구이다.
  • 아파치 Ant의 대안으로 만들어졌다.
  • 아파치 라이센스로 배포되는 오픈 소스 소프트웨어이다.

프로젝트를 진행하면서 사용되는 수많은 라이브러리들을 관리해주는 도구이다.
여기서 메이븐의 특징적인 점은 그 라이브러리들과 연관된 라이브러리들까지 거미줄 처럼 모두 연동되서 관리가 된다는 점이다.
즉, 메이븐은 네트워크를 통해 연관된 라이브러리까지 같이 업데이트를 해주기 때문에 사용이 편리

POM - Project Object Model

Maven의 기능을 이용하기 위해 POM이 사용된다.
POM은 약자 이름 그대로 Project Object Model의 정보를 담고 있는 파일이다.
pom.xml에서 주요하게 다루는 기능들은 아래와 같다.

  • 프로젝트 정보 : 프로젝트의 이름, 라이센스 등
  • 빌드 설정 : 소스, 리소스, 라이프사이클별 실행한 플러그인 등 빌드와 관련된 설정
  • 빌드 환경 : 사용자 환경 별로 달라질 수 있는 프로파일 정보
  • pom 연관 정보 : 의존 프로젝트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등

2. 그래들(Gradle)

Gradle 이란??

  • 빌드, 프르젝트 구성/관리, 테스트, 배포 도구
  • 안드로이드 앱의 공식 빌드 시스템
  • 빌드 속도가 Maven에 비해 10~100배 가량 빠름
  • JAVA, C/C++M Python 등을 지원
  • 빌드 툴인 Ant Builder와 Groovy 스크립트 기반으로 만들어져 기본 Ant의 역할과 배포 스크립트의 기능을 모두 사용 가능

Groovy?
Java 가상 머신에서 실행되는 스크립트 언어이다.
Java 가상 머신에서 동작하지만, Java와는 달리 소스 코드를 컴파일 할 필요는 없다.
스크립트 언어이고 소스 코드를 그대로 실행한다.

기존 메이븐의 경우 XML로 라이브러리를 정의하고 활용하도록 되어 있으나,
Gradle의 경우 별도의 빌드 스크립트를 통하여 사용할 어플리케이션 버전, 라이브러리 등의 항목을 설정할 수 있다.
Groovy 스크립트 언어로 구성되어 있기에 XML과 달리 변수선어느 if, else, for 등의 로직이 구현가능하며 간결하게 구성 가능하다.


3. 메이븐 vs 그래들

  • Pom.xml (Maven)
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example2</groupId>
    <artifactId>demo-maven</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-maven</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</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>
  • bulid.gradle (Gradle)
plugins {
    id 'org.springframework.boot' version '2.5.2'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
    mavenCentral()
}
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
    useJUnitPlatform()
}
  1. 스크립트 길이와 가독성 면에서 gradle이 우세하다.
  2. 빌드와 테스트 실행 결과 gradle이 더 빠르다.
  3. 의존성이 늘어날 수록 성능과 스크립트 품질의 차이가 심해질 것이다.
profile
나의 공부 일기

0개의 댓글