Maven과 Gradle의 차이

강우엉·2023년 6월 27일
0

study

목록 보기
14/44

공부를 하면서 Maven 과 Gradle의 정의 및 차이점을 모르고 사용하고있는거 같았다. 오늘은 Maven과 Gradle의 정의와 둘의 차이점을 알아보자.

💡 빌드 관리 도구(Build Tool)

MavenGradle은 모두 빌드 관리 도구이다.
빌드 관리 도구란 무엇일까?

📌 빌드

빌드는 소스코드 파일 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 그 결과를 말한다. 우리가 작성한 소스코드, 프로젝트에서 파일 및 자원들을 jvm이나 톰켓같은 was가 인식할 수 있도록 패키징하는 과정 및 결과물을 의미한다.

여기서 was를 간략하게 설명하자면 Web Application Server의 약자로, 웹 어플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소포트웨어 프레임 워크이다.

📌 빌드 관리 도구

빌드 도구란 소프트웨어 개발에 있어서 소스 코드를 실행 가능한 애플리케이션으로 만들어주는 도구를 말한다. 추가적으로 설명하자면 사용되는 여러가지 외부 라이브러리를 자동으로 관리해주는 도구를 의미한다.

빌드 관리 도구는 아래와 같은 작업들을 수행한다

  • 종속성 다운로드 - 전처리(Preprocessing)
  • 소스코드를 바이너리 코드로 컴파일
  • 바이너리 코드를 패키징
  • 테스트 실행
  • 프로덕션 시스템에 배포

대표적인 빌드 관리 도구인 MavenGradle의 차이점을 알아보자.

💡 Maven

📌 Maven의 정의

Maven은 라이프사이클을 관리하는 관리도구이다.
프로젝트 객체모델(Project Object Model)이라는 개념을 바탕으로 프로젝트의 의존성관리, 라이브러리관리, 프로젝트 라이프사이클 관리 기능등을 제공하는 프로젝트 관리 도구이다.

📌 Maven의 특징

  • LifeCycle 관리 도구로, 정해진 LifeCycle에 의하여 작업을 수행하며, 전박전인 프로젝트 관리 기능을 포함하고있다.


clean - validate - compile - test - package - verify - install - site - deploy의 라이프 사이클을 가진다.

  1. clean: 빌드 시 생성되어있었던 파일들을 삭제한다.
  2. validate: 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계이다.
  3. compile: 프로젝트 소스코드를 컴파일하는 단계
  4. test: 단위 테스트를 수행하는 단계. 테스트 실패 시 빌드 실패로 처리하며, 스킵이 가능하다.
  5. package: 실제 컴파일된 소스 코드와 리소스들을 jar.war등의 파일의 배포을 위한 패키지로 만든다.
  6. verify: 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인한다.
  7. site: 프로젝트 문서와 사이트 작성, 생성하는 단계이다.
  8. deploy: 만들어진 package를 원격 저장소에 release하는 단계이다.
  • Maven은 필요한 라이브러리를 pom.xml에 정의한다. 이를 프로젝트 모델링이라고 한다.

    pomProject Object Model의 약자로, 프로젝트 정보, 빌드 환경, pom 연관 정보 등을 담고 있다.

💡 Gradle

📌 Gradle의 정의

Groovy를 기반으로 한 빌드 도구이다. AntMaven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하야 만든 오픈소스로 공개된 빌드 도구이다. 빌드 속도가 Maven에 비해 10~100배 가량 빠르며, Java, C/C++, Python등을 지원한다.

여기서 Groovy란?
JVM위에서 동작하는 동적 타입 프로그래밍 언어이다. JVM에서 동작하지만 소스코드를 컴피알할 필요가 없다. Java와 호환되며, Java class file들을 Groovy class로 사용 가능하다. Java 문법과 유사하여 빌드 처리를 관리할 수 있다.

📌 Gradle의 특징

  • 가독성: 코딩에 의한 간결한 정의가 가능하므로 가독성이 좋다.
  • 재사용에 용이: 설정 주입 방식을 사용하므로 재사용에 용이하다.
  • 구조적인 장점: Build ScriptGroovy 기반의 DSL을 사용하여 코드로서 설정 정보를 구성하므로 구조적인 장점이 있다.
  • 편리함: Gradle 설치 없이 Gradle Wrapper를 이용하여 빌드를 지원한다.
  • 멀티 프로젝트: Gradle은 멀티 프로젝트 빌드를 지원하기 위해 설계된 빌드 관리 도구이다.
  • 지원: Maven을 완전 지원한다.

💡 Maven vs Gradle

둘 중에 어떤것이 좋으냐 단정지어 말할수는 없다.
하지만 Gradle이 시기적으로 늦게 나온만큼 사용성, 성능 등 Maven 보다 뛰어난 스펙을 가지고 있다.

Gradle이 더 우수한 점을 정리해보자.

  1. 스크립트 길이와 가독성 면에서 Gradle이 우세하다.
  2. 빌드와 테스트 실행 결과 Gradle이 더 빠르다.
  3. 의존성이 늘어날수록 스크립트 품질의 차이가 커진다. Maven은 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상솓 받아야하지만, gradle은 설정 주입 방식을 사용하므로 멀티 프로젝트에 적합하다.

위와 같은 이유들로 이제는 Gradle을 안 쓸 이유가없다. 하지만 누군가에게는 익순한 Maven을 두고 Gradle을 새로 배워야하는 점에서 걸림돌이 될 거 같다.

Reference

profile
우엉이의 코딩 성장일기💻

0개의 댓글