Maven vs Gradle, 20년차 개발자는 실무에서 이렇게 활용합니다.

개발 테크
2024. 06. 10
조회수
5,213

maven

자바로 개발할 때는 수많은 고품질의 외부 라이브러리를 활용할 수 있습니다. 이러한 라이브러리를 효율적으로 활용하기 위해서는 의존성 관리를 자동화 주는 빌드 도구의 활용이 필수적입니다.

빌드 도구가 없다면 개발 생산성이 크게 떨어질 수밖에 없기 때문에, 대부분의 자바 프로젝트에서는 ‘Maven’이나 ‘Gradle’ 같은 빌드 도구를 사용합니다.

빌드 도구를 사용하면 경우 이러한 라이브러리들을 자동으로 다운로드하고 빌드 과정에 포함시켜줌으로써, 개발 작업 효율성을 크게 높일 수 있습니다.

자바 프로젝트를 사용해 열 일하는 개발자분들을 위해 자바 프로젝트에서 널리 사용되고 있는 대표 빌드 도구 Maven과 Gradle을 제대로 활용해 업무 효율을 높일 수 있게 각 잡고 알려드리겠습니다!

 

<급하신 분을 위한 목차>

빌드 과정을 자동화해주는 빌드 도구(Build Tool)

 

빌드 과정을 자동화해주는 빌드 도구(Build Tool) 

maven-gradle

Gradle과 Maven을 설명하기 전에 우선 빌드와 빌드 도구가 무엇인지에 대해서 알아야 합니다. ‘빌드’란? 프로그램을 실행 가능 한 배포 파일을 만들어 내는 것을 의미합니다. 

즉, 소스 코드를 컴파일하고, 컴파일된 클래스 파일과 리소스 파일 등 프로그램 실행에 관련된 파일들을 패키징 하여, 배포 가능한 형태로 만드는 것을 의미합니다. 

 

빌드가 생성되는 과정에서 이루어지는 작업

- 컴파일: 소스 코드를 컴파일하여 바이트코드 또는 실행 파일을 생성합니다.

- 테스트: 단위 테스트 및 통합 테스트를 자동으로 실행합니다.

- 패키징: 컴파일된 코드를 JAR, WAR, EAR 등의 형태로 패키징 합니다.

- 의존성 관리: 프로젝트가 의존하는 외부 라이브러리 및 프레임워크를 관리합니다.

- 배포: 생성된 빌드 아티팩트를 특정 서버나 리포지토리에 배포합니다.

- 클린업: 이전 빌드의 결과물(예: 클래스 파일, 배포 패키지 등)을 삭제하여 깨끗한 빌드를 보장합니다.

- 리포트: 빌드 및 테스트 결과를 보고서 형태로 생성합니다.

 

‘빌드 도구’는 이러한 일련의 빌드 과정을 자동화해주는 소프트웨어입니다. 설정 파일을 통해 필요한 작업을 정의하고 클릭 한 번으로 모든 의존 라이브러리(jar 파일)을 다운로드해 컴파일하고, 테스트하고, 패키징 하여 배포까지 자동으로 처리할 수 있습니다. 

이로 인해 배포 작업이 간편하고 효율적으로 이뤄지게 되어 손쉽게 배포 작업을 진행할 수 있는데요. Java 생태계에서 대표적으로 사용하는 빌드 도구가 바로 ‘Maven’‘Gradle’입니다. 

Maven이란? Ant의 단점을 개선한 빌드 도구
 

Maven이란? Ant의 단점을 개선한 빌드 도구

maven-repository

‘Maven’은 Java 프로젝트를 위한 빌드 자동화 도구로, 빌드(Build), 패키징(jar 또는 war 파일 생성), 테스트, 외부 라이브러리 관리, 배포 등을 한 번의 명령으로 간편하게 처리할 수 있습니다.

Java 프로젝트에서는 수많은 외부 라이브러리를 사용하는데, 과거에는 필요한 라이브러리를 직접 다운로드하고 프로젝트 폴더에 수동으로 배치해 관리해야 했습니다. 그래서 라이브러리의 버전이 변경될 때마다 다시 다운로드하고 업데이트해야 하는 등 번거로움이 많았습니다.

Maven 등장 이전에는 Ant라는 빌드 도구를 사용했지만, Ant는 외부 라이브러리 관리 기능이 부족했습니다. Maven은 이러한 Ant의 단점을 보완했습니다. 외부 라이브러리가 자동으로 다운로드되고 관리할 수 있는 기능을 제공합니다. 더불어 표준화된 프로젝트 구조와 빌드 방식을 지원해 빌드 작업을 더욱 간소화하고 효율적으로 만들어 줍니다.

자동으로 빌드 및 테스트, 패키징을 자동으로 수행해주어서 개발 생산성이 향상됩니다.

Maven은 POM.xml(Project Object Model) 파일을 사용해 빌드 설정을 관리합니다.

Maven의 특징

 

Maven의 특징

Maven CoC(Convention over Configuration)

maven-coc

Maven은 빌드도구이지만 설정파일에 ‘소스 파일의 위치’나 컴파일한 결과를 저장할 ‘Target 폴더의 위치’를 지정하지 않습니다. 

일종의 미리 정해둔 ‘관습’ 의거해서 어디에 소스 파일이 위치할 것인지 어디에 컴파일한 파일을 만들것인지를 미리 정해두고 그 위치에 소스파일이 있으면 그것을 근거로 빌드(컴파일) 작업을 진행합니다. 

Maven의 이런 특징 즉, 설정보다는 관습을 기반으로 동작하는 특징을 가리켜서 ‘CoC(Convention over Configuration)’이라고 합니다.

 

POM(Project Object Model)

maven-pom

Maven은 프로젝트에 필요한 설정 정보를 ‘프로젝트 객체(Project Object)’라는 개념으로 모델링하여 관리합니다. 예를 들어, 버전, 빌드 환경, 라이브러리 저장소, 사용할 라이브러리 및 의존성 등과 같은 모든 설정 정보를 포함합니다.

이러한 프로젝트 객체 정보는 Project Object Model(POM) 파일인 pom.xml에 작성됩니다. 쉽게 말해, Maven은 빌드와 관련된 설정을 모두 pom.xml 파일에 정의하면 필요한 작업을 자동으로 처리할 수 있다는 뜻입니다.

 

[Maven 빌드 파일: POM.xml]

pom.xml 파일은 Maven 프로젝트의 핵심 파일로, 프로젝트의 의존성, 플러그인, 빌드 설정 등을 정의합니다. 다음은 간단한 pom.xml 예제입니다.

<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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0modelVersion>

 

    <groupId>com.examplegroupId>

    <artifactId>my-appartifactId>

    <version>1.0-SNAPSHOTversion>

 

    <properties>

        <maven.compiler.source>1.8maven.compiler.source>

        <maven.compiler.target>1.8maven.compiler.target>

    properties>

 

    <dependencies>

        <dependency>

            <groupId>junitgroupId>

            <artifactId>junitartifactId>

            <version>4.12version>

            <scope>testscope>

        dependency>

    dependencies>

 

    <build>

        <plugins>

            <plugin>

                <groupId>org.apache.maven.pluginsgroupId>

                <artifactId>maven-compiler-pluginartifactId>

                <version>3.8.0version>

                <configuration>

                    <source>1.8source>

                    <target>1.8target>

                configuration>

            plugin>

        plugins>

    build>

project>

 즉, 아래와 같이 빌드를 실행할 수 있습니다.

 

- 프로젝트 빌드

mvn compile

 

- 테스트 실행

mvn test

 

- 패키징

mvn package

 

- 빌드 파일 정리(삭제)

mvn clean

 

Maven은 다양한 프로젝트를 빠르게 생성하기 위한 ‘아키 타입(archetype)’을 제공합니다. maven에서는 이러한 표준 Template 형태의 프로젝트를 archetype이라는 명칭을 사용합니다. 

특정 형태의 프로젝트를 만들어내는 프로젝트 생성 Template이라고 보면 됩니다. 자주 사용되는 Maven 아키 타입은 다음과 같습니다.

 

  • maven-archetype-quickstart

: 간단한 Java 프로젝트를 시작하기 위한 템플릿입니다. 이를 사용하면 빠르게 Java 프로젝트를 설정하고 시작할 수 있습니다.

 

  • maven-archetype-webapp

: 웹 애플리케이션을 개발하기 위한 템플릿입니다. 이를 사용하여 웹 애플리케이션을 시작하고 구성할 수 있습니다.

아키 타입을 이용한 maven 프로젝트 생성 방법은 다음과 같이 사용할 수 있습니다.

mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Maven은 이러한 방법으로 표준 Template기반 maven프로젝트 구조를 손쉽게 만들어 낼 수 있습니다. 

maven-central

하지만 이러한 Maven에도 빌드 속도가 느리고 유연성이 부족하다는 단점이 있습니다. 이를 개선하고 보완하기 위해 나온 것이 바로 'Gradle'입니다

Gradle이란? 안드로이드에서 개발한 공식 빌드 도구
 

Gradle이란? 안드로이드에서 개발한 공식 빌드 도구

maven-repo

Gradle은 2007년 JetBrains회사의 Hans Dockter가 개발한 오픈 소스 빌드 자동화 도구로 Apache Ant와 Apache Maven의 장점을 결합하여 만들어졌습니다.

Maven은 XML 기반의  빌드 파일을 사용하기 때문에 가독성이 떨어지지만 Gradle은 Groovy기반 스크립트 방식을 사용하여 ‘build.gradle’이라는 빌드 파일을 만들기 때문에 가독성이 좋고, 또 스크립트를 통해 여러가지 상황에 적합한 빌드를 만들어 낼 수 있어 유연합니다.

이러한 유연성 덕분에 Gradle은 빌드 과정에서 병렬 처리와 캐싱을 활용하여 Maven보다 10배~100배까지 향상된 성능을 구현할 수 있습니다. 

이러한 이점 덕분에 Gradle은 안드로이드 개발을 위한 공식 빌드 도구로 지정되어, 안드로이드 애플리케이션을 빌드하고 관리할 때 널리 사용되고 있습니다.


 

Gradle의 폴더 구조와 파일 구조

Gradle의 배경 지식에 대해 알려드렸는데요. 이제 Gradle의 폴더 구조와 build.gradle 파일 구조를 살펴보겠습니다. 

Gradlegroovy언어의 build.gradle 파일을 통해 프로젝트의 빌드 설정과 종속성을 설정합니다. 이러한 구조는 Gradle이 빌드 시스템으로서의 유연성과 효율성을 제공할 수 있도록 도와줍니다.
 

[Gradle 빌드 파일: build.gradle]

// build.gradle

plugins {

    // Java 플러그인을 사용하여 Java 프로젝트를 빌드합니다.

    id 'java'

}

 

// 프로젝트 설정

// group: 프로젝트 그룹 식별자

// version: 프로젝트 버전

group 'com.example'

version '1.0'

 

// 의존성 관리

// 아래는 JUnit 의존성을 추가하는 예시입니다.

dependencies {

    // JUnit 테스트 라이브러리

    testImplementation 'junit:junit:4.12'

}

 

// 빌드 설정

// 아래 예시에서는 JAR 파일을 생성합니다.

jar {

    // 빌드된 JAR 파일의 main() 클래스를 설정합니다.

    manifest {

        attributes 'Main-Class': 'com.example.MyMainClass'

    }

}

Gradle 프로젝트는 Maven과 유사한 폴더 구조를 가지고 있습니다. Gradle 프로젝트의 폴더 구조에는 gradle 디렉토리가 있으며, 이 안에는 Gradle 빌드 시스템의 버전을 관리하는 파일이 포함됩니다. 

또한, 프로젝트 루트 디렉토리에는 gradlew 및 gradlew.bat 파일이 있어서 해당 프로젝트의 Gradle 빌드를 실행하는 데 사용됩니다.

maven-build

Gradle 빌드는 아래와 같은 명령어로 빌드를 수행할 수 있습니다.
 

gradlew [task명]

태스크명은 gradle에서 사용하는 플러그인에 따라 사용할 수 있는 task명이 달라지는 데, 가장 많이 사용되는 java 플러그인’ 을 사용할 때 사용할 수 있는 주요 task는 다음과 같습니다.

gradle

 

- 프로젝트를 빌드. 의존성 다운로드 및 컴파일, 테스트 실행.

gradlew build

 

- 컴파일된 클래스 파일을 생성

gradlew classes

 

- 패키징 파일인 jar파일 생성

gradlew jar

 

- 빌드 디렉토리 정리(삭제)

gradlew clean

그러면 지금까지 언급한 현대적인 Java 빌드 도구인 Maven과 Gradle의 차이를 요약해서 정리해보겠습니다.

Maven vs Gradle 의 차이
 

Maven vs Gradle 의 차이

대표적인 Java 빌드 도구인 maven과 Gradle의 주요 차이점을 정리하면 다음과 같습니다.

gradle-version

Maven2004년에 처음 개발되었습니다. 먼저 개발되었기에, 현재까지 가장 많은 사용자가 사용하는 빌드 도구입니다.

반면 Gradle maven보다 나중에 개발된 빌드 도구로 2007년에 개발되었습니다. 처음에는 비교적 주목을 받지 못했지만, 2013년 구글이 안드로이드 스튜디오의 기본 빌드 시스템으로 Gradle을 채택해서, 안드로이드 개발자 사이에서는 Gradle이 표준 빌드 도구로 자리잡게 되었습니다. 

Maven과 Gradle 어떨 때 사용해야 할까요?
 

Maven과 Gradle 어떨 때 사용해야 할까요?

이럴 때 Maven을, 이럴 때 Gradle을 사용하세요.

gradle-설치

Maven과 Gradle은 각각의 장점과 특성을 지닌 두 가지 강력한 빌드 도구입니다. Maven은 단순하고 일관된 빌드 생명 주기를 제공하며, 표준화된 프로젝트 관리에 뛰어나기 때문에 간단한 프로젝트나 명확한 구조와 표준화가 요구되는 프로젝트에 적합합니다.

반면, Gradle 유연한 구성과 뛰어난 성능을 제공하며, Groovy 스크립트 언어를 사용하여 복잡한 빌드 요구사항을 효과적으로 처리할 수 있습니다. 

따라서 성능 최적화가 필요하거나 복잡한 빌드 프로세스를 관리해야 하는 경우에는 Gradle을 사용하는 것이 더 나은 선택이 될 수 있습니다. 

Maven과 Gradle의 특성에 맞게 프로젝트에 활용해 보세요. 프로젝트 관리와 빌드 프로세스의 효율성을 크게 향상시킬 수 있습니다. 


 

개발자의 업무 효율 개선을 위한 개발 시간 단축 시리즈

▶️ Java Optional, 도대체 왜 쓰는거야? (Feat. NPE 피하는 방법)

▶️ 정규 표현식; 자바 정규식을 활용해서 문자열을 손쉽게 처리하는 방법

▶️ Spring Framework, 개발 시간을 단축하고 싶으면 ‘3가지’를 확인하세요.

 

자원 관리 최적화를 위한  비즈니스 소프트웨어 시리즈

▶️ ERP 프로그램이란? 성공적인 ERP 구축을 위한 종합가이드

▶️ 유지보수, 프로젝트가 오래가는 방법 알려드립니다.

▶️ SAP란?, SAP가 필요한 이유부터 기능, 도입방법까지 모두 알려드립니다!


 

Maven과 Gradle을 활용할 

Java 개발자 채용은 어디서?

 

대한민국 최대 IT 인재 매칭 플랫폼 이랜서
 

이랜서는 데이터로 검증된 IT 전문가를 매칭해주는 대한민국 최대  IT 인재 매칭 플랫폼입니다. 

소프트웨어 개발을 위한 자바 전문가부터 JavaScript, React, Vue, PHP, Node js, Next js, Nest js, CSS 전문가와 데이터 분석을 위한 Oracle, MySQL, MS SQL, R 언어, DA, DBA, ETL, 대시보드빅 데이터 분야 전문가ERP, SAP, 이지투웹, SCM 공급망 관리 등 전사적 자원 관리 시스템 개발을 위한 전문가까지 약 40만 명의 IT 전문 프리랜서가 파트너십으로 등록되어 있습니다.

gradle-build
 

 

“다른 회사에 비해서 추천 인력의 퀄리티가 높습니다.”

 

다양한 기업들이 이랜서의 서비스를 통해

IT 전문가 채용의 어려움을 해결하고 있습니다.

gradle-maven-차이


 

프로젝트 개발부터 유지보수 전문가까지

기업 맞춤형으로 IT 전문가를 

필요한 시기에 빠르게 매칭합니다.

이랜서는 기업들이 IT 전문가 채용 시 겪는 어려움을 해결하기 위해, 프로젝트 등록 시 1:1로 매니저를 배정합니다. 그리고 프로젝트 등록 24시간 이내 프로젝트에 가장 적합한 IT 전문가를 데이터로 검증하여 매칭합니다.

 

gradle-이란


 

IT 전문가의 업무 성향부터 인성(협업 능력)까지

24년의 데이터로 프로젝트에 가장 적합한 IT 전문가를 매칭합니다.

 

이랜서는 현장에 바로 투입 가능한 IT 전문가를 매칭하기 위해 IT 전문가의 업무 성향부터 인성(협업 능력)까지 철저하게 데이터로 검증합니다. 약 1.5억 개의 사용자 데이터350만 개의 프리랜서 평가 데이터를 활용하여, 전문성부터 인성(협업 능력)까지 철저하게 확인하여 프로젝트에 가장 적합한 IT 전문가를 매칭합니다.


 

전문성과 인성 모두 검증된 자바 개발자를 찾으시나요?

 

대한민국 No.1 IT 인재 매칭 플랫폼 이랜서

-> 회원 가입만 하세요.

-> 24시간 안에 전담 매니저가 연락을 드립니다.

-> 끝입니다. 이게 다냐구요? 네, 이게 다입니다.

-> 급하시다고요? 전화 주세요. 02-545-0042

 

24년의 노하우 데이터를 바탕으로 검증된 IT 프리랜서를 매칭해 드립니다.

 

freelancerBanner
projectBanner
댓글0
이랜서에 로그인하고 댓글을 남겨보세요!
0
/200
이랜서에 로그인하고 댓글을 남겨보세요!
0
/200
실시간 인기 게시물
이랜서 PICK 추천 게시물