Maven과 Gradle의 개념 및 비교

smlee·2022년 7월 10일
16

Java

목록 보기
1/4

스프링부트 프로젝트를 하며 여러 가지 기능 구현을 하면서 여러 의존성 라이브러리를 추가해야하는 경우가 많았다.

따라서 추가하는 방법을 위해 공식 문서나 스택오버 플로우, 블로그 등을 참고해보면 항상 Gradle을 사용하는 경우와 Maven을 사용하는 경우를 나누어 설명되어 있었다.

그래서 Maven과 Gradle의 차이점을 알아보고 비교를 해보려고 한다.

⚒ 빌드 관리 도구(Build Tool)

MavenGradle은 모두 빌드 관리 도구이다.
빌드 관리 도구는 빌드와 관리 도구로 나누어질 수 있어보인다. 그렇다면 빌드란 무엇일까?

💒 빌드(Build)

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

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

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

👩‍💻빌드 관리 도구(Build Tool)

빌드의 정의가 그렇다면, 빌드 도구란 무엇일까?

빌드 도구란, 소스코드에서 애플리케이션을 생성하면서 여러가지 외부 라이브러리를 사용하는데, 빌드 관리도구는 사용자가 관리할 필요 없이 필요한 라이브러리들을 자동으로 관리한다.

빌드 관리도구는 다음과 같은 작업을 수행한다.

  1. 종속성 다운로드 - 전처리(Preprocessing)
  2. 소스코드를 바이너리 코드로 컴파일(Compile)
  3. 바이너리 코드를 패키징(Packaging)
  4. 테스트 실행(Testing)
  5. 프로덕션 시스템에 배포(distribution)

빌드 툴로는 Ant, Maven, Gradle 등이 있다.

1. Maven

(1) Maven의 정의

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

(2) Maven의 특징

  1. Lifecycle 관리 도구로, 정해진 Lifecycle에 의하여 작업을 수행하며, 전반적인 프로젝트 관리 기능을 포함하고 있다.

    clean - validate - compile - test - package - verify - install - site - deploy의 라이프 사이클을 가진다.

(1) clean : 빌드 시 생성되어있었던 파일들을 삭제한다.
(2) validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계
(3) compile : 프로젝트 소스코드를 컴파일 하는 단계
(4) test : 단위 테스트를 수행하는 단계. 테스트 실패 시 빌드 실패로 처리하며, 스킵이 가능하다.
(5) package : 실제 컴파일된 소스 코드와 리소스들을 jar, war 등의 파일의 배포를 위한 패키지로 만든다.
(6) verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인한다.
(7) site : 프로젝트 문서와 사이트 작성, 생성하는 단계
(8) deploy : 만들어진 package를 원격 저장소에 release하는 단계

  1. Maven은 필요한 라이브러리를 pom.xml에 정의한다. 이를 프로젝트 모델링이라고 한다.

pom은 Project Object Model의 약자로, 프로젝트 정보(프로젝트 이름, 라이센스, 빌드 설정(소스, 리소스, 라이프 사이클 별 실행한 plugin 등 빌드 관련 설정), 빌드 환경(사용자 환경 별로 달라질 수 있는 프로필 정보, pom 연관 정보(의존 프로젝트, 모듈, 상위 프로젝트 등)을 담고 있다.

(3) Apache Ant vs Maven

Apache Ant는 비교적 자유도가 높은 편이고, Maven은 정해진 라이프사이클에 의하여 작업을 수행하며, 전반적인 프로젝트 관리 기능까지 포함하는 차이점이 있다. (Maven은 Build Tool + Project Management)

2. Gradle

(1) 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 문법과 유사하여 빌드 처리를 관리할 수 있다.

(2) Gradle 특징

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

(3) Maven vs Gradle

  1. 스크립트 길이와 가독성 면에서 gradle이 우세하다.

  2. 빌드와 테스트 실행 결과 Gradle이 더 빠르다

    gradle캐시를 사용하므로 테스트 반복 시 실행 결과 시간의 차이가 더 커진다.

  3. 의존성이 늘어날 수록 스크립트 품질의 차이가 커진다.
    Maven은 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속 받아야하지만, gradle설정 주입 방식을 사용하므로 멀티 프로젝트에 적합하다.


📚 Reference

  1. 빌드, 배포, 컴파일의 개념 & 차이점(Build, Deploy, Compile)
  2. Build Tool - 빌드 도구란
  3. Maven과 Gradle의 차이점
  4. 메이븐(Maven)과 그래들(Gradle)의 개념 및 비교

1개의 댓글

comment-user-thumbnail
2023년 10월 6일

두 개의 차이점이 궁금했는데 알게됐습니다. 좋은 글 감사합니다 :)

답글 달기