Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20240914 Gradle과 Maven의 차이점 본문

개발Article

[TIL]20240914 Gradle과 Maven의 차이점

최밤빵 2024. 9. 15. 01:01

🤓Gradle과 Maven의 차이점

나는 Spring Boot와 Gradle을 사용하면서 빌드 하고 있다. Gradle은 내가 프로젝트에서 사용하고 있는 빌드 도구지만, Maven이라는 또 다른 빌드 도구도 있다. 두 도구는 자바에서 사용되지만, 구체적으로 어떤 차이점이 있는지 잘 모른다. 이번 기회를 통해 Gradle과 Maven의 차이점을 공부해보고자 한다.

 

▶ Gradle과 Maven이란?

GradleMaven은 모두 자바 프로젝트에서 의존성 관리와 빌드를 자동화하는 도구이다. 개발자가 프로젝트에서 사용해야 하는 라이브러리를 쉽게 추가하고, 코드를 컴파일하고 패키징하는 과정을 자동화할 수 있도록 도와준다.

 

→ Maven:

XML 기반의 프로젝트 관리 도구로, 빌드 및 의존성 관리를 자동화하는 기능을 제공한다. 자바 프로젝트에서 가장 오랫동안 사용된 빌드 도구 중 하나다.

→ Gradle:

스크립트 기반의 빌드 도구로, XML 대신 Groovy 또는 Kotlin DSL을 사용하여 빌드 스크립트를 작성한다. Gradle은 성능을 중시하며, 현대적인 빌드 도구로 평가받고 있다.

 

▶Gradle과 Maven의 주요 차이점

 

▷빌드 스크립트 형식

→ Maven:

Maven은 XML 기반의 pom.xml 파일을 사용하여 프로젝트의 빌드 설정과 의존성을 관리한다. XML은 구조화된 데이터 포맷으로 가독성이 높지만, 복잡해질수록 코드가 길어지고 관리하기 어려울 수 있다.

→ Gradle:

Gradle은 스크립트 언어인 Groovy 또는 Kotlin DSL을 사용한다. 이를 통해 유연한 빌드 스크립트를 작성할 수 있으며, 코드를 재사용하거나 조건에 따라 빌드 동작을 제어하는 것이 용이하다. Gradle의 build.gradle 파일은 상대적으로 간결하고, 필요한 부분에 대해 동적으로 빌드 스크립트를 작성할 수 있다.

 

▽ 예시: Maven의 pom.xml

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.5.4</version>
        </dependency>
    </dependencies>
</project>

 

▽ 예시: Gradle의 build.gradle

plugins {
    id 'org.springframework.boot' version '2.5.4'
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

 

▷성능

→ Gradle:

Gradle은 증분 빌드(Incremental Build) 기능을 제공하여 이전 빌드와 변경된 부분만 다시 빌드하는 방식으로 성능을 최적화한다. 또한, Gradle은 멀티스레드를 활용한 **병렬 빌드(Parallel Build)**를 지원하여 큰 프로젝트의 빌드 속도를 크게 개선할 수 있다. 따라서 Gradle은 대규모 프로젝트나 빈번한 빌드 작업에서 더 빠르다.

→ Maven:

Maven은 기본적으로 순차적으로 빌드 작업을 처리하기 때문에 빌드 속도가 느릴 수 있다. 모든 빌드 단계를 다시 실행해야 하므로, 대규모 프로젝트에서는 빌드 시간이 오래 걸릴 수 있다.

 

의존성 관리

→ Maven:

Maven은 중앙 저장소(Maven Central Repository)를 기본으로 사용하며, 의존성의 버전을 pom.xml에서 명시적으로 관리해야 한다. 의존성 충돌 문제를 해결하는 기능은 있지만, 이를 해결하기 위해 명시적인 버전 관리를 해야 하는 경우가 많다.

→ Gradle:

Gradle은 더 유연한 의존성 관리 방식을 제공한다. build.gradle 파일에서 의존성 관리를 간단하게 할 수 있으며, 의존성 버전을 범위로 설정하거나 조건부로 설정할 수 있어 더 효율적으로 의존성을 관리할 수 있다.

 

▷플러그인 관리

→ Maven:

Maven은 특정 작업(예: 테스트, 배포 등)을 자동화하기 위해 플러그인 시스템을 제공한다. 각 플러그인은 pom.xml에서 명시적으로 설정하고, 해당 작업을 실행해야 한다.

→ Gradle:

Gradle은 빌드 스크립트 내에서 플러그인을 선언할 수 있으며, 다양한 플러그인을 쉽게 추가하고 관리할 수 있다. Gradle의 플러그인 시스템은 동적이며, 사용자가 플러그인을 쉽게 만들고 추가할 수 있다.

 

유연성

→ Maven:

Maven은 기본적으로 설정된 빌드 라이프사이클을 따르며, 정해진 빌드 과정(예: 컴파일, 테스트, 패키징 등)을 따르게 되어 있다. 이로 인해 빌드 과정에서 커스터마이징이 필요할 때는 다소 제약이 있다.

→ Gradle:

Gradle은 스크립트 기반이기 때문에 빌드 과정을 매우 유연하게 제어할 수 있다. 조건에 따라 다른 작업을 수행하거나, 필요에 따라 빌드 순서를 변경하는 등 다양한 커스터마이징이 가능하다.

 

▶ 정리 

Gradle은 스크립트 기반의 빌드 도구로, 유연하고 빠른 성능을 제공하며 대규모 프로젝트에 적합하다. 반면 Maven은 XML 기반으로 비교적 안정적인 빌드 시스템을 제공하지만, 유연성 면에서는 Gradle에 비해 제한적이다. 두 도구 모두 자바에서 중요한 역할을 하고 있으며, 프로젝트의 성격과 요구 사항에 따라 적합한 빌드 도구를 선택하는 것이 중요하다.