본문 바로가기

Development/Spring

[Spring] 빌드 관리 도구,Gradle과 Maven

이미지 출처: https://stackify.com/gradle-vs-maven/

빌드 관리 도구

빌드 관리 도구는 소스 코드에서 실행 가능한 애플리케이션을 자동으로 생성하는 데 도움을 주는 프로그램입니다.

이름에서 알 수 있듯이, 이는 다양한 작업을 개발하거나 스크립팅하는 데 중요합니다.

빌드 관리 도구는 다음과 같은 프로세스에 필요합니다.

 

  • 빌드 툴은 임의의 명령을 실행합니다: 각 배포 시나리오는 독특하며, 각자가 파일을 다른 폴더로 복사하거나, 다른 형식으로 압축하거나, 다른 방식으로 정리해야 할 필요가 있습니다.
  • 한 명령의 결과를 다른 명령에 적용합니다: 빌드는 거의 항상 여러 단계의 과정입니다.
  • 소스 코드에서 문서를 생성합니다 .
  • 소스 코드를 컴파일합니다
  • 수집된 코드를 JAR 파일로 패키징합니다
  • 패키지된 코드를 로컬/중앙 리포지토리 또는 서버에 설치합니다.

빌드 관리 도구에는 Maven과 Gradle이 있습니다.

Maven

Apache Maven은 앱 개발의 전체 과정을 자동화하고 Java 개발자들의 일을 쉽게 만들어줍니다. Maven은 Apache Group이 설계한 유명한 오픈 소스 빌드 도구로, 여러 프로젝트를 한 번에 개발하고, 배포하고, 출시하는 데 사용됩니다. 이 빌드 도구는 Project Object Model(POM)에 기반을 두고 있으며, 빌드 과정을 더욱 간소화하고 표준화하는 데 중점을 둡니다. 이 Maven은 또한 코드를 설계하고 의존성을 다운로드하는 데 도움이 됩니다. Maven을 사용하기 시작하면, 의존성을 다운로드할 필요가 더 이상 없습니다.

 

Maven은 Apache Ant에 다음과 같은 특성을 포함합니다.

 

  • 저장소 관리: 이는 빌드에 필요한 jar를 저장하는 위치입니다. 세 가지 유형의 저장소가 있습니다: 중앙, 로컬, 원격. 첫 번째는 빌드가 실행되는 기계에 위치하고 있고, 다른 두 가지는 HTTP를 통해 원격으로 얻어집니다. Maven은 먼저 로컬 저장소에서 jar를 검색하는 데 집중합니다. 찾을 수 없다면 원격으로 찾아서 로컬로 다운로드하여 미래의 빌드를 가속화합니다.
  • 의존성 관리: 이는 프로젝트가 구축을 위해 필요로 하는 jar의 선언입니다.
  • Maven을 사용하기로 결정한 후에는 다음 세 가지를 고려해야 합니다:
  • Java에서 Maven을 설정하려면, pom.xml 파일에 위치한 Project Object Model(POM)을 사용합니다.
  • 모든 Maven 관련 설정은 POM에 위치해 있습니다. pom.xml 파일의 태그에서 플러그인을 설정하고 편집할 수 있습니다.
  • Maven은 설정에 대한 기본 설정을 제공하는데, 이는 모든 설정을 pom.xml 파일에 포함할 필요가 없음을 의미합니다.

Maven의 주요 기능은 다음과 같습니다:

  • 모델 기반 빌드 - Maven은 다양한 프로젝트를 war, 메타데이터, jar와 같은 미리 정의된 출력 유형으로 개발할 수 있습니다.
  • 프로젝트 정보의 명확한 사이트 - 빌드 과정에서 사용하는 동일한 메타데이터를 사용하여, Maven은 전체 문서를 포함하는 웹사이트와 PDF를 생성할 수 있습니다.
  • 릴리즈 관리 및 배포 출판 - 추가 설정 없이, Maven은 CVS(Concurrent Versions System)와 같은 소스 제어 시스템과 결합하고 프로젝트의 릴리즈를 관리합니다.
  • 후진 호환성 - 프로젝트의 다양한 모듈을 쉽게 이전 버전에서 최신 버전의 Maven으로 포팅할 수 있습니다. 또한 이전 버전을 지원합니다.
  • 자동 부모 버전 관리 - 하위 모듈에서 부모를 지정할 필요가 없습니다.
  • 병렬 빌드 - 프로젝트 의존성 그래프를 분석하고 모듈을 병렬로 설계할 수 있게 해줍니다. 이를 통해 성능 향상을 20-50% 얻을 수 있습니다.
  • 개선된 오류 및 무결성 보고 - Maven은 오류 보고를 개선하고, 링크를 제공하여 Maven 위키 페이지로 이동할 수 있게 해줍니다. 여기에서 오류에 대한 자세한 설명을 볼 수 있습니다.
  • 강화된 오류 및 무결성 보고: 상세 설명 링크와 함께 개선된 오류 보고 제공

Gradle

Gradle은 안드로이드, C/C++, Java, Scala, Groovy 등의 언어에서 빌드 자동화를 수행할 수 있는 능력으로 인해 많은 사람들이 찾습니다. 이 도구는 XML 대신에 Groovy 기반 도메인 특정 언어를 지원합니다. Gradle은 다양한 플랫폼에서 소프트웨어를 개발, 테스트, 배포할 수 있게 해줍니다.

 

다음은 Gradle을 사용하는 주요 이유입니다:

  • Gradle은 ANT와 Maven과 같은 다른 빌드 도구에서 발생하는 모든 문제를 해결합니다.
  • 이 도구는 성능, 사용성, 유지보수성, 유연성, 소프트웨어의 확장성에 중점을 둡니다.
  • Gradle은 다양한 기술을 다루는 여러 프로젝트에 대해 사용자 정의 가능하기 때문에 인기가 있습니다. 우리는 안드로이드 프로젝트, Groovy 프로젝트, Java 프로젝트 등에서 Gradle을 여러 가지 방식으로 사용할 수 있습니다.
  • Gradle은 고속성을 제공하는 것으로 잘 알려져 있으며, 대략 Maven의 두 배 정도의 속도를 낼 수 있습니다.

Gradle의 주요 기능은 다음과 같습니다:

  • Gradle은 입력이나 출력이 변경된 작업만 실행하여 불필요한 작업을 피합니다. 이전 실행 또는 별도의 기계(공유 빌드 캐시가 있는 경우)에서 작업 출력을 재사용하도록 개발된 캐시도 사용할 수 있습니다.
  • Gradle은 JVM에서 작동하며, 이를 사용하려면 Java Development Kit(JDK)가 설치되어 있어야 합니다. 이는 Java 플랫폼에 익숙한 사용자에게는 편할 수 있는데, 사용자 정의 작업 유형과 플러그인 등의 빌드 로직에서 일반적인 Java API를 사용할 수 있기 때문입니다.
  • 또한 Gradle을 여러 플랫폼에서 쉽게 실행할 수 있도록 합니다. Gradle은 JVM 프로젝트만 빌드하는 데 국한되지 않으며, 네이티브 프로젝트 개발 지원이 포함되어 있습니다.
  • 빌드 스캔은 빌드 실행에 대한 포괄적인 정보를 제공하여 빌드 문제를 식별하는 데 사용할 수 있습니다. 이는 특히 빌드 성능 문제를 인식하는 데 도움이 됩니다. 또한 빌드 스캔을 다른 사람과 공유할 수도 있습니다. 이는 빌드 문제를 해결하는 데 도움이 필요한 경우 유용합니다.

Gradle과 Maven의 장단점

Gradle의 장점

  • 범용 빌드 도구: Gradle은 어떤 종류든 애플리케이션을 빌드할 수 있도록 설계되었습니다. 
  • 고도의 커스터마이징 가능: Gradle은 다양한 기술에 맞게 맞춤화될 수 있습니다.
  • 성능: Gradle은 성능 면에서 매우 빠르고 효율적으로 작동합니다. 모든 경우에 Gradle은 Maven의 두 배 정도의 속도를 내며, 빌드 캐시의 수백 배의 속도를 냅니다.
  • 유연성: Gradle은 유연한 도구입니다. Kotlin, Scala, Java, Groovy 등의 프로그래밍 언어에서 플러그인을 개발할 수 있는 도구로 사용됩니다.
  • 사용자 경험: 다양한 IDE를 제공하여 사용자 경험을 향상시킵니다.

Gradle의 단점

  • 기술적 전문성: Gradle로 작업을 빌드하려면 기술적 기술이 필요합니다.
  • Gradle은 통합된 ant 프로젝트 구조를 가지고 있지 않습니다. 우리가 어떤 빌드 구조든 우리의 프로젝트에 사용할 수 있기 때문에, 새로운 프로그래머들은 프로젝트 구조와 빌드 스크립트를 이해하는 데 어려움을 겪습니다.
  • XML을 사용하여 스크립트를 초안하고 빌드해야 합니다. 복잡한 프로젝트를 자동화하려는 경우, XML 파일에 많은 로직을 작성해야 합니다.
  • 이해도: Gradle 문서는 꽤 광범위합니다. 이전에 용어 지식이 필요합니다.

Maven의 장점

  • 프로젝트 관리에서 빌드, 문서화, 출판, 배송 등 모든 프로세스를 관리하는 데 도움을 줍니다
  • 프로젝트 빌드 과정을 간소화합니다
  • 프로젝트의 성능과 빌드 과정을 향상시킵니다
  • Maven은 Jar 파일과 기타 의존성을 자동으로 다운로드하는 작업을 수행합니다.
  • 모든 필수 정보에 쉽게 접근할 수 있습니다
  • 의존성, 프로세스 등에 대해 걱정하지 않고 다양한 환경에서 프로젝트를 개발하는 것을 프로그래머에게 간단하게 만들어줍니다.
  • Maven에서는 POM 파일에 의존성 코드를 작성함으로써 쉽게 새로운 의존성을 포함시킬 수 있습니다.

Maven의 단점

  • Maven은 작업 시스템에 설치되어야 하며, IDE에는 Maven 플러그인이 필요합니다
  • 기존 의존성에 대한 Maven 코드를 찾을 수 없는 경우, Maven 자체를 사용하여 해당 의존성을 구현할 수 없습니다
  • Maven은 프로젝트를 실행하는 데 있어서도 상당히 느립니다.

참고 자료

https://stackify.com/gradle-vs-maven/