이전 노션 블로그의 빌드 관리 도구 Maven과 Gradle 비교하기 (2021.01.06)로부터 마이그레이션된 글입니다.
Maven은 Java용 프로젝트 관리도구로 Apache의 Ant 대안으로 만들어 졌다. 빌드 중인 프로젝트, 빌드 순서, 라이브러리 종속성 관계를 pom.xml
에 명시한다. 외부저장소에서 필요한 라이브러리와 플러그인들을 다운로드 한 다음, 로컬시스템의 캐시에 모두 저장한다.
예를들어 "Spring Boot Data JPA Starter" 모듈이 필요하면 Maven Repository에서 해당 모듈을 검색하여 xml 설정 파일에 추가하여 사용할 수 있다. (Maven용 코드 이외에도 gradle 등 다른 빌드 관리용 코드도 있다.)
[Spring] 빌드 관리 도구 Maven과 Gradle 비교하기.
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.2.4.RELEASE</version>
</dependency>
Apache Maven과 Apache Ant에서 볼 수 있는 개념들을 대안으로서 나온 프로젝트 빌드 관리 툴이다. (완전한 오픈소스) Groovy 언어를 사용한 Domain-specific-langauge를 사용한다. (xml보다 훨씬 간결하다) 꽤 큰 규모로 예상되는 multi-project 빌드를 도울 수 있도록 디자인되었다. 프로젝트의 어느 부분이 업데이트되었는지 알기 때문에, 빌드에 점진적으로 추가할 수 있다. (업데이트가 이미 반영된 빌드의 부분은 더 이상 재실행되지 않아, 빌드 시간이 훨씬 단축될 수 있다)
두 시스템이 빌드에 접근하는 방식에는 몇 가지 근본적인 차이점이 있다.
→ 빌드 설정 규모가 점점 키지면 커질수록, 빌드 시간의 차이도 Maven과 비교하여 꽤 격차가 벌어질 수 있을 것 같다.
→ 2개 이상의 프로젝트에서 동일한 캐시를 사용할 경우, 서로 overwrite되지 않도록 checksum 기반의 캐시를 허용하고, 캐시를 repository와 동기화시킬 수 있다.
속도나 캐시 사용 안정성에 대하여 당연히 Gradle로 사용하는게 이득이겠다는 생각이 든다. 그럼에도 Gradle을 상용하지 않는 이유는 초반에 Maven의 Scope를 지원하지 않았고 성능면에서도 앞설 것이 없었다. 이러한 점은 현재에 해결되었지만 여전히 익숙함의 문제와 새로운 것을 배우는 비용의 문제, 이로 인해 팀프로젝트에서 사용하기 위해서는 다른 팀원도 배워야한 다는 문제가 발생한다. 구글 트렌드가 그 차이를 여실히 보여주고 있는 듯 하다.