처음으로 자바 스프링에 대해 공부할 때, 항상 서두에 듣게 되는 선택지는 바로 Maven vs Gradle 이다.
나는 처음 자바의 개발환경을 선택하기 위해 Maven과 Gradle이라는 자바의 빌드 툴의 선택지에 들어섰을 때,
Maven은 현재 많은 개발 환경에서 이미 사용중이고 Gradle은 비교적 최신(2013년도)에 나온 빌드 스크립트라고 배웠었다.
이때, Maven이 더 많은 사용량을 차지하지만 Gradle을 추천받아 Gradle의 사용법을 배웠었다.
하지만 왜 maven이 더 많이 사용되는데 gradle을 추천했는지는 이해하지 못했다.
그 궁금증을 풀기 위해 오늘은 자바의 빌드 도구 중 무엇을 선택할 것인지 정하기 위해 도구들에 대해 공부해 보겠다.
2. 빌드 툴이 무엇인가? - Maven VS Gradle
빌드 툴이란 ?
개발환경에서의 빌드 툴이란 pintOS를 공부할 때 사용하던 C의 Make 와 같은 것을 말한다.
소스 코드의 빌드 과정을 자동으로 처리해주며 외부 소스코드(라이브러리와 모듈 등)를 간단히 관리하고, 외부 소스코드의 버전간의 호환을 쉽게 제어할 수 있게 해준다.
외부 코드를 공유하며 다양하고 유연한 개발이 가능해지면서 하나의 프로젝트 내에서 필요한 라이브러리들이 많아지게 되었다.
이 라이브러리들을 만약 직접 다운로드하고 추가하면 협업하는 개발자들 간의 버전 호환의 문제가 있을 수 있으며, 매우 번거롭기까지 하다.
(또한 내가 사용하기로 한 라이브러리를 아주 세부적으로 그들간의 의존성과 순서를 파악하고 있어야 하기도 하다.)
이러한 책임을 빌드 툴에게 일부 맡기며 협업시 라이브러리간의 호환성 문제를 일부 해소하기로 했다.
빌드 툴 탄생의 역사
이러한 이론적인 역사라는 단어를 쓰고 싶지 않지만, 빌드 툴을 선택하는데에 빌드 도구의 탄생의 일대기를 파악하는 것이 매우 도움이 된다.
- Make
C언어 빌드 툴인 make 빌드 툴은 makefile 이라는 통일된 구조로 빌드를 처리한다.
소프트웨어 개발 세계에 빌드 개념을 처음 가져왔다고 한다.
하지만 이 빌드 툴은 새로운 언어인 자바에게 적용하기 어려운 점이 있었다.
- Ant
JAVA + XML 을 통해 간단하고 사용하기 쉽게 JAVA언어의 빌드 툴 역할을 수행하는 Ant가 탄생한다.
하지만 이 Ant는 복잡한 처리를 위해서는 빌드 스크립트가 매우 장황해져 관리하기 어렵다는 단점이 있었고,
무엇보다 라이브러리의 의존성을 지원하지 않았다.
- Maven
Ant의 문제 = 복잡한 처리 어려움 , 의존성 지원 X 를 해결하는 Maven이 2004년에 혜성같이 등장.
Ant에 빌드 생명 주기 개념을 추가한다.
의존 관계를 메이븐 저장소라는 곳에서 자동으로 관리해주는 장점이 있다.
하지만 이 Maven 또한 기능이 워낙 많아서 이해해야할 암묵적인 규칙들이 많아지게 되었고,
이는 진입장벽이 높아지는 문제가 있었다.
또한 기본 규칙대로(lifecycle) 빌드하는 Maven의 특성 상 , 기본 규칙을 벗어난 처리를 하려고 하면 사용이 거의 불가능해진다.
- Gradle
시대가 바뀌면서 가장 최종적으로 등장하게 된 Java의 새로운 빌드 툴인 Gradle이 2013년에 등장한다.
이 Gradle은 지금까지의 빌드 툴의 장점을 활용 , 단점은 제거할 목적으로 만들어졌다.
스크립트 언어(Groovy)로 만들어져 유연성이 높고, 빌드 순서에 따르는 Maven과 달리 Gradle은 태스크(빌드 순서의 각 단계) 의존 관계에 따라 정해진다.
Maven이 정립해놓은 빌드 순서대로만 빌드가 가능했다면, Gradle은 이 빌드 순서를 개발자가 직접 커스터마이징 할 수 있어서 빌드 순서를 제어하기가 쉬워진다.
또 하나의 장점은 별도로 설치할 필요가 없다는 것인데, 이는 그래들 래퍼(Wrapper)라는 구조를 제공하여 지정한 버전의 그레들을 자동으로 설치해주는 기능을 가진다.
이 말은 각 개발자의 PC에서도 gradle을 설치할 필요가 없고, 서로 다른 버전의 빌드 툴에 의해 누구는 빌드가 되고 누구는 빌드가 안되는 현상이 발생하지 않을 것이다.
그레들 VS 메이븐의 비교 지표 자료
두 빌드 툴의 평가 지표를 자랑스럽게 비교하고 있는 gradle 이다..
https://gradle.org/maven-vs-gradle/
퍼포먼스의 차이에서도 두 빌드 툴의 성능차이를 느낄 수 있었다.
빌드 타임 속도가 Maven보다 10배에서 100배 정도 빠르다고 한다.
오늘은 빌드 툴에 대하여 알아보았다.
이번 2024년 처음으로 작업할 프로젝트에서는 빌드 툴로 gradle을 사용하게 될 것 같다.
물론 maven이 현업에서 훨씬 더 많이 사용되고 있지만, trade-off가 없어보이는 Gradle의 장점을 미루어 보았을 때,
둘 다 처음 배운다면
미래의 기술전환을 고려하여 Gradle로 시작하는 것이 더 좋을 것 같다는 생각이 든다.
'Java' 카테고리의 다른 글
[TIL] JAVA : @Bean, IoC 컨테이너, 의존성 주입 (2) | 2024.01.03 |
---|---|
Errorfix : compatible version of org.hibernate.dialect.MySQL57Dialect (0) | 2024.01.02 |
[TIL] spring을 공부하기 전 배워야 할 것들 (1) : Java의 특징과 빌드 과정 (1) | 2023.12.30 |
[JAVA] 인터페이스의 기본부터 응용까지 (2) - 인터페이스 사용법 익히기 (0) | 2023.05.24 |
[JAVA] 인터페이스의 기본부터 응용까지 (1) - 인터페이스? 왜 사용하나요? (0) | 2023.05.23 |