미소의 세상

Maven vs Gradle 본문

기타

Maven vs Gradle

짱미소 2022. 10. 11. 14:14

Maven?

Apache Maven은 자바용 프로젝트 관리도구이다.

아파치 앤트를 사용하던 개발자들의 불편함을 해소시키며 부가기능을 추가하여 세상에 등장. 메이븐은 내가 사용할 라이브러리뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해 자동으로 다운로드해준다.

여전히 Maven의 사용률은 Gradle을 앞서고 있으며 구글 트랜드 지수도 Maven이 Gradle을 앞선다.

Maven은 XML 기반의 빌드 처리를 작성한다. 간단한 내용이라면 상관 없지만, 복잡한 내용을 작성하게 되면 XML 기반 의한 묘사는 상당히 어려워 진다.

 

장점

  • 협업의 편리성과, 러닝 커브를 고려했을 때도 역시 Maven을 사용하는 팀이 많다.

Maven 설정 파일

  • setting.xml
    • setting.xml 파일에서 원하는 로컬저장소의 경로를 지정, 변경이 가능하다.
    • 메이븐을 빌드할 때 의존 관계에 있는 라이브러리, 플러그인을 중앙 저장소에서 개발자pc로 다운로드할 때 기본 설정이 'USER_HOME/.m2/repository'이다.
  • pom.xml
    • Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 사용한다. 
    • 의존성 추가를 할 수 있으며 프로젝트에 설정된 라이브러리, 설정 등을 알 수 있다. 

 

Gradle

Gradle은 안드로이드 앱을 만들때 필요한 공식 빌드시스템이기도 하며, JAVA, C/C++, Python등을 지원한다.

지금까지의 빌드툴 (메이크, 엔트, 메이븐)의 장점을 모아서 만든 프로젝트 관리 도구입니다. 엔트와 메이븐의 XML 정적 코딩도 아니며, 메이크와 같은 동적 스크립트 형식이다.

JVM(Java Virtual Machine)언어인 Groovy를 사용하여 자바 문법과 거의 동일하게 사용 가능하다.

Groovy는 Java 가상머신에서 실행되는 스크립트 언어이며, Java와 마찬가지로 소스 코드를 작성하고, Java 가상머신에서 동작하지만, Java와 달리 소스코드를 컴파일 할 필요는 없다.

Groovy는 Java와 호환되기 때문에 Java 클래스 파일을 그대로 Groovy 클래스로 사용할 수 있으며, 문법도 Java와 가까워서 어떤 사람들은 Groovy를 Java의 방언 중 하나라고 생각하는 사람도 있다고 한다. 이런 Groovy를 용하여 빌드 처리를 작성하고, 실행하는 것이 Gradle이다.

 

장점

  • gradle 의 빌드 스크립트는 groovy 라는 언어로 작성해야 하므로 maven 의 xml 에 비하면 친숙하진 않지만 확장성이 뛰어나다.
  • maven 은 프로젝트가 커질수록 빌드 스크립트의 내용이 길어지고 가독성이 떨어지는 반면, gradle 은 훨씬 적은 양의 스크립트로 짧고 간결하게 작성할 수 있다.
  • 멀티 프로젝트에 용이하다
  • maven 의 경우 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속을 받아야 하지만 gradle 은 설정 주입 방식으로 이를 해결한다. 그래서 gradle 은 멀티 프로젝트에 매우 적합하며, 빌드 속도는 다양한 시나리오 상에서 10~100배 가량이 빠르다.

단점

  • 그동안 사용해왔던 Maven과 이제는 익숙해진 XML을 버리고 Gradle과 Groovy문법을 배우는 것은 적지않은 비용이 든다. 협업을 하는 경우, 프로젝트 구성과 빌드만을 위해 모든 팀원이 Groovy 문법을 익여야 한다는 사실은 Gradle를 사용하는데 큰 걸림돌이 된다.

Gradle 설정 파일

  • build.gradle : 메이븐의 pom.xml 과 비슷한 플러그인, 의존성 추가를 위한 파일

Gradle이 Maven보다 좋은 점

  • Gradle이 시기적으로 늦게 나온만큼 사용성, 성능 등 비교적 뛰어난 스펙을 가지고있다.
  • Gradle은 Groovy를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
    • Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버했다.
    • 설정 주입 시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다.

'기타' 카테고리의 다른 글

git 초기 세팅 및 push 까지 해보기  (0) 2022.10.18
Docker 란?  (0) 2022.10.13
MSA(MicroService Architecture) 란?  (0) 2022.10.07
인텔리제이(윈도우) 자주쓰는 단축키  (0) 2022.07.04
프리마커 소개  (0) 2022.05.12
Comments