메이븐(Maven)과 그래들(Gradle)

woonie·2022년 6월 18일
0

스프링을 사용하면서 빌드 관리 도구인 그래들만 사용하였다.
처음 스프링을 학습하면서 자연스럽게 그래들을 사용했고 프로젝트를 생성할때 메이븐 이라는 것도 있구나 정도 봤었고 프로젝트를 진행하면서 열심히 삽질? 구글링을 통해서 많은 사람들이 그래들 뿐만 아니라 메이븐을 사용했다는걸 알았다.

당시 메이븐과 그래들의 차이점이 뭘까? 하고 구글링을 통해 '아 메이븐은 pom.xml파일에 필요한 각종 의존성과 라이브러리 추가,버전 등의 프로젝트 설정 정보를 xml형식으로 나열해서 하나하나 직접 작성하고 설정하는구나' 정도만 알고 별도로 정리하지 않았기에 주말에 일찍 일어나기도 했고 정리를 해보려고한다!

1. 빌드 관리 도구란?

  • 빌드?

    빌드란 소스코드 파일들을 컴퓨터에서 실행할 수 있는 소프트웨어로 변환하는 일련의 과정으로, 컴파일, 테스팅, 배포 등 모든 과정의 집합이다.

  • 빌드 관리 도구?

    소스코드에서 어플리케이션 생성을 하면서 여러가지 여부 라이브러리를 사용하는데, 이 빌드 관리 도구는 사용자가 직접 관리할 필요 없이 필요한 라이브러리들을 자동으로 관리한다.

  • 수행 작업
  1. 종속성 다운로드
  2. 소스코드를 바이너리코드로 컴파일
  3. 바이너리 코드를 패키징
  4. 테스트 실행
  5. 프로덕션 시스템에 배포

2. 메이븐(Maven)

  • 자바용 프로젝트 관리 도구
  • 정해진 Lifecycle에 의하여 작업을 수행하며, 전반적인 프로젝트 관리 기능을 포함
  • Apache Ant의 대안으로 만들어진 Apache 라이선스로 배포되는 오픈 소스 소프트웨어
  • pom.xml을 이용한 정형화된 빌드 시스템
  • Maven은 빌드에 대한 대부분의 책임을 각 플러그인에 위임하고 이러한 플러그인들은 Maven저장소(Repository)에 저장

2-1. Maven의 Lifecycle

  1. Maven에서는 clean, build, site의 세 가지 Lifecycle을 제공하고 있다.
  2. 컴파일(compile), 테스트(test), 패키지(package), 배포(depooy)등의 과정은 build Lifecycle에 속한다.
  3. Maven은 모든 빌드 단위에 대한 Lifecycle이 예약되어 있어서 개발자가 임의로 변경 할 수 없다.
  4. 각 LifeCycle은 순서를 갖는 단계(phase)로 구성된다.
  • clean : 빌드 시 생성되었던 산출물을 삭제
  • default : 프로젝트 배포절차, 패키지 타입별로 다르게 정의됨
  • site : 프로젝트 문서화 절차

단계내용
Default(Build)일반적인 빌드 프로세스를 위한 모델이다.
Clean빌드 시 생성되었던 파일들을 삭제하는 단계
Validate프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계
Compile프로젝트의 소스코드를 컴파일 하는 단계
Test유닛(단위) 테스트를 수행 하는 단계(테스트 실패시 빌드 실패로 처리, 스킵 가능)
Pacakge실제 컴파일된 소스 코드와 리소스들을 jar, war 등등의 파일 등의 배포를 위한 패키지로 만 드는 단계
Verify통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계
Install패키지를 로컬 저장소에 설치하는 단계
Site프로젝트 문서와 사이트 작성, 생성하는 단계
Deploy만들어진 package를 원격 저장소에 release 하는 단계

3. 그래들(Gradle)

  • 오픈소스 기반의 build 자동화 시스템
  • JVM 기반의 빌드도구로 기존의 Ant와 Maven을 보완
  • xml의 구조적인 장점이 있지만 문서의 양 자체가 비대하지는 단점이 있지만 Gradle은 코딩에 의한 간결한 정의가 가능
  • Maven과 Ivy repository를 완전 지원한다.
  • 설정 주입 방식 ( Configuration Injection )
  • 멀티 프로젝트의 빌드를 지원하기 위해 설계된 빌드 관리 도구
  • Groovy 문법 사용
    • JVM에서 사용되는 스크립트 언어로, 문법이 Java와 매우 유사하다. Java와 호환이 되며 Java 클래스 파일을 그대로 Groovy 클래스 파일로 사용 가능.

3-1. Gradle의 Lifecycle

단계내용
Initialization      (초기화)     Gradle은 단일 및 다중 프로젝트 빌드를 지원하며 초기화 단계에서Gradle은 빌드에 참여할 프로젝트를 결정하고 이러한 각 프로젝트에 대한 Project 인스턴스를 생성
Configuration
(구성)
프로젝트 개체가 구성되며 빌드의 일부인 모든 프로젝트의 빌드 스크립트가 실행
Execution
(실행)
Gradle은 실행될 구성 단계에서 생성 및 구성된 작업의 하위 집합을 결정. 하위 집합은 gradle 명령과 현재 디렉터리에 전달된 작업 이름 인수에 의해 결정되며 Gradle은 선택한 각 작업을 실행

결론

흔히들 Gradle이 대세라고 하고 나 또한 그렇게 알고있었다. 하지만 여전히 Maven을 많이들 사용하고 구글 트랜드 지수에서도 Gradle보다 Maven이 앞선다.
그럼에도 Gradel 사용을 고려해야 하는 이유들이 있다.
Gradle이 Maven의 장점을 계승한 점과 시기적으로 늦게 나온 만큼 사용성, 성능 등 비교적 뛰어난 스펙을 가지고 있다. 특히, 속도가 빠르며 Groovy 기반으로 설정이 쉽고, 설정 주입 방식을 사용하여 멀티 프로젝트에 사용하기 좋다.

하지만 메모리를 많이 잡아먹는다는 단점이 있다.

나 또한 프로젝트를 Gradle로 진행하여 Maven의 XML 형식을 지키지 않아도 된다는 점에서 많이 편했고 매력을 느꼈다. 하지만 Maven을 직접 사용해보진 않았기에 기회가 된다면 추후 두가지 모두 사용해보고 내가 직접 느낀 차이점과 편리함에 대해 글을 남겨야겠다.



profile
동료들과 함께하는 개발의 중요성에 관심이 많습니다. 언제나 호기심을 갖고 꾸준히 노력하는 개발자로서 성장하고 있습니다.

0개의 댓글