본문 바로가기
🍃 Language/Kotiln

[Kotlin]🐘빌드도구(Build Tool), Gradle과 Maven 차이점

by 카프리썬_ 2022. 1. 30.
728x90
728x90

파이썬 개발만 해왔던 내가 코틀린으로 스프링부트 프로젝트를 공부하면서 '빌드도구'의 개념이 가장 낯설었다.

그래서 Gradle과 Maven과 같은 빌드도구를 알아보려고 한다. 

빌드도구란?

빌드 자동화를 수행해주는 도구.

즉, 소스코드를 실행가능한 프로그램으로 만드는 과정(빌드)을 자동화 해주는 툴이라고 보면 된다. 

 

기본적으로 빌드(build)란,

코드를 컴파일해서 binary code로 만들고, 패키징하고 코드를 테스트해서 이제 실행가능한 프로그램으로 만들기까지 과정인데

이걸 빌드도구가 자동화해주는 것이다. 

 

왜 빌드도구가 필요한가?

우선 빌드하기까지 과정을 살펴보면 아래와 같다.

  • 종속성 다운로드 
  • 소스코드-> binary code 컴파일
  •  binary code 패키징
  • 테스트실행
  • 시스템배포

이러한 빌드프로세스를 직접 무엇을 어떤 순서로 어떤 의존성이 있는지 직접 추적해서 적용하기엔 번거로워서 빌드도구가 있다. 

 

빌드도구 역사

대표적인 빌드도구는 Maven과 Gradle이 있다.

그런데 빌드도구의 히스토리를 찾아보니까 다 한번쯤 들어봤다.. 생각보다 나 개발고인물일지도? 

  • 1세대 : Make - 빌드 초창기 개념
  • 2세대 : Ant - 빌드의 범용성을 높이고, java,xml에 도입
  • 3세대 : Maven - Ant에서 작성효율을 높인 빌드(XML언어기반)
  • 4세대 : Grade - Maven보다 빠르며 스크립트언어기반 빌드 

최근까지도 Maven을 쓰는것 같지만 그래도 가장 최신인 Gradle이 가장 익숙하다. 

 

Maven vs Gradle

그래도 아직까지 spring 프로젝트를 시작하려고 하면 Maven과 Gradle을 선택할수 있게 되어있다. 

그래서 나는 처음에 뭣도모르고 Maven기반으로 시작했다가 복잡한 xml 설정때문에 Gradle로 갈아탔다...

 

Gradle을  쓰는 이유

속도가 빠르다. 

Gradle에서 직접 제공하는 Gradle과 Maven의 비교문서에 따르면 Gradle은 Maven보다 최대 100배까지 빠르다고한다.

가독성이 높다.

Maven 같은 경우 설정내용을 XML로 정의해야한다. 

그래서 의존관계가 복잡한 프로젝트일경우 무한의 <> 꺽쇄굴레에 빠져야한다..

 

예를 들어 maven의 코드를 보면 아래와 같다. pom.xml에 필요한 라이브러리들을 정의할 수 있다. 

같은 내용을 gradle로 정의한건 아래와 같다. 훨씬 코드가 간단하고 상속이나 의존관계를 조금더 직관적으로 확인할 수 있다. 

설정주입방식(configuration injection) 사용

maven같은 경우 특정 설정을 몇개의 모듈에 공유하기 위해서는 부모프로젝트를 상속해야했다. 

그래서 Build라는 동적인 요소를 xml로 정의하는데 어느정도 한계가 있었다. (안써봐서 잘모름)

 

하지만, gralde같은 경우 설정주입방식을 사용해서 공통모듈을 바로 상속해서 사용할수 있다.

그러다보니 설정주입시 프로젝트 조건도 체크할수 있어서 프로젝트별로 설정을 다르게 지정할 수도 있고,

이걸 groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다. 

 

참고

https://velog.io/@suwon-city-boy/Maven%EA%B3%BC-Gradle-%EB%B9%8C%EB%93%9C-%EA%B4%80%EB%A6%AC-%EB%8F%84%EA%B5%AC%EC%97%90-%EB%8C%80%ED%95%B4

 

Maven과 Gradle, 빌드 관리 도구에 대해

빌드 관리 도구가 무엇인지, 가장 많이 쓰이는 빌드 자동화 도구 Maven, Gradle의 특징과 비교

velog.io

 

https://velog.io/@bye9/Maven-gradle-%EC%BD%94%EB%93%9C-%ED%91%9C%EA%B8%B0%EB%B2%95

 

Maven & gradle, 코드 표기법 종류

소스코드를 컴파일, 테스트, 정적분석 등을 실시하여 실행 가능한 어플리케이션으로 자동 생성하는 프로그램계속해서 늘어나는 라이브러리 자동 추가 및 관리프로젝트를 진행하며 시간이 지남

velog.io

https://velog.io/@imok-_/Maven%EA%B3%BC-Gradle-%EC%B0%A8%EC%9D%B4

 

Maven과 Gradle 차이

Maven과 Gradle의 설명과 차이점

velog.io

 

728x90
반응형