빌드 : Maven? Gradle?

yeezze·2022년 7월 13일
0

spring 프로젝트를 생성하는 화면을 보면 Project에 Maven과 Gradle로 나뉜다. 이게 뭘까?
일단 이 둘은 빌드 관리 도구이다.

1. 빌드 관리 도구란?

📌 빌드란?
소스코드 파일을 컴파일에서 실행할 수 있는 가공물로 변환하는 과정 또는 결과물이다. 다시 말하면 우리가 작성한 소스코드(java), 프로젝트에서 쓰인 각각의 파일 및 자원 등(.xml, jpg, propertied, yml)을 jvm이나 톰캣 같은 WAS가 인식할 수 있는 패키징하는 과정 및 결과물이라고 할 수 있다.

📌 빌드 관리 도구란?
소스코드에서 어플리케이션 생성을 하면서 여러가지 라이브러리를 사용하는데, 이 빌드 관리 도구는 사용자가 직접 관리할 필요 없이 필요한 라이브러리들을 자동으로 관리한다.

사용 이유

대규모 프로젝트에서는 무엇을 빌드할지, 어떤 순서로 할지, 어떤 의존성이 있는지 모두 추적하기 쉽지 않다. 빌드 도구를 사용하면 이를 일관되게 할 수 있다.

수행하는 작업

  1. 종속성 다운로드
  2. 소스코드를 바이너리코드로 컴파일
  3. 바이너리 코드를 패키징
  4. 테스트 실행
  5. 프로덕션 시스템에 배포

코드를 컴파일해서 binary code로 만들고, 패키징하고 코드를 테스트하여 실행가능한 프로그램이 나오기 까지의 과정(빌드)을 자동화하는 것

2. Maven

개념

자바 전용 프로젝트 Lifecycle 관리 목적 빌드 도구이다. Apache Ant 불편함을 해결코자 만들어졌으며, 스프링에서 사용된다.

  • pom.xml을 이용한 정형화된 빌드 시스템
  • 멀티 프로젝트에서 특정 설정을 다른 모듈에 사용하려면 상속을 받아야한다.
  • 정해진 라이프사이클에 의하여 작업을 수행하며, 전반적인 프로젝트 관리 기능도 포함하고 있다.

3. Gradle

  • 오픈소스 기반의 build 자동화 시스템
  • JVM 기반의 빌드도구로 기존의 Ant, Maven을 보완
  • Android OS의 빌드 도구로 채택됨
  • Maven과 Ivy 등 다른 빌드도구와 호환 가능 (완전 지원)
  • 설정 주입 방식 (Configuration Injection)
  • 멀티 프로젝트의 빌드를 지원하기 위해 설계됨
  • Groovy 문법 사용

📌 Groovy란?
JVM에서 사용되는 스크립트 언어로, 문법이 Java와 매우 유사.
Java와 호환이 되며 Java 클래스 파일을 그대로 Groovy 클래스 파일로 사용 가능.

Gradle 설정파일

📌 setting.gradle
프로젝트 구성을 설정할 때 작성하는 파일이다. 보통 프로젝트간의 의존성 및 서브프로젝트, 교차프로젝트 같은 멀티 프로젝트를 구성할 때 사용한다. 단, 싱글 프로젝트의 경우에는 생략이 가능하다.

📌 build.gradle
빌드에 대한 모든 기능을 정의하는 파일이다. 프로젝트에서 사용하는 환경 설정, 빌드 방법, 라이브러리 정보 등을 기술함으로써 빌드 및 프로젝트의 관리환경을 구성한다.

Gradle의 Lifecycle

1) 초기화

빌드 대상 프로젝트를 결정하고 각각에 대한 Project 객체를 생성한다. settings.gradle 파일에서 프로젝를 구성한다.

2) 구성

빌드 대상이 되는 모든 프로젝트의 빌드 스크립트를 실행한다.

3) 실행

구성 단계에서 생성하고 설정된 프로젝트의 태스크 중에 실행 대상을 결정한다. gradle 명령행에서 지정한 태스크 이름 인자와 현재 디렉토리를 기반으로 태스크를 결정하여 선택된 태스크들을 실행한다.

4. Maven vs Gradle

Gradle을 사용해야 하는 이유

1. 속도가 빠르다


gradle 공식문서에 따르면 Gradle은 메이븐보다 최대 100배까지 빠르게 작동한다고 한다.

2. Build라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많다.

  • 설정 내용이 길어지고 가독성이 떨어짐
  • 의존관계가 복잡한 프로젝트 설정하기에 부적절
  • 상속구조를 이용한 멀티 모듈 구현
  • 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야함

3. Gradle은 Groovy를 사용하기 때문에, 동적인 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.

  • Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버함
  • 설정 주입 시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있음

결론

프로젝트 빌드타임이 비용문제로 이어질 경우 Gradle을 사용하면 좋을 것 같다. 또한 Gradle로 프로젝트를 진행해보면서 느낀 것은 설정 주입 방식을 통해 사용하고 싶은 라이브러리들을 의존관계에 추가함으로써 간편하게 개발할 수 있다는 점이 편리하게 느껴졌다. Maven은 XML 형식을 지켜야하기 때문에 불편하지 않을까 생각이 든다.

보통 빌드를 완료했다면 해당 프로젝트를 서버에 배포할 것이다. Gradle로 빌드가 완료되면 jar파일이 생성된다. jar 파일을 서버에서 실행시키면 배포가 되는 것!!

출처

https://velog.io/@alicesykim95/Maven과-Gradle의-차이점
https://wangmin.tistory.com/50
https://velog.io/@suwon-city-boy/Maven과-Gradle-빌드-관리-도구에-대해

profile
백엔드 개발자 😊

0개의 댓글