Spring-Boot

메이븐(maven) vs 그래들(gradle) 비교

뚜코맨 2023. 12. 20. 17:22

인텔리제이로 스프링 부트 프로젝트를 생성하는 도중

Type 부분을 보면 gradle과 maven이 있는걸 확인했다

둘다 빌드 관리 도구인건 알았으나 어떤 차이점이 있는지 몰라 확실하게 알아보고자 한다

1. 메이븐(maven)

  • 아파치 메이븐은 자바용 프로젝트 관리 도구이다
  • 아파치 Ant의 대안으로 만들어짐

프로젝트를 진행하면서 수많은 라이브러리를 관리 해주는 도구이다

여기서 메이븐의 특징은 그 라이브러리들과 연관된 라이브러리들까지 거미줄처럼 모두 연동이 되어 관리가 가능해진다는 점이다

 

POM - project object model

Maven의 기능을 이용하기위해서는 POM을 사용한다

POM은 약자 이름 그대로 project object model의 정보를 담고 있는 파일이다

pom.xml에서 주요하게 다루는 기능은 다음과 같다

  • 프로젝트 정보: 이름, 라이센스 등등
  • 빌드 설정: 소스, 리소스, 플로그인 등등
  • 빌드 환경: 사용자 환경 별로 달라질 수 있는 프로파일 정보
  • pom 연관 정보: 의존 프로젝트(모듈), 상위 프로젝트, 포함 하위 모듈 등

2. Gradle(그래들)

빌드, 프로젝트 구성/관리, 테스트, 배포 도구

안드로이드 앱의 공식 빌드 시스템

빌드 속도가 maven에 비해 10~100배 빠르다

빌드 툴인 Ant Builder와 Groovy 스크립트 기반으로 만들어져 기존 Ant의 역할과 배포 스크립트 기능을 모두 사용 가능

 

Groovy?
Groovy는 java 가상 머신에서 실행되는 스크립트 언어이다. java 가상머신에서 작동하지만
java와는 달리 소스코드를 컴파일 할 필요가 없다 Groovy는 스크립트 언어이고 소스코드를 그대로 실행
또한 java와 호환이 되고 java 클래스 파일을 그대로 Groovy 클래스로 사용이 가능하다
java문법과 유사하여 빌드 처리를 관리할 수 있는 면에서 Gradle은 java 개발자가 사용하기에 최적의 빌드 관리 도구라고 생각한다

 

기존 메이븐의 경우 XML로 라이브러리를 정의하고 활용하도록 되어 있으나,

Gradle의 경우 별도의 스크립트를 통하여 사용할 어플리케이션 버전, 라이브러리 등의 항목을 설정 할 수 있다

Groovy는 스크립트 언어로 구성되어 있기에 XML과 달리 변수 선언, if~else, for 등의 로직 구현이 가능하다

 

3. gradle vs maven 그래서 뭐가 더 좋을까?

  1. 스크립트 길이와 가독성 면에서 gradle 우세
  2. gradle이 속도면에서도 우세(gradle은 캐시를 사용하기 때문에 반복 시 차이가 더 심해진다)
  3. 의존성이 늘어날 수록 스크립트 품질, 성능의 차이가 심해질 것

maven은 프로젝트가 커질수록 빌드 스크립트의 내용이 길어지고, 가독성이 떨어짐

반면에 gradle은 훨씬 적은 양의 스크립트로 짧고 간결하게 작성 가능

 

maven이 정적인 형태의 XML기반으로 동적인 빌드 적용할 경우 어려움이 있다면,

gradle은 Groovy라는 스크립트 언어를 사용하기때문에 동적인 빌드가 가능

 

결론: 과거에는 maven을 많이 사용했지만 요즘은 gradle로 많이들 넘어가는 추세라고 한다. 필자도 maven으로 프로젝트를 많이 진행했었지만 새로 부트를 배우는 과정에서 gradle을 써보니 훨씬 가독성이 좋다는것을 느꼈다. 둘 중 택1을 해야한다면 gradle을 선택할 것이다.