본문 바로가기
프로그래밍언어/JAVA

[Spring] Maven 과 Gradle 차이

by 연어바케트 2021. 9. 24.
728x90
반응형

spring boot 를 공부하다 보니 gradle을 사용하고 있어 maven과 어떤 차이가 있는지 

공부할 필요가 있다 생각되어 정리.

 

빌드 관리 도구

  • 프로젝트 생성, 테스트 빌드, 배포 등이 작업을 위한 전용 프로그램이라 할 수 있다. 
  • 필요한 라이브러리들을 설정파일을 통해 자동으로 다운로드 해주고 이를 간편히 관리해주는 도구 
  • 빌드 자동화 도구 

 

* Maven vs Gradle

  • Maven은 스프링프로젝트에서 pom.xml이란 이름으로 사용되고, 
  • Gradle은 스프링부트, 안드로이드에서 사용된다. 
  • 정도로 그저 라이브러리를 쉽게 받아오는 정도의 용도로만 알고 있었다. 

 

* Maven이란?

- java용 프로젝트 관리 도구로 Apache의 Ant 대안으로 만들어졌다.

- 빌드중인 프로젝트, 빌드 순서, 다양한 외부 라이브러리 종속성 관계를 pom.xml파일에 명시한다. 

- maven은 외부저장소에서 필요한 라이브러리와 플러그인들을 다운로드 한다음, 로컬시스템의 캐시에 모두 저장

- 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해 자동으로 다운로드 해준다. 

 

프로젝트의 전체적인 라이프사이클을 관리하는 도구

maven에서는 미리 정의하고 있는 빌드 순서가 있으며 이 순서를 라이프사이클이라고 한다. 

라이프 사이클의 빌드 단계를 Phase라고 하는데 서로 의존 관계를 가지고 있다. 

 

 

*Gradle

  • Maven과 Ant에서 볼수 잇는 개념들을 사용하는 대안으로써 나온 프로젝트 빌드 관리 툴(오픈소스)
  • Groovy 언어를 사용한 Domain-specific-language를 사용한다. 설정파일을 xml파일을 사용하는 Maven보다 코드가 훨씬 간결하다. 
  • 큰 규모로 예상되는 multi-project 빌드를 도울 수 있도록 디자인되었다. 
  • 프로젝트의 어느부분이 업데이트되었는지 알기 때문에 빌드에 점진적으로 추가할 수 있다. 
  • -업데이트가 이미 반영된 빌드의 부분은 더이상 재실행되지 않는다. 

 

 

Gradle은 작업 의존성 그래프를 기반으로하는 반면 Maven은 고정적이고 선형적인 단계의 모델을 기반으로 한다. 

 

Maven 대신 Gradle을 사용하는 이유 

  • Maven은 xml을 기반으로 의존성 및 디렉토리 구조 관리 등의 기능을 제공하며 한동안 많이 사용됬다.그러나 라이브러리가 추가되거나 각각의 라이브러리가 서로 다른 버전의 라이브러리를 참조하는 종속성을 가지고 있을 경우 관리가 어려줘기는 문제가 있다. xml의 특징인 구조화는 장점이지만 문서의 양 자체가 비대해지는 단점이 있다.  이에 대한 대안으로 Gradle이 각광받고 있다. Gradle은 JVM기반의 빌드 도구다. Maven과 호환된다. 그 외에도 설정이 간편하고 프로젝트별로 유연하게 설정할 수 있는 장점이 있다. 

 

성능 

  •  incrememtality(증분성) : Gradle은 가능한 경우 변경된 파일만 작업해 중복작업을 피한다. 
  •  build cache : 동일한 입력에 대해 Gradle 빌드를 재사용한다. 
  •  Gradle 데몬 : 빌드 정보를 메모리에 유지하는 프로세스를 구동한다. 

 

Gradle의 증분 컴파일 

  •  maven과 가장 큰 차이점으로 빌드시 중복으로 컴파일하지 않는다. 
  •  변경된 파일만 작업한다. 

 

의존성 관리 

  •  Maven은 버전별로만 종속성을 재정의할 수 있다. 반면 Gradle은 한번 선언하면 프로젝트 전체에서 원치않은 종속성을 처리할 수 있는 종속성 선택을 할 수 있다. 

 

반응형

댓글