자바 빌드 시스템에 대해 알아봅니다.

 

 

 

1. Maven

 

 

전통적인 빌드 툴입니다. 시작은 Apache ANT의 대안으로 시작되었으며 자바 프로젝트의 전체적인 관리를 가능하게 함과 동시에 많은 편리함과 이점을 제공해 줘 널리 사용되었습니다.

 

Project Object Model을 관리하는 pom.xml 파일을 사용하며 개발자가 해당 파일에 사용할 라이브러리를 정의해 두면 정의된 라이브러리뿐 아니라 그 라이브러리를 사용하는데 필요한 종속된 다른 라이브러리까지 관리해 자동으로 다운로드하여 사용할 수 있게 해 줍니다.

 

빌드 동작 방식이 미리 정해져 있으며 라이프사이클에 의해 순서에 맞게 동작합니다. Maven의 라이프사이클까지 자세히 다루진 않습니다.

 

 

 

2. Gradle

 

 

Gradle 역시 빌드 툴입니다. Maven 보다 늦게 출발한 후발주자입니다. Gradle은 기존 ANT와 Groovy기반으로 구축되어 기존의 ANT 역할과 배포 기능 모두 지원합니다.

 

Gradle은 늦게 만들어진 만큼 Maven에 비해 더 나은 사용성과 성능을 제공하고 있습니다. 안드로이드 앱의 공식 빌드 시스템이기도 하며 Java, C/C++, Python 등 다양한 언어에 대한 빌드를 지원하고 있습니다.

 

Maven과 달리 build.gradle 파일을 사용하며 Maven과 동일하게 개발자가 사용할 라이브러리를 정의해 둘 수 있습니다. Gradle 역시 정의된 라이브러리뿐 아니라 그 라이브러리를 사용하는데 필요한 종속된 다른 라이브러리까지 관리해 자동으로 다운로드하여 사용할 수 있게 해 줍니다.

 

 

 

3. Maven vs Gradle

 

사실 두 빌드 시스템은 자주 비교되곤 합니다. 성능과 편의성면에서는 당연히 Gradle의 우세입니다. 나중에 나왔으니 기존 Maven 보다 더 좋게 차별점을 두는 게 당연합니다.

 

당장 라이브러리를 관리하는 것만 봐도 그렇습니다. Maven의 경우 xml로 관리하고 Gradle의 경우 Groovy를 사용해 라이브러리가 많아질수록 관리적 측면과 가독성만 해도 엄청나게 차이 날게 뻔합니다. 심지어 Groovy를 사용해 개발자가 직접 스크립트를 작성해 빌드를 커스텀할 수도 있고 플러그인을 호출할 수도 있습니다.

 

 

성능면에서도 많이 차이가 납니다. 클린 상태에서 빌드도 거의 두배 가량 차이나고 심지어 캐싱된 상태에서는 최대 100배까지 차이가 납니다.

 

다른 다양한 이점도 있지만 여기까지만 들어도 모두가 다 Gradle을 사용하겠구나 생각할 수도 있습니다만 사실 Maven을 더 많이 사용한다고 합니다.

 

 

많은 사람들이 익숙함과 Groovy를 배워야 한다는 생각에 Maven을 사용하고 있을 수도 있습니다. 물론 개발자 포럼에 공유되어 있는 코드가 Maven으로 작성되어 있어서 빠르게 적용하기 위해서 그럴 수도 있습니다. 아니면 회사에서 사용하고 있던 제품 프로젝트의 빌드 시스템이 Maven으로 설정되어 있어서 그럴 수도 있고요.

 

하지만 아무리 생각해봐도 이제 더 이상 Maven을 고집할 이유는 모르겠습니다. 이미 사내에서 관리되고 있는 프로젝트가 아니라면 포럼이나 학습서에 Maven으로 작성되어 있어도 Gradle로 직접 바꿔서 시도해보는 것이 좋다고 생각합니다.

 

 

 

4. IntelliJ

 

 

IntelliJ를 IDE로 사용하고 새로운 Java 프로젝트를 생성할 때 보면 Build System에 Maven과 Gradle보다 IntelliJ라는 항목이 먼저 보였던 것을 기억하나요?

 

 

사실 앞서 다룬 내용처럼 대부분의 사용자는 Maven을 사용할 테고 다시 그 나머지 사용자의 대부분은 Gradle을 사용할 거로 생각합니다. StackOverflow와 같은 사이트를 보면 종종 IntelliJ에 관한 질문이 있긴 합니다. 결론은 "IntelliJ에서 제공해주는 독자적인 빌드 방식"입니다.

 

IntelliJ 빌드 시스템은 IntelliJ의 자체 빌드 메커니즘으로 단순하게 프로젝트의 모든 수정 내용과 종속 파일을 컴파일하는 기능입니다. 여기서 문제는 수정 내용과 종속된 파일만 빌드한다는데 있습니다. 안타깝게도 Maven과 Gradle과 달리 순수하게 빌드를 수행합니다. 그로 인해 아티팩트 생성, 리포지토리 배포, CodeGen과 같은 다른 작업을 수행하지 않습니다.  

 

위와 같은 이유로 인해 대부분의 개발자들은 Maven과 Gradle과 같은 빌드 툴을 사용합니다. 심지어 이 두 툴은 잘 사용한다면 개발자가 직접 지정한 빌드 구성을 설정할 수도 있습니다.

 

 

 

5. References

 

 

 

 

 

 

반응형

+ Recent posts