Gradle과 Maven

younk·2023년 8월 4일
0

스프링부트

목록 보기
8/10

Gradle과 Maven

회사에서 스프링부트를 사용하는 si를 두번이나 진행했지만,
gradle과 maven의 정확한 차이점을 알고있지 못했다.
스스로 토이프로젝트를 생성하려다 gradle을 선택해야할지, maven을 선택해야할지 몰라서 끄적여보는 공부일지.

빌드 관리 도구(Build Tool)

maven과 gradle은 빌드과정에서 필요한 여러 외부 라이브러리들을 자동으로 관리해주는 빌드관리 도구이다.

빌드란?

빌드는 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 결과를 말함.
java,xml,jsp등을 was가 인식할 수 있도록 패키징하는 과정 및 결과물

빌드 관리도구의 기능

  • 종속성 다운로드(전처리)
  • 소스코드를 바이너리 코드로 컴파일
  • 바이너리 코드를 패키징
  • 테스트 실행
  • 프로덕션 시스템에 배포

Maven

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


=> 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 : 만들어진 패키지를 원격 저장소에 release하는 단계

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

maven 예시 (pom.xml)

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example2</groupId>
    <artifactId>demo-maven</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-maven</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>

Gradle

Ant Builder와 Groovy script를 기반으로 구축되어 기존 Ant의 역할과 배포 스크립의 기능을 모두 사용가능함. 스프링부트와 안드로이드에서 사용된다. maven에 비해 빌드 속도가 10~100배 가량 빠르다. 자바, c/c++, 파이썬등을 지원한다.

Gradle 예시 (build.gradle)

plugins {
    id 'org.springframework.boot' version '2.5.2'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}
 
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
 
repositories {
    mavenCentral()
}
 
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
 
test {
    useJUnitPlatform()
}

Maven과 Gradle의 비교

  1. 가독성, 간결함
    maven은 xml에 정의하지만, gradle은 스크립트 언어를 사용하기 때문에 변수선언, if else for등의 로직이 구현가능하고 가독성이 좋다.

  2. 빌드 속도
    gradle은 이미 빌드된 파일들을 모두 다시 빌드하지 않고, 바뀐 파일들만 빌드한다. 캐시를 사용하기 때문에 테스트 반복시 속도차이가 더 크게 발생.
    또한 gradle은 데몬 프로세스를 지원한다. 데몬 프로세스는 서비스의 요청에 응답하기위해 오랫동안 살아있는 프로세스인데, gralde의 데몬 프로세스는 메모리상에 빌드 결과물을 보관한다. 때문에 한번 빌드된 프로젝트는 다음 빌드에서 매우 적은 시간만 소요된다.

  3. 직관적인 사용
    maven이 정적인 형태의 xml 기반으로 작성되기 때문에, 특정 설정을 다른 모듈에서 사용하려면 상속받아야한다.
    반면 gradle은 groovy를 사용하기 때문에 동적인 빌드는 groovy 스크립트로 플러그인을 호출하거나, 직접 코드를 짜면 된다.

2개의 댓글

comment-user-thumbnail
2023년 8월 4일

정리가 잘 된 글이네요. 도움이 됐습니다.

1개의 답글