Maven과 Gradle라 하면은 Java 대표적인 빌드관리툴이다.
이번포스팅에서는 두 개의 빌드 관리 도구의 차이점을 알아보겠다.
빌드 관리 도구
먼저 빌드 관리 도구가 무엇인지? 알아야 한다.
1. 프로젝트에서 필요한 xml, properties, jar 파일들을 자동으로 인식하여 빌드해 주는 도구다.
2. 소스 코드를 컴파일, 테스트, 정적분석 등을 하여 실행가능한 앱으로 빌드를 해준다.
3. 프로젝트 정보 관리, 테스트 빌드, 배포 등의 작업을 진행해 준다.
4. 외부라이브러리를 참조하여 자동으로 다운로드 및 업데이트의 관리를 해준다.
Java의 대표적인 빌드 도구에는 : Ant, Maven, Gradle 등이 있다.
예전에는 필요한 라이브러리가 있다면 직접 다운을 받아서 추가를 했고
버전업이 됐는지 안 됐는지도 확인하는 번거로운 작업을 했지만
빌드관리 도구를 통해 많이 편리해졌다.
메이븐 (Maven) 이란?
Maven은 아파치 라이선스로 배포되는 오픈 소스 소프트웨어이다
자바의 대표적인 관리 도구였던 Ant를 대체하기 위해 개발됐다.
프로젝트의 외부 라이브러리를 쉽게 참조할 수 있게 pom.xml파일로 명시하여 관리하며
참조한 외부 라이브러리에 연관된 다른 라이브러리도 자동으로 관리가 된다.
그렇다면 어떤 점 때문에 Ant를 대체할 수 있었을까?
기존에 사용하던 Ant 빌드의 기능만 가지고 있으며 그 외에 기능들은 전부 수동으로 개발자가 관리했다.
하지만 Maven은 자동으로 라이브러리를 관리해 주는 기능이 추가됐다.
다운로드하여 사용하던 라이브러리에 변동 사항이 있으면 자동으로 업데이트하여 적용시켜 준다.
각각의 특징을 나열하자면
Ant
1. XML 기반의 빌드 스크립트
2. 자유로운 빌드 단위 지정
3. 간단하고 사용하기 쉬움
4. 대규모 프로젝트에서 복잡해지는 경향이 있음
5. 라이프 사이클 없음
Maven
1. XML 기반의 빌드 스크립트
2. 라이프 사이클 도입
3. pom.xml로 편하게 Dependency 관리
이러한 차이점들이 있다.
두 개의 특징을 보다 보면 라이프 사이클이라는 단어가 보인다. 라이프사이클이란 뭘까?
라이프 사이클 (LifeCycle)
간단하게 말해보자면 빌드를 하기 위해서는 메이븐 같은 경우는 커멘드를 이용하여
메이븐이 가지고 있는 라이프사이클들 통해서 클린을 하고 인스톨을 하거나
단계들을 밝아나가는 사이클을 관리할 수 있는데
그에 반해 Ant는 빌드만을 위한 스크립트를 작성한다
그래서 다른 라이프사이클을 관리하기 어렵다 그렇기 때문에 개발자들이 손수 빌드사이클을 관리해 주었다.
하지만 Maven은 라이프사이클이 도입돼서 빌드순서를 정의를 할 수가 있게 되었고,
빌드를 하기 위한 단계들을 Maven에서 편하게 관리가 가능해졌다.
라이프 사이클에 대한 자세한 내용은 다른 포스팅에 작성해 둔 라이프사이클 블로그 링크를 올려주겠다.
한 번은 읽어보면 Maven을 이해하는데 큰 도움이 될 것이다.
Maven 의 이해 plugin, phase, goal, LifeCycle
이번 포스팅은 Maven에 특징인 LifeCycle에 대해 공부한 내용을 작성해 보겠다. 라이프 사이클 (LifeCycle) 먼저 메이븐을 이해하기 위해서는 Plugin, Phase, Goal, LifeCycle을 이해해야 한다. 위 네 가지가 기
inhoru126.tistory.com
그래들 (Gradle) 이란?
Groovy 스크립트를 활용한 빌드 관리 도구이다. Maven과 같은 구조화된 build 프레임 워크이다.
안드로이드 프로젝트의 표준 빌드 시스템으로 채택되었고, 멀티 프로젝트의 빌드에 최적화 하여 설계됐다.
거의 모든 타입의 소프트웨어를 빌드할 수 있는 유연함을 가진다.
Build script를 xml이 아닌 Groovy 기반의 DSL(Domain Specific Language)를 사용한다.
특징
1. Ant, Maven 같은 기존의 빌드 툴은 xml 형식을 이용하여 정적인 설정 정보를 구성했다.
하지만 Gradle은 Groovy라는 언어를 이용하여 코드로서 설정 정보를 구성하기 때문에 구조적인 장점이 있다.
3. xml의 구조적인 틀을 벗어나 코딩에 의한 간결한 정의가 가능하다.
4. 프로젝트를 설정 주입 방식으로 정의하기 때문에 maven의 상속구조보다 재사용에 용이하다.
Groovy?
Groovy는 Java 가상 머신에서 실행되는 스크립트 언어다.
Java 가상 머신에서 동작하지만, Java와는 달리 소스 코드를 컴파일 할 필요는 없다.
Groovy는 스크립트 언어이고, 소스 코드를 그대로 실행한다.
또한 Java와 호환되고, Java 클래스 파일을 그대로 Groovy 클래스로 사용할 수 있다.
그래서 차이점이 뭐야?
1. maven은 프로젝트가 커질수록 빌드 스크립트의 내용이 길어지고 가독성이 떨어진다.
반면에 gradle은 훨씬 적은 양의 스크립트로 짧고 간결하게 작성할 수 있습니다.
2. maven의 경우 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속을 받아야 하지만,
gradle은 설정 주입 방식을 사용하기 때문에 멀티 프로젝트에 매우 적합하다.
3. maven은 gradle에비해 성능이 떨어진다(약 100배 정도 차이난다 한다)
4. maven은 설치를해야하지만 Gradle은 설치 없이 사용할 수 있다.
📚 Reference
01 Gradle 이란
## 1. Gradle 이란? Gradle 이란 오픈소스 빌드 도구이다. ## 2. 특징 1) ant 처럼 매우 유연한 범용 빌드 도구 2) Maven과 같은 구…
wikidocs.net
https://docs.gradle.org/current/userguide/more_about_tasks.html
Authoring Tasks
There are several ways you can define the dependencies of a task. In Task dependencies you were introduced to defining dependencies using task names. Task names can refer to tasks in the same project as the task, or to tasks in other projects. To refer to
docs.gradle.org
https://dev-coco.tistory.com/65
메이븐(Maven)과 그래들(Gradle)의 개념 및 비교
스프링과 스프링부트를 공부 하려던 중 maven과 gradle을 알게되었습니다. maven과 gradle이 빌드관리도구인 것은 알고있지만 자세한 개념은 모르기에 maven과 gradle 각각의 개념과 정확한 차이점을 알
dev-coco.tistory.com
'개발 > spring_boot' 카테고리의 다른 글
Spring Boot 에서 DataBase(MySQL) 사용 (0) | 2024.02.29 |
---|---|
@SpringBootApplication 란? (0) | 2023.07.21 |