서버/Spring

[Spring] 빌드도구 maven 과 gradle 차이점 및 장단점 비교

피노키오이 2021. 7. 9. 08:59
반응형

개요

 

이번에는 Spring에서 사용되는 빌드 도구 maven과 gradle의 차이점에 대해서 알아보도록 하겠습니다.

 


Spring 빌드도구maven과 gradle 차이점

 


Maven 장점 및 특징

 

  1. 자바 전용 프로젝트 라이프사이클 관리 목적 빌드 도구이며 Apache Ant 불편함을 해결하고자 만들어짐.
  2. pom.xml을 이용한 정형화된 빌드 시스템(필요한 라이브러리를 정의해 놓으면 알아서 네트워크를 자동으로 다운로드하여줌)
  3. 간단한 설정을 통한 배포 관리가 가능함.

 


Maven 설정 파일

 

  1. Setting.xml – Maven을 빌드할 때 의존 관계에 있는 라이브러리, 플러그인을 중앙 저장소에서 개발자 PC로 다운로드하는 위치(로컬 저장소)의 경로를 지정, 변경할 수 있다.
  2. Pom.xml – 의존성 추가를 할 수 있으며 프로젝트의 설정되어있는 라이브러리, 설정 등 알 수 있다.

 


Gradle 장점 및 특징

 

  1. Maven 과 Ant의 장점을 조합하여 만든 빌드 도구이다.
  2. Build.gradle을 이용한 정형화된 빌드 시스템이다.
  3. 멀티 프로젝트에 용이하다.

 


Gradle 설정 파일

 

  1. build.gradle – Maven의 pom.xml과 비슷한 플러그인, 의존성 추가를 위한 파일이다.

 


Gradle 사용이유.

 

Gradle Maven보다 좋은 점.

1. Build라는 동적인 요소를 XML로 정의하기(Maven 방식)에는 어려운 부분이 많다.

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

 

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

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

 

따라서 build 도구로 maven 보다 gradle을 사용한다.


Maven과 Gradle의 차이 및 성능 비교

 

Gradle이 시기적으로 늦게 나온 만큼 사용성, 성능이 더 뛰어나다.

 


Groovy 실행 원리

 

  • Groovy 소스는 컴파일하면 Java class가 만들어진다. 이것을 실행하기 위해서는 groovy.jar와 asm.jar 라이브러리 파일이 필요하다.

 


Groovy 문법 doc

 

https://docs.groovy-lang.org/next/html/documentation/#_groovy_language_specification

 

Groovy Language Documentation

methodNotFound { receiver, name, argList, argTypes, call -> // receiver is the inferred type of the receiver // name is the name of the called method // argList is the list of arguments the method was called with // argTypes is the array of inferred types

docs.groovy-lang.org

 


Gradle 환경설정.

 

<build.gradle> 참조

  • Plugin
    • 프로젝트를 빌드하기 위해 필요한 작업들은 지원하는 플러그인 설정이다.
    • 웹 표준 기능을 확장해주는 프로그램이다.

 

  • Configurations
    • 자바에서의 의존성을 그룹화시킨다.
    • Compile : 프로젝트를 컴파일할 때 필요한 의존 라이브러리.
    • Runtime : 프로젝트를 실행할 때 필요한 의존 라이브러리. - 기본적으로 Compile을 모두 포함.

 

  • Repositories
    • gradle이 필요한 라이브러리를 자동으로 다운하기 위해 사용하는 저장소이다.
    • jcenter()와 mavenCentral()은 gradle의 메소드이며, 이 둘이 주로 사용된다.
    • jcenter는 JCenter 저장소이고 mavenCentral()은 Maven 중앙 저장소이다.
    • 해당 코드 세팅에서 두 저장소를 모두 포함했다.

 

  • ext
    • 일종의 전역변수를 설정하는 곳이다.
    • 여러 라이브러리 모듈이 포함되어 있을 때 모듈간에 공유할 수 있는 변수이다.

 

  • dependencies
    • 저장소에서 필요한 라이브러리를 사용하기위한 문장이다.
    • 해당 코드에서는 주로 implementation~ 의존문을 썼으며 이는 컴파일시에 의존하는(사용) 라이브러리를 지정하는 것이다.
    • 의존문에 사용된 주로 사용하는 엔진 발췌 
      spring-boot-starter-thymeleaf 텍스트, HTML, XML, Javascript, CSS 그리고 텍스트를 생성할 수 있는 템플릿 엔진이다.
      org.projectlombok:lombok getter, setter, toString 등의 메서드 작성
      org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16 /
      mysql:mysql-connector-java/
      org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3/
      org.springframework.boot:spring-boot-starter-data-jpa
      mybatisjpa를 이용한 db 개발 환경
      org.apache.httpcomponents:httpclient:4.3.6 http 요청을 하게해주는 라이브러리
  • dependencyManagement
    • 어떤 artifact의 버전을 사용할 것 인지만 기술하는 곳

 


Gradle 프로젝트 java library 구조

 

  • src/main/java : 배포할 자바 소스코드 디렉토리
  • src/main/resources : 배포한 설정 파일 디렉토리
  • gradle/wrapper 디렉토리 : 내장 task wrapper. 개발자들이 직접 gradle을 설치하지 않아도 빌드가 가능하다.
  • gradlew : 리눅스 또는 맥 OS 용 실행 쉘 스크립트 파일이다.
  • gradlew.bat : 윈도우용 실행 배치 스크립트 파일이다.
  • gradle-wrapper.jar : JAR 형식으로 압축된 wrapper파일이다. gradlew나 gradlew.bat 파일이 프로젝트 안에 설치되는 이 파일을 사용하여 gradle task를 실행한다.
  • gradle-wrapper.properties : gradle wrapper 설정정보 파일이다. wrapper의 버전등을 확인할 수 있다.
  • build.gradle : 프로젝트의 라이브러리 의존성, 플러그인, 라이브러리 저장소등을 설정하는 빌드 스크립트 파일이다.
  • settings.gradle : 프로젝트의 구성 정보 파일. 멀티 프로젝트를 구성하여 프로젝트를 모듈화할 경우, 하위 프로젝트의 구성을 설정할 수 있다.

 


 

반응형