Maven 과 Gradle

niz w·2023년 12월 4일

Spring

목록 보기
3/17

지금까지 spring 작업을 하면서 설정하는 부분까지는 선택하는 일이 없다보니 잘 모르고 써왔던 게 많았다.
그래서 하나하나 차근히 작성하고 공부해보려고 한다!

Maven과 Gradle은 빌드 관리 도구라고 한다.

그럼 빌드는 무엇일까?🤔

빌드는 소스코드 파일들을 컴퓨터에서 실행할 수 있는 독립적 형태로 변환하는 과정과 결과

.java와 같이 우리가 작성한 소스코드나 프로젝트에서 쓰인 .xml, .jpa, .jpg, properties 등을 jvm이나 Tomcat 같은 WAS가 인식할 수 있도록 패키징하는 과정과 결과물이다.

예를 들자면,
Java 프로젝트에서 작성한 .java 와 여러 정적 파일 등에 해당하는 resource가 존재할 것이다.

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

⚒️빌드 관리 도구

빌드 도구란, 소프트웨어 개발에 있어서 소스코드를 실행 가능한 애플리케이션으로 만들어주는 도구를 뜻한다. 이 과정을 자동화하여 관리하는 기능을 하기에 빌드 관리 도구 또는 빌드 자동화 도구라고 부른다.

빌드 수행 작업

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

1. Maven

Maven은 Java 전용 프로젝트 관리 도구로, Lifecycle 관리 목적의 빌드 도구! (Apache Ant의 대안으로 만들어졌다.)

👉 아파치 라이센스로 배포되는 오픈 소스 소프트웨어

특징

  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 연관 정보(의존 프로젝트, 모듈, 상위 프로젝트 등)을 담고 있다.

  2. 플러그인을 통한 전역적인 재사용 : Maven은 빌드에 대한 대부분의 책임을 각 플러그인에 위임 (이러한 플러그들은 Maven저장서 - Repository에 저장됨)

  3. 공통 인터페이스 : Maven 이전에는 각 개발환경에 대한 빌드 프로세스를 파악하는 데 시작이 소요되었으나, 빌드에 필요한 프로세스를 정의하고 이를 인터페이스로 제공하여 문제 해결


2. Gradle

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

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

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

특징

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

  • Maven과 Gradle 비교
  1. 스크립트 길이와 가독성 면에서 gradle이 우세
  2. 빌드와 테스트 실행 결과 gradle이 빠름.
    gradle은 캐시를 사용하기에 테스트 반복 시 실행 결과 시간의 차이가 더 커짐.
  3. 의존성이 늘어날 수록 스크립트 품질의 차이가 더 커짐.
    Maven은 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속 받아야 하지만, gradle은 설정 주입 방식만으로 사용 가능하기에 멀티 프로젝트에 적합함.

📚 Reference

  1. Maven과 Gradle의 개념 및 비교
  2. Maven과 Gradle의 차이점

0개의 댓글