2022.01.06 TIL

듀듀·2023년 1월 6일
0

[ Maven vs Gradle ]

Maven

프로젝트를 진행할 때 많은 라이브러리들을 활용해서 개발하게 되는데, 그 수가 많아지면 라이브러리를 관리하는 것이 힘들어지는 경우가 생긴다. Maven은 이러한 문제를 해결해 줄 수 있는 도구이다. Maven은 내가 사용할 라이브러리 뿐 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해 자동으로 다운 받아준다.

POM

POMProject Object Model 의 약자로 이름 그대로 Project Object Model의 정보를 담고있는 파일이다. 이 파일에서 주요하게 다루는 기능들은 다음과 같다.

  • 프로젝트 정보 : 프로젝트의 이름, 개발자 목록, 라이센스 등
  • 빌드 설정 : 소스, 리소스, 라이프 사이클별 실행한 플러그인(goal)등 빌드와 관련된 설정
  • 빌드 환경 : 사용자 호나경 별로 달라질 수 있는 프로파일 정보
  • POM 연관 정보 : 의존 프로젝트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등

POMpom.xml 파일을 말하며 Maven의 기능을 이용하기 위해 POM이 사용된다.


Gradle

Gradle이란 기본적으로 빌드 배포 도구(Build Tool)이다.

Maven의 경우 XML로 라이브러리를 정의하고 활용하도록 되어있으나, Gradle의 경우 별도의 빌드스크립트를 통해 사용할 어플리케이션 버전, 라이브러리등의 항목을 설정할 수 있다.

장점으로는 스크립트 언어로 구성되어 있기 때문에, XML과 달리 변수선언, if, else, for 등의 로직이 구현가능하여 간결하게 구성할 수 있다.

  • 라이브러리 관리 : Maven Repository를 동일하게 사용할 수 있어서 설정된 서버를 통해 라이브러리를 다운로드 받아 모두 동일한 의존성을 가진 환경을 수정할 수 있다. 자신이 추가한 라이브러리도 레파지토리 서버에 올릴 수 있다.

  • 프로젝트 관리 : 모든 프로젝트가 일관된 디렉토리 구조를 가지고 빌드 프로세스를 유지하도록 도와준다.

  • 단위 테스트 시 의존성 관리 : junit등을 사용하기 위해서 명시한다.


비교

  • Maven에는 Gradle과 비교문서가 없지만, Gradle에는 비교문서가 있다.

  • Gradle이 시기적으로 늦게 나온만큼 사용성, 성능 등 비교적 뛰어난 스펙을 가지고 있다.

  • Build라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많다.
    - 설정 내용이 길어지고 가독성 떨어짐

    • 의존관계가 복잡한 프로젝트 설정하기에는 부적절
    • 상속구조를 이용한 멀티 모듈 구현
    • 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야함
  • GradleGroovy를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
    - Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버했다.

    • 설정 주입 시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다.
  • GradleMaven보다 최대 100배 빠르다.

  • MavenXML에서 GradleGroovy 문법을 익혀야 한다.

profile
나는 내 의지대로 된다.

0개의 댓글