반응형
안녕하세요!
Maven(메이븐) 기반의 프로젝트를 진행하면서 집에선 Gradle(그래들)을 사용하여 두개 차이의 대하여 알아보다 포스팅 하게되었습니다.
Maven 장점 및 특징
- 자바 전용 프로젝트 라이프사이클 관리 목적 빌드 도구이며 Apache Ant 불편함을 해결코자 만들어졌다.
- pom.xml을 이용한 정형화된 빌드 시스템(필요한 라이브러리를 정의해 놓으면 알아서 네트워크를 통하여 자동으로 다운받아줌)
- 간단한 설정을 통한 배포 관리가 가능 하다.
Maven 설정파일
- setting.xml
- 메이븐을 빌드할 때 의존 관계에 있는 라이브러리, 플러그인을 중앙 저장소에서 개발자 PC로 다운로드 하는위치(로컬저장소)의 기본 설정 'USER_HOME/.m2/repository' 인데 settings.xml의 에 원하는 로컬 저장소의 경로를 지정, 변경할 수 있다- pom.xml
- 의존성 추가를 할 수 있으며 프로젝트의 설정 되어있는 라이브러리, 설정 등 알 수 있
ex) pom.xml 예시
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo-maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo-maven</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle 장점 및 특징
- Maven 과 Ant 의 장점을 조합하여 만든 빌드 도구이다.
- build.gradle을 이용한 정형화된 빌드 시스템이다.
- 멀티 프로젝트에 용이하다
Gradle 설정파일
- build.gradle
- 메이븐의 pom.xml 과 비슷한 플러그인, 의존성 추가를 위한 파일이다.
ex)build.gradle 예시
buildscript {
ext {
springBootVersion = '1.5.4.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
Maven vs Gradle
Gradle이 시기적으로 늦게 나온만큼 사용성, 성능 등 비교적 뛰어난 스펙을 가지고있다.
Gradle이 Maven보다 좋은점
- Build라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많다.
- 설정 내용이 길어지고 가독성 떨어짐
- 의존관계가 복잡한 프로젝트 설정하기에 부적절
- 상속구조를 이용한 멀티 모듈 구현
- 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야 함 (상속의 단점 생김)
- Gradle은 Groovy를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
- Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버했다.
- 설정 주입 시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다.
결론
지금 시점에서 Gradle을 사용하지 않을 이유는 '익숙함' 뿐인 것 같다.
Gradle이 출시되었을 때에는 Maven이 지원하는 Scope를 지원하지 않았고 성능면에서도 앞설것이 없었다.
Ant의 유연한 구조적 장점과 Maven의 편리한 의존성 관리 기능을 합쳐놓은 것만으로도 많은 인기를 얻었던 Gradle은 버전이 올라가며 성능이라는 장점까지 더해지면서 대세가 되었다.
물론 그동안 사용해왔던 Maven과 이제는 익숙해진 XML을 버리고 Gradle과 Groovy문법을 배우는 것은 적지않은 비용이 든다.
특히 협업을 하는 경우, 프로젝트 구성과 빌드만을 위해 모든 팀원이 Groovy 문법을 익여야 한다는 사실은 Gradle를 사용하는데 큰 걸림돌이 된다.
실제로 여전히 Maven의 사용률은 Gradle을 앞서고 있으며 구글 트랜드 지수도 Maven이 Gradle을 앞선다.
참고: https://bkim.tistory.com/13 [어쩌다, 블로그]
반응형
'이론' 카테고리의 다른 글
DevOps 란 무엇일까? (0) | 2020.07.28 |
---|---|
Load Blancer란 무엇일까??? (0) | 2020.07.27 |
ORM과 JPA / Hibernate 란 무엇일까 (0) | 2020.07.23 |
WAS 와 웹 서버(Web server) 차이 (0) | 2020.07.15 |
OAuth 2.0 이란 (0) | 2020.07.06 |