[기타] Gradle과 Maven에 대하여

대원·2024년 5월 16일

기타

목록 보기
2/5

Gradle과 Maven에 대한 차이

배경

스프링부트 기반 프로젝트를 만들다보면, build tool로 Gradle과 Maven을 선택을 하게된다.

인프런의 강의를 수강하다보면 많은 강사님들이 Build Tool로써 Gradle을 선택하는 것을 종종 보게되는데,
이것은 단순히 선호의 문제인지 아니면 어떤 성능 및 환경에 따른 장단점이 존재하기에 그렇게 셋업이 되는 건지 궁금했다.

Build

Build란 무엇일까?

매일같이 실행하는 스프링부트 기반 프로젝트를 띄우거나 실행할때,
build (파일이름 등..)이 기재되는 것을 볼 수있다.

그렇다면 build는 무엇이라고 말할 수 있을까?

Building means many things to many people, but in general it means starting with source files produced by developers and ending with things like installation packages that are ready for deployment.

출처 : 스택오버플로우

이해에 용이하게 하기 위해선, 다음과 같이 조금 더 구체적 아래와 같은 문장으로 요약할 수 있다.

개발자가 작성한 소스코드를 WAS와 같은 서버(컴퓨터)가 이해할 수 있도록 패키징하는 과정 및 결과를 총체적으로 의미

Build Tool의 기능은 소스코드에서 필요한 라이브러리를 사용자(개발자)가 신경쓰지 않고 자동으로 관리 등을 수행한다.

다음은 Build Tool이 수행하는 목록이다.

  1. 종속성 다운로드 - 전처리(Preprocessing)
  2. 소스코드를 바이너리 코드로 컴파일(Compile)
  3. 바이너리 코드를 패키징(Packaging)
  4. 테스트 실행(Testing)
  5. 프로덕션 시스템에 배포(distribution)

직관적으로, 그리고 좀 러프하게 이해해보자면

말그대로 서버가 실행될수 있게끔 알파부터 오메가까지 모든 과정에 대해서 관리를 수행하는 주체가 Build Tool이라고 할 수 있겠다.

(위의 순서에서 알 수 있지만, Build란 컴파일 등을 포함하는 정말 총체적인 과정이다.)

Maven

특징

  • pom.xml을 기반으로 정형화(정적)된 Build를 수행.

  • 파일 형식이름에서 알 수 있듯이 xml 기반이다.
    (JSON 이전에 많이 사용되었다는 그 데이터형식, 정처기에서 많이 보았던 해당 단어가 맞다. 벌써부터 레거시(?)의 향이 나지 않는가?)

  • 설정내용이 길어지고 가독성이 떨어짐

  • 의존관계가 복잡한 프로젝트 설정에는 부적절

Gradle

특징

  • Maven에 비해 Build 속도가 최대 100배 빠름

Gradler과 Maven의 성능 향상 비교

  • 그루비 문법 사용

    • 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다
  • 멀티 프로젝트에 이점이 있다.

    • 상속을 통해 멀티모듈구현
      (하위모듈에서 상위모듈의 의존성을 추가하면, 마치 자바에서 상속받듯이 상위모듈의 의존성을 추가할 수 있다.)
    • 프로젝트 별 의존성 주입을 달리할 수 있음.
    • (멀티모듈 등의 프로젝트를 만들면, Gradle 사용시에 Implementation을 달리할 수 있다.
      Maven사용경험은 없어서 잘 모르지만, 아마 맥락 상 불가하거나 어려운 것으로 파악된다.)
  • 가독성이 좋다.

차이

위의 장점에서 보다시피, Gradle은 가독성, 속도, 멀티 프로젝트 환경 등에 강점을 지니고 있다.

가독성(xml파일은 개인적으로 참 읽기 힘든 것 같다.)과 속도(객관적 통계로 증명가능한 결과물)는 말할 것도 없지만, 멀티모듈을 통한 분산환경이 각광을 받는 요즘같은 분위기에서는 당연히 빌드툴로 Gradle이 인기가 많을 수 밖에 없겠다.

결론

참고 목록에 있는 글 중 17년도의 포스팅되 블로그 글이 있는데, 이때만하더라도 Maven이 어떤 주류였던 것 같다.

현업개발자가 아니라 실무의 레거시 등을 다뤄본 경험이 없는 본인의 경우엔 대부분의 지식과 경험이 제한적인지라
강의 혹은 책을 통해서 간접적으로 경험을 취득하는데, Build Tool로써 Maven을 사용해 본적은 없다.

(있다 하더라도 인도아저씨가 강의하는 유데미 강의였다. 근데 왜 도대체 위의 많은 장점에도 Maven을 사용했을까? )

GPT가 나타나고 생태계가 많은 변화가 생기는 것처럼, 언젠가 시간이 지나면 Gradle 역시 레거시가 될 수도 있겠다만,
지금으로선 Gradle을 잘 배워두고 익숙하게 사용하는 것이 제일 중요할 것 같다.

참고
https://gradle.org/maven-vs-gradle/
https://bkim.tistory.com/13

profile
고민하고 공부하는 사람

0개의 댓글