[Java/Build] Maven 과 Gradle 비교 및 개념

DevelopHeo·2025년 1월 3일
1
post-thumbnail

📙 빌드 관리 도구(Build Tool)

빌드 툴을 간단히 정의하자면 소스 코드의 빌드 과정을 자동으로 처리해주며 외부 소스코드(외부 라이브러리)를 자동 추가 및 관리해주는 프로그램 입니다.

빌드 관리도구는 다음과 같은 작업을 수행한다.
1. 종속성 다운로드 - 전처리(Preprocessing)
2. 소스코드를 바이너리 코드로 컴파일(Compile)
3. 바이너리 코드를 패키징(Packaging)
4. 테스트 실행(Testing)
5. 프로덕션 시스템에 배포(distribution)

빌드 툴 사용하는 이유

  • 빌드 툴을 사용하는 이유는 다양한 개발이 가능해지면서 필요한 라이브러리들이 많아지게 되었습니다. 만약 이 라이브러리들을 직접 다운로드하고 추가하면 개발자들 간의 버전 관리 및 다운로드한 jar파일의 보안 위험의 문제가 있고  번거로울 것입니다.
  • 또한 빌드 프로세스를 수동으로 호출할 시 무엇을 빌드할지, 어떤 순서를 가지고 빌드할지, 어떤 의존성이 있는지 모두 파악하기 쉽지 않아 실용적이지 않습니다. 그렇기에 빌드 툴을 사용하여 이러한 문제들을 방지하고 해결하는 것입니다.

빌드란?

빌드는 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 결과를 말한다. 즉, 우리가 작성한 소스코드 (스프링부트의 경우 .java 파일), 프로젝트에서 쓰인 각각의 파일 및 자원(.xml, .jpa, .jpg, properties)을 jvm이나 톰캣 같은 WAS가 인식할 수 있도록 패키징하는 과정 및 결과물을 일컫는다.

  • 예를 들면, Java 프로젝트를 진행하면 개발자가 작성한 A.java와 여러 가지 정적 파일 등에 해당하는 resource가 존재한다.

  • 빌드를 한다면 소스코드를 컴파일 해서 .class로 변환하고 resource를 .class가 참조할 수 있는 적절한 위치로 옮기고 META-INF와 MANIFEST.MF들을 하나로 압축하는 과정을 의마한다.

자바의 경우 자바 가상 머신(Java Virtual Machine, JVM)에서 실행 가능한 바이트코드 형태의 클래스 파일이 생성됩니다. 빌드의 단계 중 컴파일이 포함되어 있습니다.

Java의 빌드 툴

  1. Ant
  • 처음에는 단순한 빌드 도구로써 Ant가 이용됨
  1. Maven
  2. Gradle

📙 Maven과 Gradle 차이

Maven과 Gradle은 자바 프로젝트의 빌드 도구로, 프로젝트의 빌드, 의존성 관리, 테스트, 배포 등을 자동화하는 역할을 합니다. 둘 다 널리 사용되지만, 특징과 장단점이 다릅니다.

1. 기본 개념

Maven

  • XML 기반의 선언형 빌드 도구.
  • 정해진 빌드 생명주기를 따르며, 설정 파일(pom.xml)에 의존성 및 설정을 명시.
  • 안정적이고 표준화된 구조와 방식으로 사용이 간편함.

Gradle

  • Groovy 또는 Kotlin DSL을 사용하는 스크립트 기반 빌드 도구.
  • 유연성과 성능에 초점.
  • 대규모 프로젝트와 복잡한 빌드 환경에서 높은 생산성을 제공.

2. 설정 파일

Maven: pom.xml
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</artifactId>
      <version>2.7.5</version>
    </dependency>
  </dependencies>
</project>

Gradle: build.gradle
Groovy 또는 Kotlin DSL 형식으로 작성. 코드가 간결하고 직관적이며, 유연하게 확장 가능.

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

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

3. 의존성 관리

Maven

  • 의존성은 중앙 Maven 저장소에서 가져옴.
  • 부모/자식 프로젝트 구조에서 의존성을 상속받을 수 있음.

Gradle

  • 의존성을 더 유연하게 관리하며, Maven 저장소뿐 아니라 다른 저장소도 쉽게 추가 가능.
  • 의존성 충돌 해결 시 자동 충돌 분석 기능이 유용.

4. 성능

Maven

  • XML 기반이라 정적이고 안정적이지만, 빌드 속도가 느릴 수 있음.
  • 멀티 프로젝트의 빌드 속도는 Gradle보다 느림.

Gradle

  • Incremental Build(변경 사항만 빌드)와 Daemon Process를 활용해 속도가 빠름.
  • 특히 멀티 프로젝트에서 우수한 성능을 보임.

5. 유연성

Maven

  • 표준화된 방식으로 정형화된 프로젝트에는 적합.
  • 커스터마이징이 어렵고 복잡한 빌드 작업에 한계가 있음.

Gradle

  • 스크립트 기반으로 유연성이 높아 복잡한 빌드 작업이나 대규모 프로젝트에서 적합.
  • 플러그인과 DSL을 활용해 사용자 정의 작업을 손쉽게 구현 가능.

6. 커뮤니팅와 학습 곡선

Maven

  • 오래된 도구로, 문서와 커뮤니티가 매우 풍부.
  • 학습이 쉬우며, XML 기반으로 직관적.

Gradle

  • 최신 트렌드를 반영하며, 빠르게 성장 중.
  • Groovy 또는 Kotlin DSL 학습이 필요하지만, 적응하면 효율적.

7. 주요 장단점 비교

특징MavenGradle
언어XML 기반Groovy 또는 Kotlin DSL
속도느림빠름 (증분 빌드 지원)
유연성낮음높음
표준화뛰어남상대적으로 약함
학습 곡선쉬움다소 어려움
플러그인 지원제한적강력하고 다양함

8. 사용 시 추천

Maven

  • 표준화된 프로젝트를 빠르게 시작하고 싶을 때.
  • XML 기반 설정이 익숙하거나 간단한 프로젝트에 적합.

Gradle

  • 대규모 프로젝트, 복잡한 빌드 작업, 멀티 모듈 프로젝트.
  • 성능과 유연성이 중요한 경우 추천.

9. 결론

Maven은 안정성과 간편함이, Gradle은 유연성과 성능이 강점입니다. 프로젝트의 규모와 복잡도에 따라 적절한 도구를 선택하는 것이 중요합니다.

📙 Maven

Maven 정의

Maven은 Java 전용 프로젝트 관리 도구로, Lifecycle 관리 목적 빌드 도구이며, Apache Ant의 대안으로 만들어졌다.
Maven은 아파치 라이센스로 배포되는 오픈 소스 소프트웨어이다.

Maven 특징

  1. 프로젝트 구조와 설정을 XML 파일(pom.xml)을 통해 관리한다는 것
  2. XML 파일에는 프로젝트에 필요한 라이브러리 의존성, 빌드 순서, 플러그인 등의 정보가 담겨 있다.
  3. 유연성이 부족한 편이고 빌드 속도가 상대적으로 느리다.(단점)
  4. 복잡한 XML 설정(단점)
  5. 간단한 구조와 쉬운 설정(장점)
  6. 효율적인 의존성 관리(장점)
  7. 프로젝트 구조 이해의 용이성, 다양한 프로젝트와의 호환성(장점)

📙 Gradle

Gradle 정의

Maven을 대체할 수 있는 프로젝트 구성 관리 및 범용 빌드 툴이며, Ant Builder와 Groovy script를 기반으로 구축되어 기존 Ant의 역할과 배포 스크립의 기능을 모두 사용가능하며 스프링부트와 안드로이드에서 사용된다.

  • 빌드 속도가 Maven에 비해 10~100배 가량 빠르며, Java, C/C++, Python 등을 지원한다.

Groovy 란?

Groovy는 JVM에서 실행되는 스크립트 언어이다. JVM에서 동작하지만 소스코드를 컴파일할 필요 없다. Java와 호환되며, Java class file들을 Groovy class로 사용 가능하다.
Java 문법과 유사하여 빌드 처리를 관리할 수 있다.

Gradle 특징

  1. 가독성이 좋다 : 코딩에 의한 간결한 정의가 가능하므로 가독성이 좋다.
  2. 재사용에 용이 : 설정 주입 방식(Configuration Injection)을 사용하므로 재사용에 용이하다.
  3. 구조적인 장점 : Build Script를 Groovy 기반의 DSL(Domail Specific Language)를 사용하여 코드로서 설정 정보를 구성하므로 구조적인 장점이 있다.
  4. 편리함 : Gradle 설치 없이 Gradle wrapper를 이용하여 빌드를 지원한다.
  5. 멀티 프로젝트 : Gradle은 멀티 프로젝트 빌드를 지원하기 위해 설계된 빌드 관리 도구이다.
  6. 지원: Maven을 완전 지원한다.
  7. 향상된 빌드 성능
  8. Maven과의 호환성

0개의 댓글