Web/SrpingBoot

Maven 과 Gradle 이란?

나는나는용 2023. 8. 2. 18:34
728x90

빌드 관리 도구

빌드 :

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

소스코드, 프로젝트에 쓰인 각각의 파일·자원을 JVM이나 톰캣 같은 WAS가 인식할 수 있도록 패키징하는 과정 & 결과물

소스코드 컴파일하여 .clss로 변환, resource를 .class가 참조할 수 있는 적절한 위치로 이동, META-INF와 MANIFEST.MF들을 하나로 압축하는 과정.

 

소스코드에서 애플리케이션 생성하면서 여러 외부 라이브러리 사용하는데,

빌드관리도구는 사용자가 라이브러리를 관리할 필요없게 필요한 라이브러리들을 자동으로 관리함.

작업

1. 전처리 - 종속성 다운로드.

2. 컴파일 - 소스코드를 바이너리 코드로 컴파일.

3. 패키징 - 바이너리코드를 패키징함.

4. 테스트

5. 배포 - 프로덕션 시스템에 배포.

도구

Maven, Gradle, Ant ···

 

Maven

Java 전용 프로젝트 관리 도구.

Lifecycle 관리 목적 빌드 도구.

Apache Ant의 대안으로 만들어짐.

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

 

+) Apache Ant : 비교적 자유도가 높다. ( 사용자가 정해야될 것이 많다. )

Maven은 라이프사이클이 정해졌고, 전반적 프로젝트 관리 기능이 있다. ( Build Tool + Project Management )

특징

1. Lifecyle 관리 도구 → 정해진 Lifecycle에 의해 작업을 수행. ( 전반적인 프로젝트 관리 기능을 포함함. )

clean - validate - compile - test - package - verify - install - site -deploy

 

clean : 빌드 시 생성됐었던 파일들을 삭제.

validate : 프로젝트가 올바른지 확인, 필요한 모든 정보가 사용 가능한지 확인.

compile : 프로젝트 소스코드 컴파일.

test : 단위 테스트를 수행함. 실패 시 '빌드 실패' 처리. 스킵 가능.

package : 실제 컴파일된 소스 코드와 리소스들을 jar, war등 파일의 배포를 위한 패키지로 만듦.

verify : 통합 테스트 결과에 대해 검사하여 품질 기준 충족 여부를 확인함.

site : 프로젝트 문서와 사이트를 작성, 생성.

deploy : 만들어진 패키지를 원격 저장소에 release.

 

2. 필요한 라이브러리를 pom.xml에 정의함. → "프로젝트 모델링"

 

pom : Project Object Model

▶프로젝트 정보 ( 이름, 라이센스 )

▶빌드 설정 ( 소스, 리소스, 라이프사이클 별 실행한 plugin 등 빌드 관련 설정 )

▶빌드 환경 ( 사용자 환경 별로 달라질 수 있는 프로필 정보 )

▶pom 연관 정보 ( 의존 프로젝트, 모듈, 상위 프로젝트 ··· )

 

Gradle

Maven을 대체할 수 있는 프로젝트 구성 관리 · 범용 빌드 툴

Ant Builder와 Groovy Script 기반으로 구축되어 기존 Ant 역할과 배포스크립 기능 모두 사용 가능.

스프링부트와 안드로이드에서 사용됨.

빌드 속도가 Maven보다 10~100배 가량 빠름.

Java, C, C++, Python 등 지원함.

 

Groovy

JVM에서 실행되는 스크립트 언어.

소스코드 컴파일 필요 없음.

Java와 호환됨. Java class file들을 Groovy class로 사용 가능함.

Java 문법과 유사하여 빌드 처리를 관리할 수 있음.

특징

1. 가독성이 좋다 : 코딩에 의한 '간결한 정의' 가능.

2. 재사용 용이 : 설정 주입 방식을 사용해서.

3. 구조적 장점 : Build Script를 Grooby 기반 DSL을 사용해서 코드로써 설정정보를 구성함.

4. 편리함 : Gradle 설치 없이 Gradle wrapper이용해서 빌드를 지원함.

5. 멀티 프로젝트 : 멀티프로젝트를 지원하기 위해 설계된 빌드 관리 도구임.

6. 지원 : Maven을 완전 지원함.

 

Maven 과 Gradle 비교

스크립트 길이와 가독성 면에서 Gradle이 우세함.

 

빌드, 테스트 실행 결과 Gradle이 더 빠름 ( 캐시를 사용하므로 테스트를 반복할 경우 속도 차이가 더 커짐 )

 

의존성이 늘어날수록 스크립트 품질 차이가 커진다.

- Maven : 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속받아야 함.

- Gradle : 설정 주입 방식을 사용하므로, 멀티 프로젝트에 적합함.

728x90