본문 바로가기

BackEnd/Spring

[Spring] Gradle과 Maven의 차이점 및 트렌드

안녕하세요 인포돈 입니다.


 

 Spring을 처음 접하면 빌드 도구를 grdle 또는 maven을 선택하여 프로젝트를 실행하게 된다. 이때 그러면 도대체 gradle은 무엇이고 maven은 무엇인가? 또한 빌드 도구는 무엇인가? 하는 의문이 들어 포스팅을 하게 되었다.

 빌드 도구는 무엇이고 gradle과 maven의 차이를 알아보자


빌드 도구란?

 빌드 도구를 알기 전에 우리가 작성하는 코드가 어떻게 작동되는지 이해를 해야 한다. 우리가 일반적으로 c언어, java와 같은 언어로 프로그래밍을 하게 됩니다. 그러나 이런 코드들은 컴퓨터들은 알아듣지 못하죠. 컴퓨터는 0과 1만을 이해하고 인식하기 때문이죠. 그래서 우리는 이러한 코드들을 컴퓨터가 알아볼 수 있게 변환해 주어야 합니다. 그런데 우리는 그러한 변환을 한 번도 다루어본 적이 없습니다. 이러한 변환을 자동으로 도와주는 도구가 바로 빌드 도구를 가리키게 되죠.

 

 한 줄로 표현하자면 빌드 도구는 소스코드 파일들을 컴퓨터에서 실행할 수 있는 소프트웨어로 변환하는 일련의 과정을 도와주는 도구입니다.

 

 

 * 여담으로 이러한 빌드를 하는 방식은 크게 3가지로 Compile, Interpreted, Hybrid가 있다.


Gradle이란?

 Gradle은 기존은 사용되던 빌드 도구인 Ant와 Groovy를 기반으로 작동되는 빌드 두고이다. 여기서 Gradle은 Maven과 같이 라이브러리를 자동으로 추가해주고 관리해주며, 버전을 자동으로 동기화해주는 기능이 있으며, Maven과의 차이점은 바로 Groovy를 활용한 관리이다. Maven의 경우 xml로 라이브러리를 정의하고 활용하지만 Gradle의 경우 빌드 스크립트를 사용해 라이브러리를 정의하고 활용한다. 이때 빌드 스크립트를 쓰게 되면 xml과 달리 변수 선언, if, for 등 로직이 구현 가능하기 때문에 더욱 효율적이게 구성할 수 있다.

 

 * 스크립트 언어는 소스 코드를 컴파일하지 않고도 실행할 수 있는 프로그래밍 언어를 의미한다. (번역 과정을 거쳐야 한다.)


Maven이란?

 Maven은 기존에 사용되던 빌드 도구인 Ant의 대안으로 java에서 사용되는 빌드 도구이다. 여기서 기존 Ant와 다른 가장 큰 차이점은 바로 라이브러리를 자동으로 추가해주고 관리해주며, 버전을 자동으로 동기화해주는 기능이 추가되었습니다.

 

 이전 Ant의 경우 라이브러리를 관리하고 버전을 동기화하기 위해서 일일이 일정 폴더에 관리하고 보관을 해야 했어야 했죠. 그러한 단점을 보완하여 나온 게 바로 Maven!!

 

 보통 Maven은 JDK를 설치할 때 같이 설치가 된다. 


gradle과 maven의 차이

 

사실 두 빌드 도구 모두 라이브러리를 관리해주는 훌륭한 도구이지만 가장 중요한 차이점이 있다 바로 속도이다. 결과론 적으로 Gradle이 Maven 보다 빠른 속도를 자랑하며 관리해야 할 라이브러리가 많아질수록 그 속도 차이는 더욱더 커지게 된다.

 

 이러한 속도 차이를 내는 것은 이전에 말한 라이브러리의 관리를 xml로 하느냐 스크립트로 하느냐의 차이에서 발생한다.  이러한 속도 차이는 상속에서 주로 생기게 된다. xml의 경우 특정 설정을 소수 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속해야 하지만 Gradle의 경우 플러그인을 호출하거나 직접 코드를 짜서 적용하는 Configuration Injection 방식을 활용하여 공통 모듈을 상속해서 사용하는 단점을 커버할 수 있다. 

 

 결과론 적으로 현재 시점에서 많은 사람들이 Maven 보다는 Gradle을 선호하고 현업의 종사하는 대부분의 사람들이 Gradle로 갈아타고 사용하는 중이다.!!