벌써 수료를 한지 일주일이 넘었다.
수료를 하고, 이제 슬슬 공부를 하려고 한다.
이제 6개월동안 회고를 작성 할 예정이다! 그 전에 예전에 빌드와 배포를 배워서 이것저것 찾아보다보니,
spring에서 빌드도구가 Maven Gradle이 있다는 것을 알게 되었다.
수업시간에는 당연하게 Maven 으로 선택해서 배웠는데, Gradle은 뭘까? 라는 생각에 포스팅을 해보기로 했다.
📝 Maven Gradle은 무엇일까 ?
1. 빌드관리 도구란? 🔍
: 프로젝트에서 작성한 java코드와 프로젝트 내에 필요한 각종 설정 파일( xml, properties, jar )들은
JVA이나 WAS가 인식 할 수 있도록 패키징 해주는 빌드과정을 도와주는 도구이다 즉 빌드 자동화 도구라고 생각하면 된다.
더 자세하게 나아가자면 애플리케이션을 개발하면서, 다양한 외부 라이브러리들을 다운로드하고 해당 라이브러리를 사용하여 개발해야하는 상황이 많은데 모두 다운 받을 필요 없이 빌드 도구 설정 파일에서 자동 다운로드 해주고 간판 관리해주는 도구라고 생각하면 된다.
2. Maven이 란? 🔍
Maven은 spring하면서 들어봤는데
java8용 프로젝트 관리 도구로 apache의 ant대안으로 만들어졌다.
빌드중인 프로젝트, 빌드 순서, 다양한 라이브버리 종속성 관계를 pom.xml파일에 명시한다.
자신이 사용하고하즌 모듈이 있다면 아래 URL에서 찾아 xml파일에 넣어주면 된다.
📚 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 https://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion> <!-- Maven 2 버전 이후 POM의 경우 항상 4.0.0 -->
<groupId>edu.kh</groupId> <!-- 최상위 패키지 1, 2레벨 -->
<artifactId>project</artifactId> <!-- 최상위 패키지 3레벨 == context-path -->
<name>boardProject</name> <!-- 프로젝트 명 -->
<packaging>war</packaging> <!-- 배포 형식 -->
<version>1.0.0--BUILD-SNAPSHOT</version>
<!-- properties : 메이븐이 적용된 프로젝트에서 공통적으로 사용할 값을 작성하는 태그(전연 변수) -->
<properties>
<java-version>11</java-version>
<org.springframework-version>5.3.14</org.springframework-version>
<org.aspectj-version>1.9.9.1</org.aspectj-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
</properties>
<!-- dependencies : Maven 프로젝트는 외부 저장소와 의존 관계를 맺고 있어 프로젝트에 필요한 파일을(라이브러리)
사용자가 직접 받을 필요 없이 해당 태그 내에 지정된 형식으로 작성하면 네트워크를 통해 외부 저장소에서 자동으로 얻어와 세팅함. -->
<dependencies>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.9.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2. Gradle이 란? 🔍
: maven과 ant에서 볼 수 있는 개념들을 사용하는 대안으로 나온 프로젝트 빌드 관리 툴이다. (완전한 오픈소스)
Groovy 언어를 사용한 Domain-specific-language를 사용하여 xml파일을 사용하는 Maven보다 코드가 훨씬 간결하다.
Gradle은 어떤 부분이 업데이트되었는지 알 기 때문에 빌드에 점진적으로 추가 할 수 있다.
ㄴ 업데이트가 이미 반영된 부분은 재 실행되지 않아 빌드 시간을 단축 할 수 있다!
📚 build.gradle
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
// https://mvnrepository.com/artifact/com.google.code.gson/gson
implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.1'
}
test {
useJUnitPlatform()
}
3. pom.xml vs build.gradle
: 위에 설정 파일만 봐도, 코드가 간결하고 가독성이 좋은 것을 알 수 있다.
이것저것 블로그를 찾아보니, Maven과 Gradle을 비교한게 있어 마저 작성해보고자 한다.
4. Maven vs Gradle 🥊
- Maven에는 Gradle과 비교 문서가 없지만 Gradle은 비교문서가 존재한다.
- Gradle이 Maven보다 늦게 나온 만큼 사용성, 성능에서 비교적 더 좋은 스팩을 가지고 있다.
1️⃣ 설정내용이 짧고 가독성이 좋다.
2️⃣ 의존 관계가 Maven보다 복잡하기 않다.
3️⃣ Maven은 상속구조를 통해 구현을 해야하지만 Gradle은 그럴 필요가 없다.
4️⃣ Gradle은 Maven보다 최대 100배 빠르다.
🤔 나의 생각
Maven쓸때도 편리하다고 느꼈는데, Gradle이 더 편리하다고 하여 매우 기대가된다!
찾다보니 아직도 Maven을 사용하는 이유는 익숙함 때문이라고 하던데 만약 Maven을 사용하지 않았다면
Gradle을 먼저 사용하는게 더 좋을 것 같다 (근데, Maven한번 쓰고 Gradle 쓰면 더욱 편리함을 느끼지 않을까..?)
💻💭 참고사이트