티스토리 뷰
우선 Maven과 Gradle을 간략하게 알아보자.
1.Maven
- Apache의 이름 아래 2004년 출시되었다.
- Ant를 사용하던 개발자들의 불편함을 해소 + 부가기능 추가
Maven은 무엇인가?
- 빌드를 쉽게 할 수 있도록 해준다.
- pom.xml을 이용한 정형화된 빌드 시스템
- 뛰어난 프로젝트 정보 제공
- Change log document created directly from source control
- Cross referenced sources
- Mailing lists
- Dependency list
- Unit test reports including coverage
- 개발 가이드 라인 제공
- 테스트 소스 코드를 별도의 병렬 소스 트리에 보관
- 테스트 케이스 명명 규칙을 사용하여 테스트 위치 및 실행
- 테스트 케이스에 환경을 설정하고 테스트 준비를 위해 빌드를 사용자 정의하지 않아도 된다.
- 새로운 기능을 쉽게 설치할 수 있고 업데이트할 수 있음
2.Gradle
- Ant와 Maven의 장점을 모아모아 2012년 출시
- Android OS의 빌드 도구로 채택 됨
Gradle이란 무엇인가?
- Ant처럼 유연한 범용 빌드 도구
- Maven을 사용할 수 있는 변환 가능 컨벤션 프레임 워크
- 멀티 프로젝트에 사용하기 좋음
- Apache Ivy에 기반한 강력한 의존성 관리
- Maven과 Ivy 레파지토리 완전 지원
- 원격 저장소나, pom, ivy 파일 없이 연결되는 의존성 관리 지원
- 그루비 문법 사용
- 빌드를 설명하는 풍부한 도메인 모델
3.Gradle이 Maven보다 좋은 점
- Build라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많다.
- Maven은 설정 내용이 길어지고 가독성 떨어진다.
- 의존관계가 복잡한 프로젝트 설정하기에 부적절하다
- 상속구조를 이용한 멀티 모듈 구현이 가능하다.
- 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야 함 (상속의 단점 생김)
- Gradle은 Groovy를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
- Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버했다. 설정 주입 시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다.
4.마무리
Spring Framework를 처음 공부를 시작하면서 Maven을 처음 접했다.
스프링에 대해서 공부하는 시간이 길어지고 github나 여러 강의에서 코드 많이 보면서 Gradle
을 많이 사용한다는 것을 느꼈다. 그래서 최근에는 Gradle
을 사용해보기 시작했다.
짧은 시간 사용했지만 Gradle
빌드 도구를 사용하면서 느낀 장점은
첫번째, 설정 내용이 짧다. 기본 설정만 추가하여 프로젝트를 생성해봐도 알 수 있다.
의존성은 Spring Web
,Spring Data JPA
, H2
, Lombok
, Thymeleaf
만을 추가했다.
먼저 Maven을 보자
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
다음은 Gradle
설정 파일이다.
plugins {
id 'org.springframework.boot' version '2.2.1.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
developmentOnly
runtimeClasspath {
extendsFrom developmentOnly
}
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}
보다시피 길이에 차이도 있고, Gradle
이 한눈에 더 잘 들어온다는 장점이 있다.
다음으로 멀티 프로젝트를 구성하는데 편리하다는 점이었다. Maven
은 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속을 받아야 하지만 Gradle
은 설정 주입 방식으로 이를 해결한다.
아직 소규모, 토이프로젝트만 진행하다보니 테스트 코드를 수가 많지 않아 비교하기가 어렵지만 Gradle 사이트에서 Maven과 Gradle 비교
글을 만 봐도 확실한 차이를 느낄 수 있었다.
이외에도 Gradle
이 가지는 장점이 많다. 앞으로 Spring
과 관련된 많은 프로젝트를 하다보면 Gradle
의 장점을 더 많이 느낄 수 있을 거 같다.
5.참고
'Programming > Java&Spring' 카테고리의 다른 글
[Java] final 키워드 (0) | 2020.05.29 |
---|---|
[Java] String, StringBuffer, StringBuilder 차이 (0) | 2020.05.26 |
Springboot jar 패키징 후 실행 방법 (0) | 2019.11.27 |
[Spring] 생성자 주입을 사용해야 하는 이유, 필드인젝션이 안좋은 이유(+Lombok를 사용한 생성자 주입 방법) (0) | 2019.11.20 |
Lombok 사용 시 @JsonIgnore 동작안하는 문제 해결 (0) | 2019.11.18 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- AOP
- final
- 자바
- apache
- 쉘스크립트
- 413
- 빈팩토리
- java
- DI
- jar 실행
- 스프링프레임워크
- stringbuffer
- 스프링
- EmbededTomcat
- 토비의스프링
- springboot
- 빌드도구
- 템플릿
- Tomcat
- lombok
- mod_jk
- gradle
- 애플리케이션컨텍스트
- shellscript
- 연동
- IoC
- Spring
- JsonIgnore
- StringBuilder
- JsonProperty
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함