Maven vs Gradle, 20년차 개발자는 실무에서 이렇게 활용합니다.
자바로 개발할 때는 수많은 고품질의 외부 라이브러리를 활용할 수 있습니다. 이러한 라이브러리를 효율적으로 활용하기 위해서는 의존성 관리를 자동화 주는 빌드 도구의 활용이 필수적입니다.
빌드 도구가 없다면 개발 생산성이 크게 떨어질 수밖에 없기 때문에, 대부분의 자바 프로젝트에서는 ‘Maven’이나 ‘Gradle’ 같은 빌드 도구를 사용합니다.
빌드 도구를 사용하면 경우 이러한 라이브러리들을 자동으로 다운로드하고 빌드 과정에 포함시켜줌으로써, 개발 작업 효율성을 크게 높일 수 있습니다.
자바 프로젝트를 사용해 열 일하는 개발자분들을 위해 자바 프로젝트에서 널리 사용되고 있는 대표 빌드 도구인 Maven과 Gradle을 제대로 활용해 업무 효율을 높일 수 있게 각 잡고 알려드리겠습니다!
빌드 도구(Build Tool)란
Gradle과 Maven을 설명하기 전에 우선 빌드와 빌드 도구가 무엇인지에 대해서 알아보겠습니다. ‘빌드’는 프로그램을 실행 가능 한 배포 파일을 만들어 내는 것을 의미합니다.
즉, 소스 코드를 컴파일하고, 컴파일된 클래스 파일과 리소스 파일 등 프로그램 실행에 관련된 파일들을 패키징 하여, 배포 가능한 형태로 만드는 것을 의미합니다.
빌드가 생성되는 과정에서 이루어지는 작업
- 컴파일: 소스 코드를 컴파일하여 바이트코드 또는 실행 파일을 생성합니다.
- 테스트: 단위 테스트 및 통합 테스트를 자동으로 실행합니다.
- 패키징: 컴파일된 코드를 JAR, WAR, EAR 등의 형태로 패키징 합니다.
- 의존성 관리: 프로젝트가 의존하는 외부 라이브러리 및 프레임워크를 관리합니다.
- 배포: 생성된 빌드 아티팩트를 특정 서버나 리포지토리에 배포합니다.
- 클린업: 이전 빌드의 결과물(예: 클래스 파일, 배포 패키지 등)을 삭제하여 깨끗한 빌드를 보장합니다.
- 리포트: 빌드 및 테스트 결과를 보고서 형태로 생성합니다.
‘빌드 도구’는 이러한 일련의 빌드 과정을 자동화해주는 소프트웨어입니다. 설정 파일을 통해 필요한 작업을 정의하고 클릭 한 번으로 모든 의존 라이브러리(jar 파일)을 다운로드해 컴파일하고, 테스트하고, 패키징 하여 배포까지 자동으로 처리할 수 있습니다.
이로 인해 배포 작업이 간편하고 효율적으로 이뤄지게 되어 손쉽게 배포 작업을 진행할 수 있는데요. Java 생태계에서 대표적으로 사용하는 빌드 도구가 바로 ‘Maven’과 ‘Gradle’입니다.
Maven, Ant의 단점을 개선한 빌드 도구
자바 프로젝트는 수많은 외부 라이브러리를 사용합니다. 이러한 jar 파일 형태의 라이브러리를 예전에는 수동으로 다운로드해서 프로젝트 폴더에 두고 관리하지만, 버전이 변경되면 다시 다운로드해야 하는 등 관리가 불편했습니다.
Maven이 등장하기 전 Ant라는 빌드 도구를 사용했는데, Ant는 빌드에 필요한 외부 라이브러리를 관리해 주지 않았습니다.
반면, Maven은 Ant의 단점을 보완해서 외부 라이브러리를 자동으로 관리해 줍니다. 그리고, 표준화된 형태로 빌드 할 수 있도록 틀을 제공해주어 빌드 자동화의 편의성을 높였습니다.
이를 통해 자동으로 빌드 및 테스트, 패키징을 자동으로 수행해주어서 개발 생산성이 향상됩니다. 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에도 빌드 속도가 느리고 유연성이 부족하다는 단점이 있습니다. 이를 개선하고 보완하기 위해 나온 것이 바로 'Gradle'입니다
Gradle, 안드로이드 개발 공식 빌드 도구
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 파일 구조를 살펴보겠습니다.
Gradle은 groovy언어의 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 빌드를 실행하는 데 사용됩니다.
Gradle 빌드는 아래와 같은 명령어로 빌드를 수행할 수 있습니다.
gradlew [task명] |
태스크명은 gradle에서 사용하는 플러그인에 따라 사용할 수 있는 task명이 달라지는 데, 가장 많이 사용되는 ‘java 플러그인’ 을 사용할 때 사용할 수 있는 주요 task는 다음과 같습니다.
- 프로젝트를 빌드. 의존성 다운로드 및 컴파일, 테스트 실행.
gradlew build |
- 컴파일된 클래스 파일을 생성
gradlew classes |
- 패키징 파일인 jar파일 생성
gradlew jar |
- 빌드 디렉토리 정리(삭제)
gradlew clean |
그러면 지금까지 언급한 현대적인 Java 빌드 도구인 Maven과 Gradle의 차이를 요약해서 정리해보겠습니다.
Maven vs Gradle 의 차이
대표적인 Java 빌드 도구인 maven과 Gradle의 주요 차이점을 정리하면 다음과 같습니다.
Maven은 2004년에 처음 개발되었습니다. 먼저 개발되었기에, 현재까지 가장 많은 사용자가 사용하는 빌드 도구입니다.
반면 Gradle은 maven보다 나중에 개발된 빌드 도구로 2007년에 개발되었습니다. 처음에는 비교적 주목을 받지 못했지만, 2013년 구글이 안드로이드 스튜디오의 기본 빌드 시스템으로 Gradle을 채택해서, 안드로이드 개발자 사이에서는 Gradle이 표준 빌드 도구로 자리잡게 되었습니다.
Maven과 Gradle 어떨 때 사용해야 할까요?
이럴 때 Maven을, 이럴 때 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 전문 프리랜서가 파트너십으로 등록되어 있습니다.
“다른 회사에 비해서 추천 인력의 퀄리티가 높습니다.”
다양한 기업들이 이랜서의 서비스를 통해
IT 전문가 채용의 어려움을 해결하고 있습니다.
프로젝트 개발부터 유지보수 전문가까지
기업 맞춤형으로 IT 전문가를
필요한 시기에 빠르게 매칭합니다.
이랜서는 기업들이 IT 전문가 채용 시 겪는 어려움을 해결하기 위해, 프로젝트 등록 시 1:1로 매니저를 배정합니다. 그리고 프로젝트 등록 24시간 이내 프로젝트에 가장 적합한 IT 전문가를 데이터로 검증하여 매칭합니다.
IT 전문가의 업무 성향부터 인성(협업 능력)까지
24년의 데이터로 프로젝트에 가장 적합한 IT 전문가를 매칭합니다.
이랜서는 현장에 바로 투입 가능한 IT 전문가를 매칭하기 위해 IT 전문가의 업무 성향부터 인성(협업 능력)까지 철저하게 데이터로 검증합니다. 약 1.5억 개의 사용자 데이터와 350만 개의 프리랜서 평가 데이터를 활용하여, 전문성부터 인성(협업 능력)까지 철저하게 확인하여 프로젝트에 가장 적합한 IT 전문가를 매칭합니다.
전문성과 인성 모두 검증된 자바 개발자를 찾으시나요?
대한민국 No.1 IT 인재 매칭 플랫폼 이랜서에
-> 회원 가입만 하세요.
-> 24시간 안에 전담 매니저가 연락을 드립니다.
-> 끝입니다. 이게 다냐구요? 네, 이게 다입니다.
-> 급하시다고요? 전화 주세요. 02-545-0042
24년의 노하우와 데이터를 바탕으로 검증된 IT 프리랜서를 매칭해 드립니다.