[JAVA] Maven & Gradle

SIK407·2024년 11월 11일

Java

목록 보기
4/5

Spring Boot를 사용하거나, 그냥 JSP 프로젝트 만들때 등
우린 Maven, Gradle 이란 단어들을 많이 들어봤다.

근데 난 이게 정확하게 뭔지 모른다... 그래서 정확하게 알아보고자 적는다.

A. 빌드 도구 (Build Tool)

Maven, Gradle은 Java 프로젝트에서 널리 사용중인 대표 빌드 도구이다.

1. 빌드 (Build)

빌드프로그램을 실행 가능한 배포 파일을 만들어내는 것 이다.
우리가 작성한 소드코드들, 기타 파일들 (.xml, .jpg, .csv 등)을 JVM이나 Tomcat 같은 WAS(Web Application Server)가 인식할 수 있도록 패키징하는 과정을 말한다.

2. 빌드도구(Build Tool)

결국 빌드 도구는 위 빌드 과정을 자동화해주는 SW이다.
우린 프로젝트를 하면서 여러가지의 외부 라이브러리를 사용한다. 필요한 라이브러리를 자동으로 다운로드하고 관리한다.

또한 다음과 같은 작업들도 한다.

1. 전처리 (Preprocessing)
2. 소스 코드 -> Binary 코드 (컴파일)
3. Binary 코드를 패키징
4. 테스트

자바는 Ant, Maven, Gradle 빌드도구들이 있다고 한다.



B. Maven


출처: APACHE 공식 페이지

Maven
Java 전용 프로젝트 관리 도구
Lifecycle(생명주기) 관리 목적 빌드 도구이며, Apache Ant의 대안이다.
Apache에서 배포되는 오픈소스 SW이다.

1. 특징

Maven은 2개의 설정 파일을 통해 관리가 가능하다.

  • setting.xml (메이븐 설치시 기본으로 제공되는 xml)
    -> 메이븐 툴과 관련 설정파일
  • pom.xml (자바 프로젝트의 빌드 툴)
    -> 정의한 라이브러리 자동 설치

이 2개의 파일만 가져오면, 여러명이서 개발환경을 동일하게 설정할 수 있다.

2. Maven의 생명주기

Lifecycle는 시스템의 요구분석부터 유지보수까지 전 공정을 체계화한 절차이다.
요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 유지보수 절차로 진행된다.

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


C. Gradle


출처: Gradle 공식 페이지 (코끼리 같은 놈)

Gradle
Apache의 AntMaven의 장점을 결합하여 만들어졌다.
Ant BuilderGroovy script를 기반으로 구축되어 있고, 주로 Spring BootAndroid에서 사용된다.

Maven에 비해 10~100배 가량 빠르다고 한다. (와...)
이러한 이점 덕분에 Gradle안드로이드 개발을 위한 공식 빌드 도구로 지정되었다.

1. Groovy?

Groovy

Java를 발전시킨 객체 지향 프로그래밍 언어.
Java, Python과 꽤 유사한 언어다.

(자바 얼굴에 점 하나 찍고 다른 언어라 주장...?)
출처: Groovy 나무위키

2. 특징

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


D. Maven VS Gradle

  1. 스크립트 길이와 가독성은 Gradle이 우세

  2. 빌드와 테스트 실행 결과

    Gradle이 우세 [출처: Switching From Maven To Gradle (Youtube)]
    Gradle은 필요할 때만 작업을 실행하는 증분 빌드, 빌드 캐시 활용 그리고 메모리에 빌드 정보를 유지하는 Gradle Daemon이 있다.
    그래서 테스트 반복 시, 실행 결과 시간의 차이가 더 커진다.

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

profile
감자 그 자체

0개의 댓글