Introduction
프로그래밍을 하면서, 정확히는 Spring Framework 로 백엔드 개발을 하면서 Maven 과 Gradle 을 둘 다 사용해 보았고, 그저 빌드를 해주고, 의존성을 편하게 관리할 수 있게 해주는 정도의 지식만을 가지고 있었습니다. 두 개의 차이점은 무엇이며, Maven 과 Gradle 에 대해 기능과 특징 및 차이점을 정리하려고 합니다.
Maven
Maven 의 뜻은 지식의 축적을 의미하는 이디시어 단어이며, Maven 이 생기기 전의 프로젝트들은 각각 다른 Ant Build File들로 관리 되고 있었고, 표준화 되어 있지 않았습니다. 이러한 문제를 해결하고, 프로젝트를 구축하는 표준 방법, 프로젝트가 어떤 것으로 구성 되어 있는지에 대한 명확한 정의, 프로젝트 정보를 게시하는 쉬운 방법, 여러 프로젝트 간에 JAR을 공유하는 방법을 위해 Java 기반의 프로젝트에 사용하는 Maven 이 탄생 하였고, Java 개발자의 일상적인 작업을 좀 더 쉽게 만들어주고, Java 프로젝트에 대한 이해를 도울 수 있게 되었습니다.
ㅁ 이디시어 단어란 ?
아슈케나즈 유대인이 사용했던 서게르만어군 언어
ㅁ Ant 란 ?
아파치 앤트는 자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구
Maven 이란 ?
1. 빌드 프로세스 간편화
Maven 은 빌드 프로세스를 간소화하고, 쉽게 만들어서 개발자가 세밀한 정보를 알지 못하더라도 무리 없이 사용할 수 있습니다.
2. 균일한 빌드 시스템
Maven 은 프로젝트 개체 모델 (POM) 과 플러그인 세트를 사용해 프로젝트를 빌드하고, 하나의 Maven 프로젝트에 익숙해지면 다른 Maven 프로젝트가 어떻게 빌드 되었는지 알 수 있으며, 프로젝트 탐색 시간을 줄여줍니다.
3. 양질의 프로젝트 정보 제공
프로젝트 소스에서 생성된 유용한 프로젝트 정보를 제공합니다.
- 소스 제어에서 직접 생성된 변경로그
- 상호 참조 소스
- 프로젝트에서 관리하는 메일링 리스트
- 프로젝트에서 사용하는 의존성
- 적용 범위를 포함한 단위 테스트 보고서
4. 개발 가이드 라인 제공
Maven은 모범 사례 개발을 위한 현재 원칙을 수집하고 해당 방향으로 프로젝트를 쉽게 안내할 수 있도록 하는 것을 목표로 합니다. 예를 들어 단위 테스트의 사양, 실행 및 보고는 Maven을 사용하는 일반 빌드 주기의 일부이며, 현재 단위 테스트 모범 사례가 지침으로 사용되고 있습니다.
출처 (https://maven.apache.org/what-is-maven.html)
특징
1. LifeCycle
정해진 LifeCycle에 의하여 작업을 수행하고, 전반적인 프로젝트 관리 기능을 수행합니다.
clean - validate - compile - test - package - verify - install - site - deploy 의 LifeCycle 을 가집니다.
1. clean : 빌드 할 때 생성 했던 파일들을 전부 지운다.
2. validate : 프로젝트가 올바른지 확인하고, 필요한 모든 정보를 사용할 수 있는지 검사한다.
3. compile : 프로젝트 소스코드를 컴파일 한다. ( .java - > .class)
4. test : 단위 테스트를 수행하고, 실패할 경우 빌드 실패로 처리한다. 설정으로 스킵이 가능하다.
5. package : 프로젝트를 배포하기 위해 컴파일 된 소스코드, 리소스 등이 포함된 jar 나 war 로 패키징 처리한다.
6. verify : 통합 테스트 결과를 검사하고, 충족하는지 확인한다.
7. site : 프로젝트 문서화 절차를 진행한다.
8. deploy : 패키지를 원격 저장소에 배포한다.
2. POM (Project Obejct Model)
프로젝트 root 의 존재하는 파일로써, 프로젝트의 정보, 빌드 설정 및 환경, 의존성 모듈 및 버전 등등
프로젝트의 모든 설정 및 의존성 등을 한 눈에 확인할 수 있습니다.
Gradle
Gradle은 거의 모든 유형의 소프트웨어를 빌드 할 수 있을 만큼의 유연한 빌드 자동화 도구이며, 빌드하려는 항목 또는 빌드 방법에 대해 거의 가정하지 않기 때문에 유연함을 극대화 할 수 있습니다. 그루비 언어를 사용하고, 과거 세대의 빌드 도구인 Ant 와 Maven 의 장점은 살리고, 단점은 보완한 오픈 소스 빌드 도구입니다.
Gradle 이란 ?
1. 고성능
Gradle은 입력 또는 출력이 변경되어 작업을 수행해야 하는 작업만 실행하기 때문에 불필요한 작업을 방지합니다.
2. JVM 기반
Gradle은 JVM에서 실행됩니다. Java 표준 API를 사용할 수 있기 때문에 Java에게 익숙한 사람에겐 추가적인 요인이 되고, 또한 다양한 플랫폼에서 Gradle을 쉽게 실행할 수 있습니다.
3. 컨벤션
Gradle 은 규칙을 통해 일반적인 프로젝트를 쉽게 빌드 할 수 있습니다. 그러나 이러한 규칙은 사용자를 제한하지 않습니다. 빌드에서 설정을 구성하고, 고유한 작업을 추가해 더 많은 사용자지정 설정을 할 수 있습니다.
출처(https://docs.gradle.org/current/userguide/what_is_gradle.html)
특징
1. LifeCycle
Gradle 은 Init - configure - exec 의 LifeCycle 을 갖습니다.
1. init : setting.gradle 파일을 실행합니다.
2. configure : build.gradle 에 있는 모든 내용을 실행한다. ( task.doFirst, task.doLast 등을 제외 -> task scan )
3. exec : 사용자가 지정한 매개변수로 넘긴 task 명으로 task 들을 수행한다.
2. 마이그레이션 기능 제공
Maven 의 pom.xml 이나 다른 빌드 도구들을 Gradle 로 migration 할 수 있는 편의기능을 제공합니다.
3. 빌드 스크립트 안에서 동적인 프로그래밍 가능
Gradle 의 최소 작업단위는 task이며, 모든 프로젝트는 하나 이상의 task를 갖습니다. task에게 작업을 할당해 빌드와 함께 폴더나 파일을 생성하는 것이 가능하며, 특정 의존성의 개체를 활용해 task 내에서의 생성할 파일의 값을 할당하는 등의 동적인 빌드 프로그래밍이 가능합니다.
4. 빌드 캐시를 이용한 높은 빌드 속도
프로젝트 규모가 커지게 된다면 빌드 속도에 따라서 개발 생산성에 영향을 줄 수 있습니다. Gradle은 Build 를 캐시처리하며, 변경 내용을 확인 후 추가적인 빌드를 처리합니다. 그렇기 때문에 빠른 속도로 빌드가 가능합니다.
5. Gradle Build File Directory 구조
Gradle vs Maven (차이점)
Maven 은 xml 를 사용하고, Gradle 은 Groovy 언어를 사용합니다. 그렇기 때문에 가독성에서부터 큰 차이를 보입니다. 또 빌드라는 복잡한 동적인 요소를 xml 파일로 정의하기에는 상당히 어려운 부분이 많이 있습니다. Groovy 언어 같은 경우 동적인 작업들을 스크립트로 직접 작성이 가능하고, 설정을 주입할 경우 빌드 되기 전에 설정 값에 접근이 가능하기 때문에 모듈이나 프로젝트 별로 설정을 다양하게 처리할 수 있습니다. 또한 상속 구조를 통한 멀티모듈 구현이 가능하고, 빌드 캐시 기능의 차이로 Maven 과 Gradle의 속도차이는 100배까지 벌어질 수 있습니다.
마치며...
지금 당장은 익숙하다라는 점 하나로 Maven 을 사용한 것 외에는 Gradle 를 사용하지 않을 이유는 없는 것 같습니다. 또 다양한 플랫폼에서 지원이 되기 때문에 Gradle 에 익숙해지고, 잘사용하게 된다면 범용성이 크기 때문에 개발 생산성에도 영향을 줄 수 있다고 생각합니다.
'개발 > 개발지식' 카테고리의 다른 글
DNS(Domain Name System) (0) | 2023.04.17 |
---|---|
HTTP 특징 및 문제점 그리고 HTTP 2.0 특징 및 개선점 (0) | 2023.04.01 |
Cookie 보안 설정 및 사용 방법 (0) | 2023.03.28 |